3

F1 キーを使用するコンソール アプリケーションを作成しています (ヘルプ用)。残念ながら、(KDE の) Konsole はこのキーを使用しませんが、Gnome ターミナルは使用するため、アプリケーションから F1 キーにアクセスできなくなります。F1 キーが既に GUI 側 (Gnome ターミナル) にマッピングされているかどうかを検出する方法はないと思いますが、もしあれば、その答えはこの質問を未然に防ぎます。:)

したがって、私の次の最善の策は、Gnome ターミナル内で実行しているかどうかを検出することです。それを行う方法はありますか?私は主に Ruby 内からこれを収集することに関心がありますが、シェルまたは環境変数、または仮想ファイルシステム (/proc、/dev など) を介して実行できる場合は、それで十分です。

私はこれを行うための信頼できる方法を望んでいますが、Gnome ターミナルがラッピング ターミナルであると合理的に推測できる手がかりを得るために環境変数を grep するなどの「最良の推測」アプローチに落ち着くことができます。

追加情報: 他のキーも Gnome ターミナルによって「盗まれます」。Gnome ユーザー向けに、代替キーに関する何らかの情報メッセージを表示するつもりです。

4

6 に答える 6

9

Googleage は、COLORTERM 環境変数を「gnome-terminal」に設定する Gnome ターミナルに依存できる可能性があることを明らかにしました。

于 2008-11-03T05:36:50.230 に答える
5

zsh の場合:

[[ "$COLORTERM" == "gnome-terminal" ]] || [[ ${$(ps -p $(ps -p $$ -o ppid=) -o cmd=):t} == gnome-terminal* ]]

以前は gnome-terminal を設定$COLORTERMしていましたが、これは削除されました (3.12.0-67-g1d5c1b6)。

于 2014-10-17T15:49:46.210 に答える
1

これをシェルに委任したい場合は、かなり大雑把な方法です。それ以外の場合、CまたはC ++では、/ 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」を使用してプログラムの名前を指定できます。

私は知っています、それは間違いなく「海賊のようにハックする」です;)

于 2008-11-03T09:24:48.040 に答える
1

通常、termcap info 別名 terminfo を使用します。これにより、使用している端末の種類と、キーが何であるかがわかります。

これはユーザーの選択です。Konsole がそうであるように、Gnome ターミナルはおそらく一種の x-term として報告されるため、ユーザーが F1 キーを押す方法が存在する可能性があります。したがって、2つの端末機能は同等であると報告されるのではないかと思います。

ファンクション キーのエスケープ コードに関するこの調査は、gnome 端末で F1 キーを押すようにする方法を実際に説明しなくても、興味深いかもしれません。私が昔使っていた Mac OS X 端末のことを考えると、スクロール バーの PageUp と PageDown をキャッチし、Command-PageUp と Command-PageDown はそれらを端末に渡しました。

于 2008-11-03T05:39:35.950 に答える
1

fwiw、これは gnome-terminal の設定です。ユーザーは、GNOME ターミナル メニューの [編集] -> [キーボード ショートカット] に移動して、F1 キーバインドを変更または削除できます。

于 2008-12-28T08:36:55.047 に答える
0

選択したターミナル エミュレーターの $TERM を確認し、現在のディレクトリに新しいターミナルを生成するためのエイリアスを追加するだけです。

if [[ $TERM == 'xterm' ]] ; then
  alias nw='gnome-terminal --working-directory=$PWD'
fi
于 2011-02-28T09:22:23.740 に答える