そういうときはそのバッファー内にカーソルを置いた状態で delete-other-windows という関数を呼び出せばよい.
カーソルがある編集中のバッファーがフラーム全体に表示される.
delete-other-windows 関数は "
C-x 1
" にバインドされている.体調の回復に伴い Emacs を長時間使うようになってきたらこの関数を頻繁に呼び出すことに気がついた.
C-x 1
は C-x
の入力と 1
の入力という 2 回の操作を必要とする.指が疲れるので押しやすい
C-'
にも delete-other-windows を割り当てることにした.このキーバインディングを $HOME/.emacs.d/init.el 内に書くのだが,
(define-key global-map "C-'" 'delete-other-windows)
と書くと "
error: Invalid modifier in string
" というエラーメッセージが表示されてキーバインディングに失敗する.検索してみたら Qiita の knakagawa-c5 さん の投稿 EmacsでASCII以外の文字を含むキーバインドを定義する というところに対処方法が書いてあった. 助かった.
つまり非 ASCII 文字 (今回の場合
'
) を含んだキーバインドを行うための記述を正しく行う必要がある.Emacs 25.1 のマニュアルに次のような記述 (†) がある.
キーシーケンスがファンクションキー, マウスボタンイベントあるいは C-= (Control =) や H-a (Hyper a) などの非 ASCII 文字を含むとき, そのキーシーケンスを指定するためにはベクターを使用する.
ここで書かれているベクター (vector) というのはキーシーケンスをブラケット('
[
' と ' ]
'で囲んだ記法である. 非 ASCII 文字はブラケット内で ' ?
' に続けて書くことにより指定する. したがって今回キーバインドを行いたい C-'
はベクター記法により, [?C-\']
と記述される.結局, $HOME/.emacs.d/init.el 内に
(define-key global-map [?\C-\'] 'delete-other-windows)
のように追加してとりあえず目的の動作を得た.
実際に Emacs を使っていく上で, こういったキーバインディングに関する問題の奥は深い.
たとえば
C-'
に delete-other-windows 関数を割り当てる件について上記のように対処したとしても完全ではない.あるモードが
C-'
をそのモードのある機能に割り当てて上書きされてしまう可能性もある.†: この記述は ``GNU Emacs Manual 17th Edition, Updated for Emacs Version 25.1.'' の 33.3.6 Rebinding Keys in Your Init File にある.
When the key sequence includes function keys or mouse button events, or non-ASCII
characters such as C-= or H-a, you can use a vector to specify the key sequence.
33.4.5 Non-ASCII Characters in Init Files には次のような記述もある.
To bind non-ASCII keys, you must use a vector (see Section 33.3.6 [Init Rebinding],
page 449). The string syntax cannot be used, since the non-ASCII characters will be interpreted
as meta keys. For instance:
(global-set-key [?char] 'some-function)
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image
- no image