iTermでCommandキーをMetaキーの意味にするパッチ

タイトルの通りですが、MacOS用のターミナルソフトであるiTermについて、Emacs使い向けのパッチを作りました。私の手元で3週間ほど動いていますので公開します。iTerm 0.9.5に対するパッチですが、CVS上の最新版に対しても適用可能だと思います。

以前の記事「シェルの操作にAltキーを使おう」でも紹介しましたが、私はシェルの操作をするのにEmacs風にMeta(Windows環境なら通常はAlt)キーが使えた方が入力効率が良くなると考えています。特にEmacs使いならエディタでもシェルでも同じキー操作ができますから、慣れるメリットは大きいはずです。

ところで、私は最近メイン環境をMacに移行しました。Macに移行してみての最大の不満は、ターミナルソフトでCommandキーをMetaキーの意味で使えない点です。私はTerminal.AppとiTermの2つしか試していないのですが、少なくともこの2つではCommandキーをMetaキーにすることはできないようです。OptionキーをMetaキーにすることはできるのですが、Optionキーはキー配置的に押しにくく、慣れるのは無理だと感じました。

Carbon EmacsではCommandキーをMetaキーにしていることもあり、何とかターミナルソフトでもCommandキーをMetaキーにしたいと考えていたところ、ドイツのDiedrichさんが同じ意図の(本人によればquickかつdirty hackな)iTermのパッチを作っているのを見つけました。これを更に私なりに改造したパッチを公開します。
iterm-cmdkey-as-meta-patch-20071030.txt」です。機能は下記の通りです。

  • Commandキーと同時に何かのキーが押されると、「ESC」「押されたキー」の2ストロークが入力されたようにキー入力を置き換えます。(オリジナルのパッチの機能)
  • ただし、以下の組み合わせに限ってはキー入力を加工せず、そのままiTermに渡します。
    • Command+Space(IMEの切り替え)
    • Command+v(ペースト)
    • Command+t(タブ追加)
    • Command+→(次のタブへ移動)
    • Command+←(前のタブへ移動)

元のパッチを作った方はストイックに全てのショートカットをあきらめていますが、私はCommand+Spaceが使えないのは不便すぎると考えたので、何個かのショートカットを生かすようなパッチを作りました。EmacsでのMeta+vは多用するキーなので、Command+vをどちらに渡すべきか少し悩んだのですが、これをコマンドライン上で使うことは無いだろうことと、Command+vが効かないとペーストするのにiTermのメニューから操作することになって非常に不便なので、そのままiTermに渡すことにしました。

言うまでもないと思いますが、これはMacっぽいショートカットを何個か無効にしてしまいます。例えば、このパッチを当てたiTermにはCommand+wもCommand+qも効かず、ESC wおよびESC qがシェルに渡ります。私がまだMacに慣れていないせいか、この2つのショートカットを私は使わないので何とも思わないのですが、Command+qが効かないと不便でたまらない人もいると思います。このあたりは調整のしどころでしょう。

インストール手順

下記の通り、簡単にビルドできます。Xcodeのインストールなどは既に済んでいる前提です。iTermのソースコードはCVS経由で取得する以外に方法が無いと思うのですが、他にもっと正当な方法があるのかもしれません。ビルドについてもREADMEなど見当たらなかったので確証はありませんが、私の手元で動作していることですし大きくは外れていないかと思います。

$ cvs -z3 -d:pserver:anonymous@iterm.cvs.sourceforge.net:/cvsroot/iterm co -r RC_0_9_5 iTerm
$ cd iTerm
$ patch -p1 < ~/iterm-cmdkey-as-meta-patch-20071030.txt
$ make Deployment
$ open build/Deployment/

開いたFinderの窓で「iTerm」を「アプリケーション」にコピーすれば、Emacs使いに優しいiTermが手に入ります。

インストール直後にiTermを最新版にアップデートするかどうか聞かれると思いますが、拒否してください。念のため。

コメント / トラックバック 1 件

#1 Mac de Terminal - 蜉蝣 〜 一瞬の輝き 2009/05/30 23:03

[...] Terminalはクローズドコードであるが、iTermという代替Terminalではパッチを当てることでCommandをMetaとして利用できる。が、ここの報告にもあるように3キー同時入力ができない。また、Command+Spaceが使えない。どちらにせよバージョンアップに耐えられないので、悪くは無いが、よくもないといった解決方法。 [...]

コメントする