.emacs
私のファイルに次のマクロを入力しました。
(global-set-key (kbd "M-<left>") 'windmove-left) ; move to left windnow
(global-set-key (kbd "M-<right>") 'windmove-right) ; move to right window
(global-set-key (kbd "M-<up>") 'windmove-up) ; move to upper window
(global-set-key (kbd "M-<down>") 'windmove-down) ; move to lower window
Altただし、+またはleft他のキーボードの組み合わせを押すと、以下のようにミニバッファにエラーが発生しますM-o 3 c is undefined
。
なぜ動作しないのですか?説明された構文に従ったと思いました。ここ(kbd
マクロ)。
答え1
端末はキー以外の文字について知っているので、その文字を持たないキーはエスケープシーケンスに変換してから戻す必要があります。Alt+を押すとLeft文字シーケンスに変換されます。ここでエスケープ文字は次のとおりです\eO3d
。\e
残念ながら、これらの文字シーケンスの一部は標準化されていないため、端末がEmacsに送信する内容を宣言する必要があります。
Ctrl+を押しQてからキーの組み合わせ(たとえば、Alt+ Left)を押して、バッファにキーシーケンスを入力します。Ctrl+ コマンドはQEmacs に先行するエスケープ文字を文字通り解釈するよう指示します。 2文字の代わりにEmacs Lisp文字列で書くのが最善のエスケープ文字を持つの^[O3d
と同じことがわかります。^[
^[
\e
各キーの組み合わせにエスケープシーケンスを追加します。input-decode-map
。たとえば(このコードはあなたのコードに入ります.emacs
):
(define-key input-decode-map "\eO3a" [M-up])
(define-key input-decode-map "\eO3b" [M-down])
(define-key input-decode-map "\eO3c" [M-right])
(define-key input-decode-map "\eO3d" [M-left])
(kbd "M-<up>")
または(kbd "<M-up>")
他の書き込み方法もあります[M-up]
。
これらの翻訳を宣言すると、Emacsは端末が^[O3d
キーの組み合わせAlt+を送信するときにLeftバインディングが機能することを知っています。