web-dev-qa-db-ja.com

すべてのキーの組み合わせを処理できるLinux端末はありますか?

私はターミナルモードでemacsを使うのが好きです(-nw)、しかし、ほとんどの(すべて?)端末はいくつかのキーの組み合わせを処理できないようです-たとえば、C-<RET>またはC-M-%。これは、ほとんどの端末がこれらの組み合わせを持たないVT-100をエミュレートするためです。これらのキーの組み合わせを処理できるLinux端末(できればKDE)はありますか、それともこれはすべての端末の基本的な制限ですか?

11
Yossarian

端末でキーまたはキーの組み合わせを押すと、1つまたは複数の文字のシーケンスとして端末で実行されているアプリケーションに送信されます。たとえば、を押すと a、アプリケーションはaを受け取ります。を押すと Enter、アプリケーションは文字CR(別名^M(「control-emm」と発音)、別名文字番号13、別名\rまたは\015)を受け取ります。を含むキーの組み合わせ Alt 通常、文字ESC(別名^[ a.k.a. \eまたは\033)として送信され、その後にキーまたはキーの組み合わせのシーケンスが続きます。 Alt。ファンクションキーおよびその他のキーの組み合わせは、\e[または\eOで始まるエスケープシーケンスとして送信されます。

エスケープシーケンスは完全に標準化されておらず、端末は通常、特定のキーの特定の属性を無視します。例えば、 Ctrl+Shift+letter 多くの場合、まったく同じように送信されます Ctrl+letter デフォルトでは。

を押すと、端末がキーの組み合わせに対して何を送信するかを確認できます Ctrl+V その後にシェルプロンプトでそのキーの組み合わせが続くか、C-qまたはC-h cの後にEmacsでキーの組み合わせが続きます。

一部のターミナルエミュレータでは、各キーのエスケープシーケンスを構成できます。 Xtermでは、これは Xリソース を介して行われます。ほとんどのセットアップは、Xの起動時に~/.Xresourcesからリソースを読み取り、xrdb -merge ~/.Xresourcesを使用してファイルを手動でロードできます。

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <key>percent: string("\033[37;6~")

一般的な規則では、修飾子付きのファンクションキーにESC [ number1 ; number2 ~形式のエスケープシーケンスを使用します。 number1はファンクションキーを示します(15から24の場合 F5 に F12 —歴史的な理由から、F1から F4 異なるエスケープシーケンスがあります)、number2は修飾子を示します(2 for Shift3 for Meta5 for Ctrl7 for Ctrl+Meta、およびに1を追加します Shift 少なくとも1つ Ctrl または Meta)。

Emacsはエスケープシーケンスを input-decode-mapまたはlocal-function-key-map (またはEmacs23の前のfunction-key-map)を介して内部キー表現に変換します。

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

限られているが重要なキーのセットについては、KDEのコンソールを想定して、emacs -nwで機能する複雑なキーバインディングを使用するには、次のようにします。

例として、S-<RET>を取得する実装を使用します。

  1. 新しいコンソールを開き、[設定]-> [現在のプロファイル]-> [キーボード]-> [編集]に移動します
  2. [追加]をクリックしてReturn+Shiftの新しいエントリを作成し、それに役立つキーシーケンスを指定します(xevをいじっていたときにXから送信されたキーシーケンスである\E[27;3を選択しましたが、それは間違っています-重要なことは、適切なエスケープがあり、他のものと競合しないことを確認することです)。
  3. 下部の小さなテスト領域で遊んで、機能していることを確認してください。
  4. Konsoleを再起動します。
  5. emacs -nwを起動し、スクラッチバッファで以下を評価します。

    (read-key-sequence-vector "Type your new key:")

    次に、新しいキーの組み合わせを入力します。

    • これに慣れていない場合は、行を書き出し、カーソルを行の終わりに置いたまま、Cx Ceを押して、emacsにその行を実行させます。引用符に入力した内容はすべて、次のように表示されます。何かを入力。
  6. バインドできるキーシーケンスを吐き出す必要があります。
    (コンソールのキーバインドを台無しにする前の退屈な古い[27 91 50 55 59 51]とは対照的に、[13]が返されました。)

  7. Emacs構成に追加します:

    (define-key function-key-map [27 91 50 55 59 51] [(shift return)])
    
  8. 以下を使用して、スクリーンセッションでemacs -nwを使用してテストしました。

    (define-key ess-mode-map [(shift return)] #'ess-eval-line-and-step)
    (define-key sh-mode-map [(shift return)]  #'send-line-to-Shell)
    
1

簡単に言うと、これはすべての端末の基本的な制限です。

少し長い答えは、誰かがあなたが望むことをする端末を作成したとしても、Emacs自体がこの架空の端末で動作するために大きな変更を必要とするだろうということです。

0
hruvulum

ロスレスキーボード入力を可能にする方法でVTプロトコルを拡張するいくつかの取り組みがあります(グラフィックスなどの他の機能の中でも)。

一例はnottyです: https://github.com/withoutboats/notty

0