index <前>

その他

マニュアルの中で分かりにくかった所、その他を思いつくままに。

モディファイヤの注意点

.デフォルトでは、暗黙に ~C-~M-~S-*NL-*CL-*SL-*IL-~IC- が指定されていることになっていますが、変更できます。<7.-i.>

つまづきやすいのが、「 *IL-~IC- 」です。「 IL 」はIMEがonかoffか、「 IC 」は変換中かどうか、です。例えば「 - 」と「 ; 」を入れ換えたいとしましょう。ローマ字で長音記号を押しやすくするためです。

key Hyphen = Semicolon
key Semicolon = Hyphen

さて、では早速IMEをonにして「 ; 」を押してみます。ばっちり「 ー 」が出ました。ではこのまま確定せずに続けて押してみましょう・・・・きっと「 ー;;;;; 」となると思います。

もうお分かりでしょうが暗黙の設定で「 *IL-~IC- 」となっているために、1打鍵目はこの条件に当てはまる(IMEはonでもoffでもいい。ただし変換中ではない)ので期待通りキーが入れ替わったのです が、2打鍵目は「 IL-IC- 」(IMEがonで、かつ変換中)であるために条件に当てはまらなくなったのです。 正しくは

key IL-*IC-Hyphen = Semicolon
key IL-*IC-Semicolon = Hyphen

あるいは

key IL-*IC- =      #1
key Hyphen = Semicolon
key Semicolon = Hyphen

