info
kitetu.net
2008/3/26 水曜日 (1:20:35)、宇田川 浩行 による、Emacs への投稿。
「Emacs キー配置孝」前回の記事の続きです。キー同士の組み合わせや階層的な整理法を活用し、効率的なキー配置とはどのようなものなのか、ということを探っていきます。
キーの組み合わせの活用
改善案では n キーは next (次)、p キーは previous (前) としています。n の上にある j キーは前進、 p の下にある l キーは後退というように n, p と似ていて、より細かい操作にあてています。編集モードでのカーソル移動では、C-n で次の行へ、C-p で前の行へ、まではデフォルトと同じですが、次の文字に進むのは C-j で、前の文字へ戻るのは C-lで、といった動作をします。
さらに d キーには directory という英単語をあて、コンピュータ上の慣習として一般に「階層」を表すものとしておきます。また、f キー は find (探す) として、検索やそれに類似した置き換え機能を意味するものとしておきます。ちなみに C-f キーはデフォルトでは次の文字 (forward-char) にあてられていました。
改善案ではこれらを組み合わせて、下記のような動作をさせています。
一つ一つが単純な意味であれば、組み合わせることで柔軟に状況へ対応することが出来ます。Emacs デフォルトのようにキーへの意味付けの仕方が特殊だと、各キーの「潰しが効かず」このように自由な組み合わせで意味を表現しにくいのです。無駄に機能の配置が分散してしまうことで、キーの浪費ともいえる状況も生まれています。たとえば、デフォルトでは文字列の前方検索は C-s (search: 検索) で、後方検索は C-r (reverse: 逆) ですが、使用頻度とキーの入力効率が釣り合っているかも疑問ですし、あまり脈絡もなく理解しやすい配置ではありません。
次に述べるように、C-f の流れに検索機能をまとめておくことの利点はこの問題を解消できるだけのことに留まりません。
機能の階層的な整理
人間が使う言葉では一般に、言葉数を多くすればその意味は狭く、少なくすればその意味は広くなるものです。キー操作においても、より特殊な操作はより多くの打鍵で行ない、より一般的な操作はより少ない打鍵で行なえるように配置すると、たくさんのキーを効率的に活用できます。
先程の、検索機能を配置した C-f キーのコマンド類を例にとります。f には find (探す) という意味をあてるので、文字列検索だけでなく、それに類似する機能として文字列置き換えの機能もここに含めてしまいます。これらの機能にはいくつか種類の違いがあり、階層的に整理する方法があると上手く収められます。改善案では以下のようにしています。
通常の文字列検索・置き換えではより簡単なキー操作を使い、正規表現 (regexp) で検索・置き換えをしたい場合は、C-r キーを一回付けたしています。その際に、分岐点となる r で Ctrl キーや Alt キーを離しています。Ctrl や Alt キーには最終的にコマンドを決定する役割を与え、機能に選択肢がある場合はそれを離すことで更に特殊な機能を選択できるようにしているわけです。
文字列の置き換え時に、確認するか、確認せずに全て置き換えてしまうか、のような安全度の切り換えは、Alt キーで行うようにしています。
前置キーの規則
Emacs では、C-c や C-x のキーは、前置キー (prefix key) と呼ばれています。その後に連続的にキーを入力することで、比較的複雑な機能を実行するようになっています。C-x は予め機能が定められていてユーザの変更は非推奨です。C-c はユーザやモードが定義して使ってよいものとされています。
ただし、この定義は曖昧で、実態に則していませんし、ここでは C-c, C-x の意味を新しく定義してしまいます。
Alt キーの使用に関して、例えば C-c C-b C-a のようなコマンドの変則化のために M-c M-b M-a のような使い方はしません。必ず C-c C-b M-a のように、キー操作の最後でのみ使います。これは、M-c のように始めるよりは、普通のキー操作の最後だけを変えるほうが、機能の分岐という役割が明確になると考えているからです。M-c として始めると、そこで新しいキー領域が増えてしまっているかのようで、一元性が損なわれる気がします。
適用例1: 移動関係
以上の方針・方法論等を踏まえて、実際の適用例を見ていきます。まずは、カーソルの移動や画面の描画に関わる部分です。
適用例2: バッファ・ディレクトリ関係
次は C-c と C-x の前置詞をどのように使い分けているか、という例です。
バッファをファイルから開いたり、ファイルへ保存するコマンド:
バッファを切り換えたり、バッファの一覧を表示するコマンド:
ディレクトリを開くコマンド:
その他コマンド:
Emacs を終了するコマンドは、間違わないよう最後にスペースキーを押すようにしています。
おまけ
このようにキーを整理してみると、たくさん機能を定義しても、いままで空けられなかった所に余裕が出来、ちょっとした追加機能をいれられるようになります。例えばメールやメモなど頻繁に利用する機能を簡単に立ちあげたり、よく使うディレクトリやファイルなどに一発でアクセスするコマンドなどです。以下は筆者の使用例です。
前述のとおり C-x C-d には指定ディレクトリを開く (dired) を割りあててもいいのですが、これは C-x C-v (find-file) で問題なく代用できるので、少しもったいないかもしれません。筆者は C-x C-d には各ディレクトリへのショートカットを設定しています。
ちなみに、あるディレクトリにアクセスするだけのコマンドは、以下のようにして簡単に作れます。
(defun my-command-for-access-to-home () "ホームディレクトリを開くだけ。" (interactive) (dired "~/"))
こういう部分は好みによるかもしれませんが便利です。
おわりに
今回は、意外と考慮しなくてはならないことが多かったせいで大分時間がかかった上、ブログの記事らしからぬ長文・乱文になってしまいました。行く行くは一連の記事の内容をもう少し体裁の整った文書に纏めるつもりです。
ここで紹介したキー配置の例は、実際の改善案のごく一部ですし、まだ視野が狭い部分があり、これを Emacs の全般に渡って適用していくという作業にはまだ困難がたくさんあります。しかしその目標に向けての叩き台を作るためにも、不十分ながら模索の過程を公開してみました。
また、Emacs のキー配置を考察する、という趣旨の文章としては既に blankspace さんの こちらのページなどがあり、参考にさせて頂きました。
次回の第6回では、このような方針や作業のもと制作している、操作性改善モード “Kt-Ushi” と、取扱説明書を完全な形で公開する予定です。
2008/03/25 長すぎたので、記事を二分割しました。
2008/03/24 一部キー入力例が間違っていた箇所と、表現が分かりにくかった箇所を修正
この記事に寄せられたご意見は、現在 0件です。(RSS 2.0)
この記事へのトラックバック URI :
http://www.kitetu.net/old/notes/0014.html/trackback