2014年5月5日月曜日

nストロークキー入力でフォルダジャンプ

挨拶


つかさです。
今日は、nストロークキー入力によるフォルダジャンプです。

準備


nストロークキー入力というのは、Emacsやxyzzyである操作方法。

メモ帳などの通常のエディタは、

  • C-x 切り取り

というように、ひとつのキーにはひとつの操作しか割り振ることができない。
だが、xyzzyのように2ストロークキー入力ができるエディタだと、

  • C-x s 複数バッファを上書き保存
  • C-x C-c エディタを終了する
  • C-x 0 カレントウィンドウを削除

というように、C-xを押したあとに続けて何を押すかによって複数の操作を割り振ることができる。

1ストロークキー入力だと、アルファベット×修飾キーの組み合わせの中からさらに、ホームポジションからの押しやすさ、覚えやすさ等で絞られ、使えるキーボードショートカットはそれほど多くはない。それに比較して格段に、扱えるキーボードショートカットが増えるわけです。(ちなみにC-x sとは「Ctrl+Xを押したあと、Sキーを押す」の意味です。)

PPxではこのnストロークキー入力をすることができる。

TORO's Libraryに行き、Paper Plane xUI  Key Moduleをダウンロード。



その中にあるPPXKEY.DLL(64bitならPPXKEY64.DLL)をPPxフォルダに入れる。これで、nストロークキー入力に必要な*setnextkeyを使えるようになります。

nストロークキー入力のやり方


2ストロークキー入力


  • C-x aでaaaaと表示
  • C-x bでbbbbと表示

したければ次のようにする。

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_user1
}

K_user1 = {
a , echo aaaa
b , echo bbbb
}


K_user1が、2ストローク目のキーマップに対応しています。
そしてこのキーマップを、1ストローク目に割り当てたいキーであるCtrl+Xに、*setnextkeyで登録しています。

3ストロークキー入力


  • C-x aでaaaaと表示
  • C-x bでbbbbと表示
  • C-x c aでhomuと表示
  • C-x c bでhomuhomuと表示

したい場合には次のようにする。

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_user1
}

K_user1 = {
a , echo aaaa
b , echo bbbb
c , *setnextkey K_user2 ; 3ストロークキー入力
}

K_user2 = {
a , echo homu
b , echo homuhomu
}

K_user2という3ストローク目のキーマップを用意。
そして、2ストローク目のキーマップにこのキーマップを登録しています。

これと同じ要領でキーマップを増やしていけば、4ストロークキー入力、5ストロークキー入力、というのも可能になります。

フォルダジャンプ


で、ここからが本題です。僕が思ったのは、これをフォルダ移動に利用できないか、ということ。

僕がよく行くフォルダというのは、非常に限定されている。

  • bin
  • work
  • download
  • Music
  • howm2

くらいしかないわけです。他のフォルダを使う頻度と較べて、これらのフォルダに移動する場合が圧倒的に多い。そして、これらのフォルダ間を一日で何度も往復している。

このフォルダ移動に、今まではfenrirを使ってた。だが、選択肢が片手分しかないのに、登録した数十、数百のフォルダからインクリメンタルサーチで絞り込んで移動、という手順は無駄過ぎてあまり好きではなかった。

同じフォルダ移動でも、一日に何度も移動するフォルダへの移動と、何週、あるいは何ヶ月かに一度程度しか移動しないフォルダへの移動との2つがある。後者であれば、fenrirやEverythingを使えばいいのだけれども、前者でも同じ方法をとるのは効率が悪い。
他にも履歴だとかブックマークだとかを使う方法もあり、追求したこともあったがどれもイマイチだった。

だが、nストロークキー入力を使えばこの問題は解決できる。nストロークキー入力で実行するコマンドに、各々のフォルダへのジャンプを割り振ればいい。1ストロークキー入力であれば、数に限りのあるキーを複数個使って、それぞれに個々のフォルダ移動を割り振るというのはバカバカしくて考える気もしないが、これなら実質、一つのキーを潰すだけで済む。

やり方


以下を編集して取り込み

-|K_fjump1 =
-|K_fjump2 =

KC_main = { ; PPcメイン窓
^X ,*setnextkey K_fjump1
}

K_fjump1 = { ** comment **
A , *setnextkey K_fjump2 ; 3ストロークキー入力
B ,%j"D:\bin"
D ,%j"D:\download"
^D ,%K"C_DIR" ; 下層移動
H ,%j"G:\howm2"
M ,%j"D:\data\Music"
^S ,%K"@BS" ; 親ディレクトリ
W ,%j"D:\Work"
^X , *cursor 8,1,13,0,13,0 ; ドライブ変更
}

K_fjump2 = { ** comment **
B ,%0\PPCW.EXE "D:\bin"
D ,%0\PPCW.EXE "D:\download"
H ,%0\PPCW.EXE "G:\howm2"
M ,%0\PPCW.EXE "D:\data\Music"
W ,%0\PPCW.EXE "D:\Work"
}

これで、

  • C-x b binフォルダへ
  • C-x d downloadフォルダへ
  • C-x h howm2フォルダへ
  • C-x m Musicフォルダへ
  • C-x w Workフォルダへ
  • C-x C-d 下層移動
  • C-x C-s 親ディレクトリへ
  • C-x C-x ドライブ変更
  • C-x a b 窓をもう一枚開き、binフォルダへ
  • C-x a d 窓をもう一枚開き、downloadフォルダへ
  • C-x a h 窓をもう一枚開き、howm2フォルダへ
  • C-x a m 窓をもう一枚開き、Musicフォルダへ
  • C-x a w 窓をもう一枚開き、Workフォルダへ

となる。

思いつくこととか


ルートフォルダへ移動だとか、履歴を戻るだとか、スクリプトを利用して「同じ階層の次のフォルダへ移動」だとかも組み込めるかもしれない。

ランチャにも使えそう


基本的に、日常的に使うコマンドであればnストロークキー入力が使えそう。そうでないとnストロークキー入力にいくら登録しても忘れちゃうからですね。

この条件を満たすものとして、他に思いついたのはランチャ。ブラウザのように、一日になんども使うソフトの起動に便利かもしれない。

-|K_launcher =

KC_main = { ; PPcメイン窓
^Z ,*setnextkey K_launcher
}

K_launcher = { ** comment **
C ,%Ob "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
F ,%Ob "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
X ,%Ob D:\bin\xyzzy\xyzzy.exe
}

これで

  • C-z c    Chromeを起動
  • C-z f    FireFoxを起動
  • C-z x    xyzzyを起動

することができます。

0 件のコメント:

コメントを投稿