keyhac で簡単なマクロを作ってみる


keyhac を使ってキー配列をいじるスクリプトを紹介してきたが(その 1その 2)このソフトではキーボードやマウスを使ったマクロを書くこともできる。今回は簡単な例として、Putty + GNU Screen での例を書いてみる。

Putty + GNU Screen でウィンドウを簡単に切り替える

GNU Screen で複数のウィンドウを切り替える場合は“コントロールキャラクタを押した後に数字キー”という操作を行う。具体的には、

  1. Control + Z を押す1
  2. Control + Z を離す。
  3. 3 を押す。

これで 3 番のウィンドウに切り替わる。毎回 Control を離す動作が面倒なのだ。これを、単に Control + 3 だけで切り替わるようにしたい。

config.py(部分)

def configure( km ):
    km_putty = km.defineWindowKeymap( exe_name = u"PUTTY.EXE" )
    for i in xrange( 10 ):
        km_putty[ "C-" + str( i ) ] = km.command_InputKey( "C-Z", str( i ) )

2 行目では特定のプログラム(PUTTY.EXE)でのみ有効なキーマップ(km_putty)を得ている。そして 4 行目がキモ。command_InputKey メソッドは引数に並べたキーを順に押した場合と同じ効果を得るための関数を返す。

このスクリプトを使うと、Putty + GNU Screen な環境で Control + 09 を押すと、0 番~ 9 番のウィンドウに切り替わるだろう。

特定の文字列を入力するマクロ

command_InputKey と似たメソッドに command_Input**Text** がある。こちらはキーを連続して押すのではなく、文字列を実際に入力してくれる。

config.py(部分)

def configure( km ):
    km_notepad = km.defineWindowKeymap( exe_name = u"Notepad.exe" )
    km_notepad[ "C-A" ] = km.command_InputText( "aiueo" )

このスクリプトを有効にした上で、メモ帳を起動して Control + A を押してみると……
2010-06-14_091851.png

このように IME の未確定状態で止まってしまう2。この後、確定のために毎回 Enter を押さないといけない。ちょっと使いどころが難しいかなあ。


  1. 以下、コントロールキャラクタを ^Z とする。つまり .screenrcescape ^Z^Z としている 
  2. SS は ATOK2009 での場合だが、MS-IME の場合も同様のことが起こった。 

コメントを残す