秀丸エディタの新しい操作体系

って言うほど大げさな話じゃないけど、タッチパネル + 小型キーボードでの使いやすさを考慮した操作体系の設計について。

  • 同じキーを繰り返し押すのは速い。離れたキーを順に押すのは遅い。アルペジオ打鍵とか無理だから。
  • マウスを使わない。ドラッグ&ドロップとか無理だし行選択とか超面倒。
  • キー数が少ない。無駄な割り当てをしてる余裕はない。

したがって次の方針を採る。

  • 同じキーの繰り返し押下に意味を持たせる。
  • キーボードによる範囲選択操作を手厚くサポートする。
  • 同じキーでも範囲選択時と無選択時で意味を変える。

もちろん秀丸エディタ v8.00 の新機能は遠慮なく活用する方向で。

結論

こんな感じでどうでしょう。(Ctrl+文字キー と Ctrl+Shift+文字キー だけ抜粋)

範囲モード切替

折しも秀丸エディタ v8 でマクロに静的変数が導入され、かなめくり的なローテーション動作をするマクロが素直に書けるようになった。そこで、手始めに Ctrl+[ A ] で範囲選択モードをローテーションするマクロを書いてみた。Ctrl+[ A ] を押すたびに選択範囲が「BOX 選択 → 全選択 → 文字列選択 → BOX 選択 → 全選択 → …」と変化する。BOX 選択と文字列選択では「選択開始」状態になっているので、カーソルキーで選択範囲を拡大縮小できる。

おおっ、これは普通のキーボードでも案外使いやすいですよ。全選択よりも BOX 選択が先になっているのは BOX 選択中にキーを押すとその文字を各行に挿入する機能をよく使うため。今まで BOX 選択開始は Ctrl+[ B ] に割り当ててたけど押しにくかった。このマクロを使えば Ctrl+[ A ] に統合できるので、押しやすくなるわキーが 1 個空くわで一石二鳥♪

演算子挿入

例えば言語ごとに違う文字列連結演算子「 + 」「 & 」「 . 」に今まで別々のキーを割り当てていたのを、ひとつのキーで循環させるようにした。フルキーボードでは Ctrl+右側の記号キー の多くがこの手の演算子に食われていたのだが、似たようなやつはひとつのキーに統合してわかりやすくなった。
ちなみにこのマクロは超個人用なのでとても公開できません(´A`)

範囲ドラッグ + カーソル移動

無選択時と範囲選択時でキーの挙動を精査した結果、範囲選択中は Ctrl+カーソルキー と Ctrl+Shift+カーソルキー が全く同じ挙動をすることがわかった (どちらも選択範囲を拡大縮小する)。そんなの Ctrl+Shift+カーソルキー だけあれば十分なので、範囲選択中の Ctrl+カーソルキー に別の意味を持たせることができる。そこで、マウスを代替するために選択範囲をドラッグするマクロを割り当てた。

Ctrl+[↑] に cmdDragUp を割り当てると Ctrl+Shift+[↑] も有効になる。Shift キーは範囲選択のために特別扱いされているようで、少々ハマった。Shift を含むキーコンビネーションでマクロが実行されると、実行前に無選択状態だったとしてもマクロ側では selecting == true になる。したがって実行前の範囲選択状態によって分岐するような処理は書けない。また、マクロ内で beginsel しなくてもカーソル移動だけで選択範囲が広がるし、そのくせ endsel しなくてもマクロ終了後に手でカーソルを動かすと範囲選択が解除される。endsel に関しても何か特殊な処理をしているようだ。まあ実装の話はともかく、使い勝手はなかなかいい感じになった。

ドラッグ&ドロップ

移動先を指定してドラッグ&ドロップするマクロも調子に乗って作ってみた。

しかし、カット&ペーストと何が違うのかと問われれば「クリップボードを汚しません」としか答えようがない。それにしたって BOX 選択時はカット&ペーストせざるをえないから*1結局クリップボード汚してるし。うーん、駄作だなこりゃ。

コマンド一覧

マクロ完全武装だじぇーぃ。うっかり時間のかかるマクロを走らせちゃうとほとんど何もできなくなる諸刃の剣ww

あっ、マクロ79とマクロ80のキーが表示されてない…。バグ発見?

*1:移動先を指定する前に移動元を消さないと、移動元と移動先が重なりあったときの挙動が非自明になる