guakeで端末が開いていることを確認する

guakeで端末が開いていることを確認する

.vimrcvimが開いた端末がGuakeで実行されていることを確認する必要があります。これをどうやって見ることができますか?変数が$TERMうまくいかないようです。

ベストアンサー1

確実な方法はありません。TERMほとんどの互換エミュレータに同じ値を使用します。 screenおよびtmuxレポートを除くほとんどの最新の端末エミュレータですxterm

プロセスリストを参照して、Vim親プロセスの親プロセスを見つけることができます。これにより、Vimがどの端末エミュレータ(存在する場合)で実行されているかを確認できます。一般に、Vimは、ターミナルエミュレータから直接起動されたシェルから起動されます。よりスマートにプロセスリストをVimで親、親の親などで繰り返しながら、子プロセスと同じ端末で実行されていないプロセスを見つけたら停止することもできます。端末エミュレータでなければなりません。

この経験的な方法は、いくつかの方法で欺くことができます。特にどこでもプログラムを起動し、入出力をリダイレクトして他の端末でインタラクティブにすることが可能なので(一般的ではありませんが)さらにそうです。

以下は、現在プロセスが実行されている端末エミュレータのコマンドラインを表示する簡単なテスト済みスクリプトです。この時点で、プロセスは、リダイレクトすることなく、その端末エミュレータの子として始まったと仮定します。

#! /bin/sh
set -f
pid=$PPID
my_tty=$(ps -p $$ -o tty=)
while
  [ "$pid" -ne 1 ] &&
  set -- $(ps -p "$pid" -o ppid= -o tty= -o args=) &&
  [ "$2" = "$my_tty" ]
do
  pid=$1
done
shift; shift
printf '%s\n' "$*"

このスクリプトを呼び出しますwhich-terminal-emulator。追加.vimrcできます

let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
endif

おすすめ記事