ShiftとAltカーソルの組み合わせを正しく許可するようにemacsをどのように設定しますか?

ShiftとAltカーソルの組み合わせを正しく許可するようにemacsをどのように設定しますか?

emacsターミナルでorg-modeを使用し、Shiftカーソルと一緒に、などのAlt文字を入力します。私は気づき、端末にもこの動作が表示されました。2A2B3Avim

この動作を変更できる端末設定はありますか、それともemacsとvim自体の設定ですか?

Gilesのアドバイスに関するフォローアップ:

端末エミュレータはKDEコンソール。提供されたいくつかのアドバイスのためにメニューに行き、 と の とオプションをSettings->Configure Shortcuts無効にしました。Shift+LeftShift+RightPrevious TabNext Tab

Emacs

Shift+Left -> ^[2D

Shift+Right -> ^[2D

Alt+Left -> ^[3D

Alt+Right -> ^[3C

ウィム

Shift+Left -> ^[[1;2D

Shift+Right -> ^[[1;2C

Alt+Left -> ^[[1;3D

Alt+Right -> ^[[1;3C

答え1

この質問に対するGilesのコメントと、より多くのWeb検索に関するアドバイスに従い、このリンクを見つけました。https://github.com/bendikro/emacs-conf/blob/master/emacs-conf/key-bounds.el一部のセクションでは、キーを適切に定義します。

;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; Fix for screen / tmux
;; some snipped code

;; Fix ALT + arrow keys inside screen/tmux
(define-key input-decode-map "\e[1;3A" [M-up])
(define-key input-decode-map "\e[1;3B" [M-down])
(define-key input-decode-map "\e[1;3C" [M-right])
(define-key input-decode-map "\e[1;3D" [M-left])

私もコピーして修正しましたが、Shift今はうまくいくようです。

答え2

端末と統合されたアプリケーション自体の設定です。

Xtermは、拡張キーイベントをパラメータ付き制御シーケンスに送信するDEC VT動作をエミュレートします。多くの素朴なプログラムは、キーボード制御シーケンスがパラメータを持たない単純な制御シーケンスであると誤って予想しているため、正しくデコードできません。それらのいくつかはあまりにも素朴で、真ん中と最後の文字を正しく見つけることができません。制御シーケンスの一部だけをデコードし、残りは通常の入力として扱い、現在見ているような奇妙な状況を引き起こします。

vimはこれらのキーボードシーケンスを正しくデコードすることができ、それを確認する方法についてはxterm-modifier-keysオンラインヘルプセクションを参照してください。

vimのようにtermcap変数を設定する必要はありませんが、nvimの場合も同様です。

違いは、このようなアプリです返品端末にいると思うように依頼アプリケーションカーソルキーモードそしてアプリケーションキーボードモード。通常、端末は次の場所にあります。ノーマルカーソルキーモードそして通常のキーボードモード。これらのアプリケーションは、端末に制御シーケンスを印刷し、端末に一定期間モードを切り替えるよう指示する。

答え3

端末記述(TERM設定が「xterm」であると仮定)は、必要な情報を提供します(たとえば、前の説明を参照)。xterm+pcfkeys入り口)。

xterm1999年から(そして数年後に始まった模倣者konsoleとgnome-terminal - 参照xterm FAQ)は、Shift、Control、Alt、およびMeta修飾子を使用して拡張機能キーセットを提供します。

Shift、Control、またはAltが設定されているかどうかを示すパラメータをファンクションキーに追加します。このコードは、PCキーボード付きのDEC VT510の説明に基づいています。

xtermがDEC VTを「模倣した」かどうかはもちろん、議論の余地があります。当時は自由に使用できるマニュアルがなかったので、「説明」は電子メールで数行のテキストで書かれていました。いくつかの変更が予想されます。

初期動作が変更されました2002年、xtermが使用する修飾子を示す2番目の引数として数字を送信します(「1」の後に、emacsは反復回数として解釈できます)。

konsoleを参照するvimとemacsの後続の例は非常に興味深いものです。

  • 両方用語キャップつまり、(詳細は用語情報10年以上説明されましたが、これらのプログラムのどれも実際にはそうではありません。使用端末の説明のため名前これらの関数を参照するファイルはtermcapファイルにありません(見つからない可能性があります)。
  • どちらのプログラムにもvimのドキュメントなど、いくつかの回避策があります。xterm-シフト-キーxterm修飾キーxtermコード。 Emacsの場合、ドキュメントはそれほど簡潔ではありません(キーマップに関するディスカッションはい)しかし、ソースコードを読むことは役に立ちます。lisp/term/xterm.el
  • 興味深いことに、emacsのエコーはvimのエコーとは異なり、電子は古くて役に立たない動作に似ています。旧式の日だけでなく、 konsole と gnome ターミナルの開発者もこれをコピーして、10 年以上にわたって xterm の変更を追跡していませんでした(その結果、多数のバグレポートが作成されました)。 emacsソリューションはこれらの結果かもしれません。

関連情報