Top Page > Mule Windowsキーバインド化計画


Mule Windowsキーバインド化計画


○事の始まり

何となく秀丸のマクロ機能では物足りない気がして(実用上はほとんど問題無いんですが(笑))、Mule for Windows(Emacs)を入れてみました。しかし僕はMuleの拡張機能の高さに興味が有るだけで、Muleのキーバインドは苦手です。慣れればいい、と言うかも知れませんが、僕はWindowsユーザなので、テキストエディタ以外でも至る所でCtrl+Cでコピーし、Ctrl+Vで貼り付けているのです。エディタだけ全然違うキーバインドでは使いやすい訳がありません。という訳で「MuleのキーバインドをWindows化するぞ計画」開始です。

○まずはネットで探してみる

とりあえずネットで軽く「Windows化パッチ」を探してみました。が、見つかりません(探し方が悪いかも?)。まあ「WindowsのエディタのキーバインドをEmacs風にする」人は多くても、その逆はあまりいないのかも(笑)。

○じゃあ作りますか

まあ、Muleの拡張機能のお手並み拝見も兼ねて、自分でキーバインド変更に挑戦してみるとしましょう。幸い、この前授業でSchemeをやったのでEmacs Lisp(Muleのマクロの言語)も何とかなるに違いないです。

という訳で、マニュアルを睨み、その手のメルマガの過去ログを睨み、設定を書き込み、エラーを出されてはまたマニュアルを睨むという事を延々と繰り返した結果、以下の機能が実装できました。

  1. Ctrl+X、Ctrl+C、Ctrl+Vで切り取り、コピー、貼り付け。
  2. Ctrl+Sで上書き保存、Ctrl+Zで元に戻す。
  3. Home、Endで行頭、行末へ。
  4. Ctrl+Fで検索(中身はMuleのインクリメンタルサーチ)。
  5. Delは選択範囲があればそれを削除、無ければ1文字削除。
  6. Shift+方向で範囲選択。

1、2、3、4はほとんどキー割り当ての変更だけです。とはいえ、Mule自体にもEmacs Lispにも慣れていないので試行錯誤でしたが。真っ先にCtrl+Xを変更したら色々な操作ができなくなったり(笑)。5は条件分岐が入るのでコマンドを書きます。コマンドと関数の関係が謎でしたが、マニュアルで解決。設定を書くのもMuleなので、だんだん「いつもの操作」で書けるようになってくるのは楽しいですね。しかし、圧倒的に大変だったのは6です。MuleとWindowsの範囲選択の方法がだいぶ違うせいです。

Windowsで言う「選択開始位置」をMuleでは「マーク」と言います。MuleではCtrl+Spaceでマークを設定できます。つまり、Windows式にするには、「マークが無い状態でShift+方向を押したらそこにマークを指定してから移動」、「普通に方向キーを押したらマークを消す」とすればいいはずです。が、この「マーク」が複数存在したり、なんかの拍子(Ctrl+Gとか)に選択範囲のグレー表示が消えて(Activeでなくなる、と言うらしい)、しかもそれをコード上で検出できなかったり、色々と良く分かりません。マークが複数あるので、「範囲選択解除」のためにマークを消すと、前のマークが有効になって変な範囲が選択されるのです。かと言ってマークを無理やり全部消したら、他の操作に支障が出そうだし。

色々と調べると、「マークがActiveかどうか」を表す変数が見つかり、どうにかなりそうな感じ。「範囲選択解除」は「選択範囲を非表示にする」事で表し、「選択されているか」を表す変数を使ったりして何とか実現。

残る主な課題は「選択状態で文字を入力した時に、選択された文字列が消える」ようにする事。Muleのデフォルトでは消えないのです。これは全ての文字の入力を監視しなきゃいけないので難しいですが、まあ文字を入力する前にDelを押せばいいだけなので妥協する手も…。

○一息ついたところで

ええ、とにかく何かと言うと、疲れました(笑)。キーバインド以外にも「Cの構文を色付きで表示する」とか、実際に使うとすると変えたい設定は色々有ります。今回ほど変な設定でなければ資料も多いでしょうけど、設定を変えるたびに「Webで調べまわって、設定を書いて、エラーになって、」となると思うと面倒になってきました(笑)。というか、この作業の後で秀丸を立ち上げたら何やら安堵感を覚えました(笑)。やっぱりWindowsアプリたるもの、基本的な設定はマニュアルなんか見なくても日本語のGUIのダイアログでちょちょっと設定できて、検索を選べば検索ダイアログで「大・小文字を区別する」とか選べて、「名前を付けて保存する」を選べばいつもの保存ダイアログが出るぐらいは欲しいところです。

と言うわけでやっぱり秀丸かなぁ…(笑)。今回の設定は大学でEmacs使う時には使えるだろうし。

最近はバイトでLinux使ってるので、そこで重宝してたりします。(2004/5/10 追記)


そんな次第ですが、一応今回できた設定を置いておきます。何か配布用の形式が有るみたいですけど、面倒なので~/.emacsファイルをそのまま置きます。

Windowsキーバインド設定の~/.emacs  (最終更新 2004/5/10)

その後も微妙に改良されて、現在は

  1. Ctrl+X、Ctrl+C、Ctrl+Vで切り取り、コピー、貼り付け。
  2. Ctrl+Sで上書き保存(ついでにWindows標準じゃないけど、Ctrl+Wで名前を付けて保存)。
  3. Ctrl+Oで開く。Ctrl+Nで新規バッファ。Ctrl+Zで元に戻す。
  4. Home、Endで行頭、行末へ。
  5. Ctrl+Fで検索(中身はMuleのインクリメンタルサーチ)。検索中にF3、Shift+F3で前後に検索。
  6. Ctrl+Rで置換。
  7. Delは選択範囲があればそれを削除、無ければ1文字削除。
  8. Shift+方向で範囲選択。
  9. Alt+F4で終了。
  10. 文末で↓を押しても新しい行を作らない。
  11. Emacsで"C-c"と打つ所では代わりに"M-o C-c"と打つ。*1
  12. Emacsで"C-x"と打つ所では代わりに"M-o C-x" or "M-z"と打つ。

…という機能が有ります。

*1 "M-o C-c"は動作してないっぽいです。


Gimite 市川 <gimite@mx12.freecom.ne.jp>


Mule Windowsキーバインド化計画 < Top Page