Ubah tema Zsh di Android Studio

14

Saya baru saja melompat kapal zshdan saya menggunakan Oh my Zsh! tema blinks. Ini terlihat sangat bagus di Terminal OSX, tetapi terlihat sangat buruk di terminal Android Studio.

Jadi pertanyaan saya, adakah cara untuk memeriksa bahwa sesi ini telah dibuka di Android Studio dan bukan di OSX Terminal dan mengubah zshtema sesuai dengan itu?

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Sheharyar
sumber
1
Saya tidak punya jawaban, tapi saya pikir ini hanya masalah dengan Intellij secara umum. Saya memposting ini di forum mereka beberapa waktu lalu. Ingin tahu jawabannya sendiri.
jktravis
Saya tidak yakin saya mengerti masalahnya, tetapi cukup mudah untuk menjalankan skrip kecil untuk mengubah 'PS1' dari apa pun menjadi apa pun. Sepertinya Anda ingin mengubah warna latar belakang sebagian besar.
Ray Andrews
2
Sebagai semacam kludge, Anda dapat mencoba melintasi pohon PID mulai dari proses induk Anda ($ PPID) hingga PID 1. Jika Anda melihat ada java, alihkan tema.
drdaeman

Jawaban:

2

Karena tidak ada orang lain yang memberi Anda jawaban, saya mencoba walaupun memiliki perangkat lunak yang sama sekali berbeda. Jadi ini adalah jawaban umum tentang cara melakukannya dengan perangkat lunak apa pun . Ada dua pendekatan yang muncul di pikiran:

1. Lingkungan yang berbeda

Buka Terminal, dan jalankan env > env.terminal. Buka Android Studio, dan jalankan env > env.studio. Sekarang, di terminal mana pun, Anda dapat menjalankan diff -dby --suppress-common-lines env.terminal env.studio(jika Mac OS X diff memiliki opsi-opsi itu; jika tidak -U1bekerja dengan cukup baik).

Sebagai contoh, berikut adalah perbedaan antara xtermdan konsolepada kotak Linux saya (catatan: spasi dimodifikasi agar sesuai pada halaman):

                                   > 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           <

Beberapa dari hal itu jelas berisik dari cara saya meluncurkan dua terminal yang berbeda. Tetapi yang lain tidak. Jika saya menginginkan sesuatu hanya di XTerm, maka if [ -n "$XTERM_VERSION" ]sepertinya akan menjadi cara yang cukup baik untuk melakukan itu. Demikian pula, untuk Konsole, $KONSOLE_PROFILE_NAMEakan menjadi yang baik (dan mungkin beberapa yang lain juga).

2. Proses induk yang berbeda

Shell mengetahui ID prosesnya sendiri, dapat diakses melalui $$. POSIX juga harus $PPIDmendapatkan PID induk secara langsung, jadi saya curiga Anda memilikinya di zsh juga. Jika tidak, psbisa mendapatkannya untuk Anda: ppid=$(ps -o ppid= $$). Anda kemudian dapat menjalankan perintah, juga dengan ps:

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

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

(Anda dapat mencoba -o comm=juga).

Dalam skrip shell, itu akan terlihat seperti:

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

Jika Anda perlu melangkah lebih jauh ke atas pohon proses, Anda dapat menggunakan psuntuk mendapatkan orang tua orang tua, dll.

derobert
sumber