
私は端末モード()でemacsを使用するのが好きですが、ほとんどの(すべて?)端末は特定のキーの組み合わせ(または-nw
)を処理できないようです。ほとんどの端末がこれらの組み合わせのないVT-100をエミュレートするので、私はこれを知っています。これらのキーの組み合わせを処理できるLinux端末(可能な限りKDE)はありますか?それとも、これはすべての端末の基本的な制限ですか?C-<RET>
C-M-%
答え1
端末でキーまたはキーの組み合わせを押すと、1つ以上の文字シーケンスで端末で実行されているアプリケーションに送信されます。たとえば、を押すとaアプリケーションが受信しますa
。を押すと、Enterアプリケーションは文字CR
(^M
つまり「control-emm」と発音)、記号13、またはまたは\r
)\015
を受け取ります。関連するキーの組み合わせは、Alt通常、文字ESC
(またはまたは^[
とも呼ばれる)の後に一連のキーまたはなしのキーの組み合わせが来るように送信されます。ファンクションキーと他のキーの組み合わせは、またはで始まるエスケープシーケンスで送信されます。\e
\033
Alt\e[
\eO
エスケープシーケンスは完全に標準化されておらず、端末はしばしば特定のキーの特定の属性を無視する。たとえば、Ctrl++はShift通常デフォルトで+とletterまったく同じように送信されます。Ctrlletter
CtrlVシェルプロンプトで+を押してキーの組み合わせを押すか、Emacsでまたはキーの組み合わせを押して、端末から送信されたキーの組み合わせがC-q
何でC-h c
あるかを確認できます。
一部の端末エミュレータでは、各キーのエスケープシーケンスを設定できます。 Xtermでは、次のように実行されます。XResources。ほとんどの設定は、~/.Xresources
Xが起動した時点からリソースを読み込みます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
to 24
for F5to F12- 歴史的な理由から、F1 toはF4別のエスケープシーケンスを持つ)を表し、number2
修飾子(2
for Shift、3
for Meta、5
for Ctrl、7
for Ctrl+ Meta、Shift少なくとも1つ、またはCtrlそのうちの1つを追加Meta)を表します。
Emacsは次のようにエスケープシーケンスを内部キー表現に変換します。input-decode-map
またはlocal-function-key-map
(またはfunction-key-map
Emacs 23より前)。
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
答え2
限定的で重要なキーセットの場合は、KDEのkonsoleを使用すると仮定すると、次のようにしてemacs -nwで効率的で複雑なキーバインディングを取得できます。
S-<RET>
作業を開始した実装を例にしてみましょう。
- 新しいコンソールを開き、設定 - >現在のプロファイル - >キーボード - >編集に移動します。
- [追加] をクリックし、そのための新しいエントリを作成し、
Return+Shift
便利なキーシーケンスを提供します。 (\E[27;3
xevを使用するときにXから送信されたキーシーケンスであると思ったものを選択しましたが、これは間違っている可能性があります。適切なエスケープがあることを確認することが重要です。他のものと競合しません。) - 下部の小さなテストエリアで作業して、正しく機能していることを確認してください。
- コンソールを再起動します。
emacs -nw
ステージングバッファから開始して評価します。(read-key-sequence-vector "Type your new key:")
次に、新しいキーの組み合わせを入力します。
- これが初めての場合は、行を作成し、カーソルを行の末尾に置き、Cx Ceを押してemacsがその行を実行するようにしたら、引用符の中に入れた内容を知らせ、ユーザーが入力するのを待つ必要があります。何。
バインドできるキーシーケンスを出力する必要があります。 (コンソールキーバインディングを台無しにする前の退屈で、古い仕事の代わりに戻って
きました。)[27 91 50 55 59 51]
[13]
Emacs設定に追加します。
(define-key function-key-map [27 91 50 55 59 51] [(shift return)])
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)
答え3
ロスレスキーボード入力(グラフィックスなどの他の機能を含む)を許可するようにVTプロトコルを拡張しようとしています。
nottyは例です。https://github.com/withoutboats/notty
答え4
一言で言えば、これはすべての端末の基本的な制限です。
少し長い答えは、下痢の誰かがあなたが望むことを行う端末を作成したとしても、この仮想端末と連携するにはEmacs自体がかなりの変更を必要とすることです。