「変更できます。」とマニュアルにありますが、変更した場合がこれ(#1)です。一度指定すると再指定するまでずっと有効です。 Shift側を全部書き換えたいなど、大量に指定したい場合に役に立ちます。

CtrlとCapslockを入れ換える

Default.mayu 126-127行目でCapsLock(英数)をControlにしています

mod control += 英数      # 英数を Control に
key *英数    = *LControl # 〃

ここまでは「 vii. モディファイヤになっているキーを置き換える 」とおなじですね。

CapsLockがなくなったので、左ControlをCapsLockにしてみましょう。

mod control  -= LControl # 左ControlからControl機能を奪う
key *LControl = *英数    # 左Controlを英数に

"-=" は "+="と反対の働きです。

任意のモディファイヤ と ファンクション

CapsLockなんか滅多に使わないから左Controlキーは他のことに使いたい、と思いませんか? 私は思いました。

マニュアル 「7.-iii.モディファイヤキー割り当ての変更 」には「モディファイヤキー名には、shift, alt (meta, menu), control (ctrl), windows (win), mod0〜mod9 が記述できます。」 とあります。

mod ctrl += 英数
key *英数 = *LControl

mod Mod0 = LControl
key M0-s = &LoadSetting # 設定ファイルの読み込み

上の2行で英数キーがCtrlになりました。左CtrlキーにCtrl機能は無くても良くなったので、3行目で新しく< mod0>というモディファイヤ機能を与えることにしました。

4行目の「&LoadSetting」とは何でしょう。「&〜」というのは窓使いの憂鬱であらかじめ 用意されている機能で「ファンクション」と呼ばれます。

マニュアル「7.-ix. FUNCTION リファレンス」を見てください。

&LoadSetting(設定名)
設定ファイルを再読み込みします。設定名は「設定(I)...」で設定した「名前」で、再読み込みする設定を指定します。設定名を省略すると現在の設定を 再読み込みします。

上の例では設定名を省略していますから現在の設定を再読込することになります。設定ファイルをいじっているときは何度も再読込すること になりますが、いちいちトレイのアイコンを右クリックしてメニューから、というのは面倒ですのでキー一発で出来る様にしました。( Default.mayuでは67行目で C-S-s に&LoadSettingがふってあります。)

ファンクションは大文字小文字を区別します。「& amp;Loadsetting」ではエラーになるので要注意です。

&HelpMessage

再読込してエラーが出れば、少なくとも再読込自体はできたことが分かるのですが、エラーが出ないときは本当に再読込されたのか不安にな りませんか? 私はなりましたので4行目を次のようにします。

key M0-s = &LoadSetting &HelpMessage(Mayu, 再読込完了) # 設定ファイルの読み込み

一つのキー操作で複数の働きをさせたい場合、半角スペースを入れて列記していけばOKです。M0-s で &LoadSettingされ、同時に&HelpMessageも行われます。

&HelpMessage(title, message)
IE5.0 が入っていれば、タスクトレイ付近にメッセージを表示します。title と message を省略すると、表示されているメッセージを消します。

これで、再読込された場合には「再読込完了」というバルーンメッセージが出ます。

Default.mayuではC-S-sに割り当てられています。

Mayu,再読込完了

ワンショットモディファイア(SandS)

SandS( Space and Shift )というのはSpaceキーにShift機能を持たせ、なおかつSpaceの機能も残すことを指します。窓使いの憂鬱には「ワンショットモディファイヤ」 があるので簡単に実現できます。

mod shift += !!Space

一行です。あっけないですね。 Space押しっぱなし時にキーリピートさせたい場合は、「!!!Space」になります。

普通のモディファイヤ(シフトキーなど)は、押したあと「やっぱやめよう」と思ってそのまま離せば何も起きませんが、ワンショットモ ディファイヤの場合はキーが(この場合はスペースが)入力されてしまいます。これを防ぐために次のようにしてみましょう。

mod shift += !!Space
key R-*Space = &Ignore

こうすることで、すぐにスペースを離せばスペースが入力され、しばらく押してから離すと何もしません(キャンセル)。


Spaceをワンショットモディファイアのシフト兼務(SandS)にしてるときに、Ctrl+SpaceをEnterにしたいとします。

mod shift += !!Space
key C-Space = Enter

ところがこれではうまく動きません。ワンショットモディファイアがかかっているので、窓使いの憂鬱にとってCtrl+Spaceが "C-S-Space" になっているためです。作動させるためには

key C-S-Space = Enter

key C-*Space = *Enter

となります。

Alias (別名定義)

前ページの「iii. 普通のキーを入れ替えてみる」で、「(たとえキーの名前を変更したくても)109.mayuには手をつけない方がいい」と書きました。これは、もし窓使い の憂鬱がバージョンアップしたときに109.mayuを上書きすると、せっかく書いた自分の.mayuが使えなくなってしまうからです。あるいは誰かと窓 使いの憂鬱の話をしているときにキー名が違うせいで話が合わなかったり、人に自分が書いたすばらしい.mayuをプレゼントしても他の人は使えなかったり するからです(109.mayuもセットであげればいいですが)。

それでも「私はEscapeを「エスケープ」と呼んであげたい!」という場合、"Alias"を使います。

def Alias エスケープ = Escape  # Escape に エスケープ という別名をつける
def Alias ホーム     = Home    # Home に ホーム という別名をつける

key ホーム = a

これでおもうさま「エスケープ」「ホーム」と記述することが出来るようになりました。Homeを押すと「 a 」が入力されます。

別名ですので本名もそのまま残っています。大文字小文字は区別されません。

キーシーケンス

エイリアス(別名定義)はキーしか扱えませんが、「S-Home」を「Sホーム」と書きたい、あるいは「S-Colon」を 「Asterisk」と呼びたいなど、モディファイヤもセットで定義したい時はキーシーケンスです。

keyseq $Asterisk = S-Colon

key a = $Asterisk

aを押すだけで「*(S-Colon)」が入力されます。 109.mayuの後半部分、「キーシーケンス」の項を見てください。すでに記号類は一通り設定されています。$Asteriskも定義済みでした。

keyseq $MyName = S-y a m a d a space S-t a r o u

key Home = $MyName # Homeキーを押すと「Yamada Tarou」と入力される

キーシーケンスでは一連の動作を設定することも出来ます。 ファンクションや別のキーシーケンスを入れることも出来ます。

2段階キーマップ

Keymapと&Prefixを使って2段階キーマップを設定してみましょう。プリフィックスというのは、最初の動作 では何もせず、次に押すキーによっていろいろな動作をさせることです。例として、まずCtrl-xでプリフィックス状態に持って行き、次にCが押されたら "abc"、CではなくVが押されたら"xyz"、という動作をさせてみましょう。

keymap test : Global     # ここから"test"という名前のkeymap
key c = a b c
key v = x y z

keymap Global          # ここから標準(Global)keymap
key C-x = &Prefix(test)

まずはkeymap Globalなところから実行されるので、とりあえず上から3行は無視されます(読み込まれてはいます)。

最後の行は、「Controlを押しながら x が押されたら test というキーマップに飛べ」と言う意味です。飛び先のキーマップ(この場合は"test"という名前のキーマップ)は &Prefix よりも先に書いておかなければなりません。そうしないと「飛び先のキーマップが見つかりません」と言うエラーが出ます。

C-xが押されると、キーマップ "test" に飛び、次の操作を待ちかまえています。ここで "c" が押されれば(2行目) "abc"が出力され、キーマップはGlobalに戻ります。

1行目の後半、" : Global " はどういう意味でしょうか。":" の後ろは親キーマップを示します。親キーマップというのは、そのキーマップで定義されていないキーが押された場合に使われるキーマップです。この場合は c,v以外のキーが押された場合、Globalキーマップ(つまり標準のキーマップ)に従え、と言う意味です。

keymap test # 親キーマップの指定をしない
key c = a b c
key v = x y z

keymap Global
key C-x = &Prefix(test)

親キーマップが指定されていないとき、そのキーマップで定義されていないキーが押された場合は&Default扱いに なります。&Defaultは窓使いの憂鬱が起動していないときと同じ動作です。よく分からなければとにかく: Globalとつけておけば多分うまく動くでしょう。

keymap test : Global = z
key a = b

keymap Global
key C-x = &Prefix(test)

: の後ろで親キーマップの指定と同時にデフォルトキーを指定することも出来ます。この場合、"c-x" の後に "a" が押されればbが送られます。それ以外のキーが押された場合はすべてzが送られます。デフォルトキーにはキー以外にもファンクションやキーシーケンスを置 くことも出来ます。いろいろと試してみてください。

keymap test : Global = &WindowMaximize
key a = b

keymap Global
key C-x =&Prefix(test)

window

チュートリアルの "iv. 特定のウインドウのみでキー割り当てを変更してみる" のサンプルはこうなっています。

window InternetExplorer /iexplore\.exe/ : Global
key PageUp = Home
key PageDown = End

チュートリアルでは "\" ではなくBackSlashになっていると思いますが、これはフォントの関係でBackSlashに見えるだけで、エディタで編集する場合は "\" でOKです。"\"は正規表現で「エスケープシーケンス」と呼ばれ、"\"の直後の文字から特別な機能・意味を取り除いて、普通の文字として扱う記号で す。"Period"は正規表現で特別な意味を持ちますが、 "\"を前に置くことで "Period" を普通の文字として扱っています。

1行目の冒頭、"window"は、「ここからは特定のウインドウのみに適用されるキーマップです」という宣言です。 "window" 以下でその「特定のウインドウ」の条件を指定します。

"window" の次の、 "InternetExplorer" が、このキーマップの名前です。ここは自分で分かりやすいように好きな名前を付けて構いません。

次の /iexplore\.exe/ が、このキーマップを適用する具体的な条件です。チュートリアルの通り調査をすると以下のような表示が出るはずです。(と、チュートリアルに書いてありま す)

CLASS: C:\Program Files\Internet Explorer\iexplore.exe:IEFrame
TITLE: C:\Program Files\Internet Explorer\iexplore.exe:窓使いの憂鬱 - README - Microsoft Internet Explorer
Toplevel Window Position/Size: (-4, -4) / (1032x748)
Desktop Window Position/Size: (0, 0) / (1024x740)

チュートリアルでは "この CLASS の部分から特徴的な文字列を抽出し、正規表現と呼ばれる記法で /文字列/ のように書けば OK です。" となっています。大抵はそのアプリケーション全体でキーバインドの変更をするので、そのアプリケーションに共通の部分を抜き出して正規表現で記述します。

InternetExplorerなら、/iexplore\.exe/ となります。"period" の前の "\" を忘れないようにしてください。

index <前>

06/11/27 更新