このページは窓使いの憂鬱の1ユーザーが作っている非公式な一ファンページです。
マニュアルの中で分かりにくかった所、その他を思いつくままに。
.デフォルトでは、暗黙に ~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側を全部書き換えたいなど、大量に指定したい場合に役に立ちます。
Default.mayu 126-127行目でCapsLockをCtrlにしています
mod control += 英数 # 英数を Control に
key *英数 = *LControl # 〃
ここまではこのページの「 vii. モディファイヤになっているキーを置き換える 」とおなじですね。
CapsLockがなくなったので、左ControlをCapsLockにしてみましょう。
mod control -= LControl # 左ControlからControl機能を奪う
key *LControl = *英数 # LControlを英数に
"-=" は "+="と反対の働きです。
CapsLockなんか滅多に使わないからLControlキーは他のことに使いたい、と思いませんか? 私は思いました。
マニュアル 「7.-iii.モディファイヤキー割り当ての変更 」には「モディファイヤキー名には、shift, alt (meta, menu),
control (ctrl), windows (win), mod0〜mod9 が記述できます。
」とあります。
mod ctrl += 英数
key *英数 = *LControl
mod mod0 = LCtrl
key m0-s = &LoadSetting # 設定ファイルの読み込み
上の2行で英数キーがCtrlになり、LCtrlキーにCtrl機能は無くても良くなったので3行目で新しく<mod0>というモディファイヤ機能を与えることにしました。
4行目の「&LoadSetting」とは何でしょう。「&〜」というのは窓使いの憂鬱であらかじめ用意されている機能で「ファンクション」と呼ばれます。
マニュアル「7.-ix. FUNCTION リファレンス」を見てください。
&LoadSetting(設定名)
設定ファイルを再読み込みします。設定名は「設定(I)...」で設定した「名前」で、再読み込みする設定を指定します。設定名を省略すると現在の設定を再読み込みします。
上の例では設定名を省略していますから現在の設定を再読込することになります。設定ファイルをいじっているときは何度も再読込することになりますが、いちいちトレイのアイコンを右クリックしてメニューから、というのは面倒ですのでキー一発で出来る様にしました。( Default.mayuでは67行目で c-s-S に&LoadSettingがふってあります。)
ファンクションは大文字小文字を区別します。「&Loadsetting」ではエラーになるので要注意です。
再読込してエラーが出れば、少なくとも再読込自体は成功したことが分かるのですが、エラーが出ないときは本当に再読込されたのか不安になりませんか? 私はなりましたので4行目を次のようにします。
key m0-s = &LoadSetting &HelpMessage(Mayu, 再読込完了) # 設定ファイルの読み込み
一つのキー操作で複数の働きをさせたい場合、半角スペースを入れて列記していけばOKです。m0-s で &LoadSettingされ、同時に&HelpMessageも行われます。
&HelpMessage(title, message)
IE5.0 が入っていれば、タスクトレイ付近にメッセージを表示します。title と message を省略すると、表示されているメッセージを消します。
これで、再読込された場合には「再読込完了」というバルーンメッセージ出ます。
Default.mayuではC-S-Sに割り当てられています。

SandS( Space and Shift )というのはSpaceキーにShift機能を持たせ、なおかつSpaceの機能も残すことを指すようです。窓使いの憂鬱には「ワンショットモディファイヤ」が有るので簡単に実現できます。
mod shift += !!Space
一行です。あっけないですね。 Space押しっぱなしの時はリピートさせたい場合は、「!!!Space」になります。
私は調子に乗って「 mod ctrl += 無変換 」にもしていますが、これは「無andC」とでも呼べばいいのでしょうか。
前ページの「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-:」を「Asterisk」と呼びたいなど、モディファイヤもセットで定義したい時はキーシーケンスです。
keyseq $Asterisk = S-Colon
key a = $Asterisk
aを押すだけで「*」が入力されます。 109.mayuの後半部分、「キーシーケンス」の項を見てください。すでに記号類は一通り設定されています。
keyseq $MyName = s-y a m a d a space s-t a r o u
key Home = $MyName
キーシーケンスでは一連の動作を設定することも出来ます。 ファンクションや別のキーシーケンスを入れることも出来ます。
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 #ここから標準keymap
key c-x = &Prefix(test)
まずはkeymap Globalなところから実行されるので、とりあえず上から3行は無視されます。
5行目は、c-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)
: の後ろで親キーマップの指定と同時にデフォルトキーを指定することも出来ます。この場合、aが押されればもちろんbが送られます。それ以外のキーが押された場合はすべてzが送られます。デフォルトキーにはキー以外にもファンクションやキーシーケンスを置くことも出来ます。
keymap test : Global = &WindowMaximize
key a = b
keymap Global
key c-x =&Prefix(test)
チュートリアルの "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なら、常に"iexplorer.exe"なので、/iexplore\.exe/ となります。periodの前の\を忘れないようにしてください。
04/04/24 更新