2016-08-03 7 views
1

では動作しません。私は私のの.emacsファイルに次のキーバインドを設定しました。しかし、私が端末(emacs -nw)で実行すると、キーバインディングはロードされません。 .emacsファイルを読み込んだ後も、私はまだキーバインディングを持っていません。Emacsのキーバインドは、端末

私はemacsデーモンを使用し、ターミナルのクライアント対で開くときと同じ話です。私はLinuxマシンを使っています。

答えて

3

問題はemacsではありません。問題は、修飾キー(Control、Shift、Alt)の組み合わせがほとんどの端末プログラムで非常にうまく動作しないことです。同様の質問は、スーパーユーザーを含む多くの場所でここにポップアップし続けます(例:emacs - [control shift up] doesn't workhttps://superuser.com/q/230852)。特定の端末でテストする必要がありますが、例えばGnome端末ではC-S-C-と区別できないので、ほとんどのバインディングはemacsに正しく設定されていません。

あなた自身がC-h kを入力してください。ターミナルで実行すると、これらの組み合わせにいくつかの修飾子が削除されていることがわかります。

私は同様の経験を経て、ターミナルとの戦いは努力する価値がないという結論に達しました。あなたが端末にいるときに、複数の修飾子を必要とするキーの組み合わせを別のものに再マップすることをお勧めします。 (たとえば、Fキーにwindmoveコマンドを再マッピングしてしまった。)あるいは、evil leaderキー(悪い場合)、あるいはGod modeキーを使用することをお勧めします。これにより、複数の修飾子の必要性が大幅に軽減されます。

0

ステップ1は、後でemacsに意味を割り当てることができるエスケープコードを端末に送信することです。 .Xdefaultsファイルを編集して、必要な数だけ追加します。

*VT100*translations: #override \n\ 
    ~Ctrl ~Shift <KeyPress> BackSpace: string(0x7F)\n\ 
    Ctrl ~Shift <KeyPress> BackSpace: string("\033[27;5;8~")\n\ 
    Ctrl Shift <KeyPress> BackSpace: string("\033[27;6;8~")\n 

    Ctrl Shift ~Meta <KeyPress> A: string("\033[27;6;65~")\n\ 
    ... 
    Ctrl Shift ~Meta <KeyPress> Z: string("\033[27;6;90~")\n\ 

    Ctrl Shift Meta <KeyPress> A: string("\033[27;8;65~")\n\ 
    ... 
    Ctrl Shift Meta <KeyPress> Z: string("\033[27;8;90~")\n\ 

XTerm*vt100.modifyOtherKeys: 1 
XTerm*vt100.formatOtherKeys: 0 

キーシーケンスは何もすることができます(と私は文書化されていないキーシーケンスをたくさん見てきました。ここでは例として使用してxtermが(私はカットアンドペースト仕事のPCからすることができないように誤字可能)です)、「標準」に最も近いものはhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlです。

ステップ2は、Emacsはそれが理解するキー配列と、これらの新しいエスケープシーケンスを割り当てるために取得することです:1で~前の最後の番号をインクリメント、...

; xterm-specific options 
(unless window-system 
    (define-key key-translation-map "\C-[[27;6;65~" (kbd "C-S-a")) 
    ... 
    (define-key key-translation-map "\C-[[27;6;90~" (kbd "C-S-z")) 

    (define-key key-translation-map "\C-[[27;8;65~" (kbd "C-M-S-a")) 
    ... 
    (define-key key-translation-map "\C-[[27;8;90~" (kbd "C-M-S-z")) 

    ; other xterm-specific options here 
) 

、そう= 65 A、B = 66、...、Z = 90である。

+0

何かがそうです。しかし、それはxtermのためだけに機能し、OPはおそらく "端末"が別のプログラムだと考えます。 –

+0

@ThomasDickeyあなたの答えに言及しておきますが、多くの端末エミュレータはxtermの動作をある程度までコピーしますが、それらはしばしば独自の目的のためにキーの組み合わせを取り込みます。 OPが端末の限界を理解していない可能性があり、他の端末(xtermなど)を使って端末がより適切かどうかを確認したい場合があります。 – Teajay

+0

それは私が(コメントをするよりも)答えた理由です。 –

1

xtermこれを行うことができます。他の端末はできません。

あなたはファンクションキーを使用するために目標を変更した場合の構成を変更せずに、xtermは修飾の様々な組み合わせのための明確なエスケープシーケンスを送信するため、あなたは、さらに取得することができますシフト制御ALT機能キーとカーソルキーに適用すると、メタとなります。

"Terminal"と思われるのは、gnome-terminalなどのVTEベースの端末エミュレータの1つです。これは、xtermの動作のこの部分のかなりの部分をコピーします。したがって、ファンクションキーの設定を試して、意味を決めてそれらの設定を使用することができます。

VTEの動作は文書化されていません。しかし、XTerm Control Sequencesのオリジナルを読むことができます。

関連する問題