ファン
検索
<< 2024年12月 >>
1
2 3 4 5 6 7
8
9 10 11 12 13 14
22
23 24 25 26 27 28
29
30 31
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事 (59)
社会復帰 (22)
(44)
コンピューター (211)
(1460)
借金 (8)
勉強 (13)
(13)
数学 (97)
運動 (8)
日常生活 (1407)
(204)
健康 (38)
読書 (21)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村

2017年08月07日

Emacs: Control-' に delete-other-windows 関数を割り当てる

Emacs であるバッファーを編集しているとき, そのバッファーだけをフレームに表示させたいことは多い.
そういうときはそのバッファー内にカーソルを置いた状態で 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)
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/6567546

この記事へのトラックバック
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: