Изменить тему Zsh в Android Studio

14

Я недавно прыгнул с корабля, zshи я использую О мой Zsh! тема blinks. Он выглядит очень хорошо в OSX Terminal, но очень плохо выглядит в терминале Android Studio.

Итак, мой вопрос: есть ли способ проверить, что этот сеанс был открыт в Android Studio, а не в OSX Terminal, и изменить zshтему в соответствии с этим?

введите описание изображения здесь

введите описание изображения здесь

Sheharyar
источник
1
У меня нет ответа, но я думаю, что это просто проблема с Intellij в целом. Я разместил это на их форумах некоторое время назад. Хотелось бы узнать ответ сам.
jktravis
Я не уверен, что понимаю проблему, но достаточно просто запустить небольшой скрипт, чтобы изменить «PS1» с чего бы то ни было. Похоже, вы хотите изменить цвет фона в основном.
Рэй Эндрюс
2
В качестве своего рода kludge вы можете попробовать обойти дерево PID, начиная с вашего родительского процесса ($ PPID) до самого PID 1. Если вы видите java, переключите тему.
drdaeman

Ответы:

2

Поскольку никто не дал вам ответ, я пытаюсь, несмотря на то, что у меня совершенно другое программное обеспечение. Так что это общий ответ о том, как это сделать с любым программным обеспечением. На ум приходят два подхода:

1. Различные среды

Откройте Терминал и запустите env > env.terminal. Откройте Android Studio и запустите env > env.studio. Теперь вы можете запустить любой терминал diff -dby --suppress-common-lines env.terminal env.studio(если у Mac OS X diff есть эти опции; если не -U1работает достаточно хорошо).

В качестве примера, вот разница между xtermи konsoleна моей коробке Linux (примечание: интервал изменен, чтобы поместиться на странице):

                                   > PROFILEHOME=
                                   > SHELL_SESSION_ID=1e8d5ab2d16641668485f991a1beffe3
                                   > QSG_RENDER_LOOP=
                                   > COLORTERM=truecolor
XTERM_SHELL=/bin/bash              <
                                   > KONSOLE_DBUS_SESSION=/Sessions/1
XTERM_VERSION=XTerm(327)           | KONSOLE_DBUS_WINDOW=/Windows/1
TERM=xterm                         <
                                   > TERM=xterm-256color
                                   > KONSOLE_DBUS_SERVICE=:1.1514
                                   > QMLSCENE_DEVICE=
                                   > KONSOLE_PROFILE_NAME=Default
                                   > COLORFGBG=15;0
WINDOWID=83886094                  | WINDOWID=115343366
XAUTHORITY=/tmp/xauth-1000-_0      | XAUTHORITY=/home/anthony/.Xauthority
KDED_STARTED_BY_KDEINIT=1          <
XTERM_LOCALE=en_US.UTF-8           <

Некоторые из этих вещей явно шумят от того, как я запустил два разных терминала. Но другие нет. Если бы я хотел что-то только в XTerm, то if [ -n "$XTERM_VERSION" ], казалось бы, неплохой способ сделать это. Точно так же для Konsole $KONSOLE_PROFILE_NAMEбыло бы неплохо (и, возможно, несколько других тоже).

2. Различные родительские процессы

Оболочка знает свой собственный идентификатор процесса, к нему можно получить доступ через $$. POSIX также должен $PPIDполучить родительский PID напрямую, поэтому я подозреваю, что у вас это тоже есть в zsh. Если нет, psможете получить это для вас ppid=$(ps -o ppid= $$). Затем вы можете запустить команду, также с помощью ps:

xterm:~$ ps -o args= $PPID
/usr/bin/xterm

konsole:~$ ps -o args= $PPID
/usr/bin/konsole

(Вы можете попробовать -o comm=также).

В сценарии оболочки это будет выглядеть примерно так:

ppid=$(ps -o ppid= $$)   # if you don't have PPID for some reason
if [ "$(ps -o args= $ppid)" = "/usr/bin/xterm" ]; then
  echo "do xterm stuff"
fi

Если вам нужно пойти дальше вверх по дереву процессов, вы можете использовать его, psчтобы получить родительского родителя и т. Д.

derobert
источник