2段階キーマップをスクリプトで記述

初稿作成:2013/5/24(金)(Yahoo!ブログ)

最終更新:2019/9/9(月)

 

2段階キーマップは、窓使いの憂鬱 なら &prefix() 関数を使うと楽です。

それ以外のスクリプト言語で書くソフトの場合は
適当な変数をパラメータ代わりにして条件分岐させれば簡単ですね。

 

たとえば


(入力)→(出力)
a → a
b → b
aa → b
ba → bc

 

としようと思ったら


窓使いの憂鬱では

 

keymap aa : Global
key A = BS B

 

keymap ba : Global
key A = C


keymap Global
key A = A &Prefix( aa )
key B = B &Prefix( ba )

 

と、こんな感じですが

 

たとえば AutoHotKey なら

 

a::
if (para = "a") ; 2段階目。a の次
{
Send, {BS}
Send, b
para =
; 空文字列を代入
}
else if (para = "b") ; 2段階目。b の次
{
Send, c
para =
}
else ; 1段階目
{
Send, a
para:="a"
}
return

 

b::{
Send, b
para:="b"
}
return


こんなふうにすればいいんじゃないかと思います。


ただしこの方法だと
上には記述していませんが
2段階キーマップに関係しないすべてのキーについても
いちいちパラメータ変数をリセットするようにしておかないといけません。
でないといろいろと不具合が起きることになります。
その点がめんどうと言えばちょっとめんどうですが
正規表現なんかが利用できれば記述自体はそれなりに短くできるかもしれません。


ちなみに基本的な発想は


WindowsEmacsキーバインド - Usipedia


というサイトのリンク先にあるAutoHotKeyスクリプトと同じものでしたね。
そちらのほうがはるかに洗練されていて参考になると思います。