Gnomeターミナルを検出するにはどうすればよいですか?
質問
(ヘルプのために)F1キーを使用するコンソールアプリケーションを作成しています。残念ながら、(KDEの)Konsoleはこのキーを使用しませんが、Gnomeターミナルは使用するため、F1キーはアプリケーションにアクセスできなくなります。 F1キーが既にGUI側(Gnomeターミナル)にマッピングされているかどうかを検出する方法はないと思いますが、もしあれば、その答えはこの質問を取り除きます。 :)
エルゴ、次の最善策は、Gnomeターミナル内で実行しているかどうかを検出することです。それを行う方法はありますか?私は主にRuby内からこれを収集することに興味がありますが、シェルまたは環境変数、または仮想ファイルシステム(/ proc、/ devなど)を介して行うことができればそれで十分です。
これを行うための信頼できる方法を望んでいますが、「最良の推測」に落ち着くことができます。 Gnomeターミナルがラッピングターミナルであると合理的に仮定できる手がかりを得るために環境変数をgrepするようなアプローチ。
追加情報:他のキーも「盗まれた」 Gnome Terminalによる。 Gnomeユーザーの代替キーに関する何らかの情報メッセージを表示するつもりです。
解決
Googleageは、Gnome TerminalがCOLORTERM環境変数を 'gnome-terminal'に設定することに頼ることができるかもしれないことを明らかにしました。
他のヒント
zshの場合:
[[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $ -o ppid=) -o cmd=):t} == gnome-terminal* ]]
gnome-terminalは $ COLORTERM
の設定に使用されていましたが、これは削除されました(3.12.0-67-g1d5c1b6で)。
通常、termcap情報またはterminfoを使用します。これにより、使用している端末の種類とキーがわかります。
これはユーザーの選択であり、Gnomeターミナルは、おそらくKonsoleがそうするように、Gnomeターミナル自体を一種のx-termとして報告するため、ユーザーがF1キーを押す方法を作成する方法があります。したがって、2つの端末機能は同等として報告されると思われます。
ファンクションキーエスケープコードのこの調査は、 F1プレスを生成するためにgnome端末を作成する方法が(可能な場合でも)実際に説明することなく、あなたにとって興味深いことです。私が長い間使っていたMac OS Xターミナルについて考えると、スクロールバーのPageUpとPageDownをキャッチし、Command-PageUpとCommand-PageDownはそれらをターミナルに渡しました。
これをシェルに委任したい場合は、かなり粗雑な方法です-CまたはC ++では、/ procがある場合は、/ procをウェイドする必要があります:
ps x | grep `ps o ppid,fname | grep bash | grep -v grep | head -1 | awk '{print $1}'` | grep 'gnome-terminal' | wc -l
たとえばsystem()を介して独自のプログラムから実行する場合、「bash」ではなくプログラム名を「grep」することができます
それは間違いなく「海賊のようにハックする」ことです。 ;)
fwiw、これはgnome-terminalの設定です。ユーザーは[編集]に移動できます-> gnome-terminalメニューのキーボードショートカットおよびF1キーバインドの変更または削除。
選択したターミナルエミュレータの$ TERMを確認し、現在のディレクトリに新しいターミナルを生成するためのエイリアスを追加します。
if [[ $TERM == 'xterm' ]] ; then
alias nw='gnome-terminal --working-directory=$PWD'
fi