Subscribed unsubscribe Subscribe Subscribe

ターミナル上のEmacsで本来使えない"Ctrlキー+何か"を使う方法

ターミナルエミュレータに"Ctrlキー+何か"で送信できる範囲 - すぎゃーんメモ の記事の続き。コメントにてid:masutaka26さんに教えていただきました。こんな方法があるそうで。
工夫と趣向と分別と。ターミナルのEmacsでも特殊キーコンボ - 工夫と趣向と分別と。
全然知りませんでした。Emacsにはデフォルトで以下のように修飾キーを押しながらキーを押したとみなすような関数が定義されているそうで

C-x @ S         event-apply-shift-modifier
C-x @ a         event-apply-alt-modifier
C-x @ c         event-apply-control-modifier
C-x @ h         event-apply-hyper-modifier
C-x @ m         event-apply-meta-modifier
C-x @ s         event-apply-super-modifier

C-x @ c ;と押せばを押したのと同じ効果が得られるようです。
iTerm2の場合、設定から以下のようにすることで"C-;"のときにC-x @ c ;というキー操作を送ることができる。

ので、こう設定しておくと、iTerm2上で動くEmacsにもを押すだけでその操作を送ることができる。

ちゃんとEmacsで受け取れてますね。上記記事によるとその他のキーストロークも方法次第でどうにか送ることができるようで。


ただ、この設定は"iTerm2での"設定なので、Emacsを起動していない状態のシェルなどでもを押した際にC-x @ c ;が送られることになってしまう。意図しない動作にならないよう気をつける必要があるし、またこういったシーケンスの送信を設定できないターミナルエミュレータを使った場合に無力になってしまう。ターミナルエミュレータソフトに依存することになってしまうので、結局ターミナル上でEmacsを使うことを考えるならば"C-;"のようなキーバインドは避けておいた方が無難だと思いました。