header

2015年5月3日日曜日

xterm 上の Emacs で C-;とかの本来使えないキーバインドを使えるようにする拡張を書いた

2015/12/20 urxvt にも対応しました

たぶん Emacs をターミナルで使う人が少数派の中さらに xterm 上の emacs を使う人用の拡張を書いた。この拡張を使うと Xterm 上の(ターミナル上の) Emacs で本来使えない C-;, C-.キーや C-M、C-S のプレフィックスキーを利用するできるようになる。

仕組み

Xterm の設定で特定のキーバインド(キーシーケンス?)が押された時に、任意のキーシーケンスを出力できるので Emacs 側で受け取ったキーシーケンスを C-M-a とかのキーバインドとして使っています。どのキーシーケンスがあいているかは ECMA-48 というのを参考にした。リンク先の 26 ページに CSI キーのなかで private 用に #x3c, #x3d, #x3e, #x3f が開いているようなので#x3f(=文字)を利用するようにした。

実際後ろの方がから試そうとしたら#x3f(?文字は)すでに xterm が使っているようでうまく行かなかった。この ECMA-48 自体なかなか古い資料(1998)なので、ひょっとしてなんかまずいことしてるんじゃないか若干不安がある。。。(お詳しい方いたらコメントいただけたらうれしいです。)

インストール方法

MELPA からインストールできます。el-get でインストールしたい人は以下のコードをでインストールできるようになるはず(試してない)

(add-to-list 'el-get-sources
 '(:name xterm-keybinder
       :type github
       :pkgname "yuutayamada/xterm-keybinder-el"))

設定 & 使い方

.emacs とかに下の設定を追加してください。

(require ’ cl-lib)
(add-hook
 'tty-setup-hook
 '(lambda ()
    (cl-case (assoc-default 'terminal-initted (terminal-parameters))
      (terminal-init-xterm
       (xterm-keybinder-setup)))))

xterm と emacs を起動するときに-xrm オプションで設定を読み込みます。

#!/bin/sh
# xtermopt に xterm-option へのパスを設定してください。
xtermopt=path/to/this-repository/xterm-option
eval "xterm -xrm `${xtermopt}` -e emacsclient -t -a ''"

起動した Emacs で適当にキーバインドを試してみてください。

debug(自分用のメモ)

下のコードを C-x C-e で評価したあと調べたいキーを押すと Emacs 側でどう受け取られるか調べられる。

(key-description (read-key-sequence-vector ""))

おわりに

GUI 版の Emacs とほぼ同じキーバインドが使えてまぁまぁ便利なので、よかったら使ってください。

0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news