.metaxの書き方

用語

  補完ウィンドウ/listwindow/completion-window
        meta-x, open で候補が複数あるときに一覧が出てくる画面
        
  metaxウィンドウ/minibuffer
        2ストローク以上のキーや、meta-x, open の時に出てくる細長い画面

機能分類
・キー変換
  key-sequence2, key, quoted-key
・マウス操作
  mousedown, mouseup, mouse-move, move-mouse-here, move-mouse-active-window, mouse-wheel
・ウィンドウ操作
  find-window, kill-window, switch-window, activate-window, raise-window, lower-window, bury-window,
  sink-window, maximize, move-window, resize-window
・ファイルを開く/外部コマンド実行
  execute, open, domain, hosts, use-explorer-for-directory, findfile-recent-max
・一時停止/終了
  exit, suspend
・.metax ファイル編集用
  insert-section, get-section, insert-virtual-keycode, get-virtual-keycode, get-application-filename,
  add-file-command, add-application-command
・クリップボード操作
  get-clipboard-filename, set-clipboard-data, shelter-clipboard, restore-clipboard, clipboard-shelter-max
・コマンド
  meta-x, defun, add-executables-to-commandlist
・モード
  change-mode, mode
・フック
  on-startup, on-resume, on-unlock
・変数
  setq
・minibuffer/listwindow
  minibuffer-width, minibuffer-left, minibuffer-top, listwindow-width, listwindow-height, listwindow-left,
  listwindow-top, minibuffer-echo-time
・その他
  reload, sleep, version, debug

[parent-class-or-exename1/child-class1 parent-class-or-exename2/child-class2 ...]
[^parent-class-or-exename1/child-class1 parent-class-or-exename2/child-class2 ...]
[except parent-class-or-exename1/child-class1 parent-class-or-exename2/child-class2 ...]


    親ウィンドウクラス名/子ウィンドウクラス名または
    exe名/子ウィンドウクラス名を
    指定したクラスのウィンドウにキーバインドを適用します。
    exe名を使用する場合は、パスを除いたファイル名のみを指定します。(.exeは付ける)
    exe名の大文字、小文字は区別しません。

    先頭に '^' または 'except ' をつけると「指定したもの以外」の意味
    '*' を指定するとすべてのクラスに適用されます。
    '*/*' と書くとすべてのウィンドウの意味になります。
    meta-x コマンド実行時のキーバインドはクラス名 'TfrmMetaX' で指定します。
    ただし、有効なのは左辺が1キーの変換のみです。
    クラス名がスペース等を含む場合は、' か " で囲みます。
    ' で囲んだ文字列の中で、' そのものを表すには '' と書きます。" の場合も同様です。

        ※ウィンドウクラス名は以下の方法で調べられます。
        まず、.metax に下記を追記して MetaX を再起動する。
        #-------------------------ここから
        [except Mule/Mule MEADOW/MEADOW XEmacs/* xyzzy.exe/* XEmacs/XEmacs */AwtGenericWindowClass */VTWin32 VNCviewer/VNCviewer]
        %x = (meta-x)
        defun get-section (get-section)
        defun get-application-filename (get-application-filename)
        #-------------------------ここまで
        ・該当のアプリケーションにフォーカスを当てて、M-x (Alt を押しながらx) を押す。
          minibuffer ウィンドウに表示されます。
        ・該当のアプリケーションにフォーカスを当てて、
          M-x get-section とタイプする。
          クラス名がクリップボードに入ります。
        ・netscape等クラス名が取得出来ないアプリケーションの場合
          exe名/* 等で指定して下さい。
          exe名は get-application-filename 等で確認して下さい。

    仮想子ウィンドウクラス '*MENU*' が使用出来ます。
    メニューがアクティブになっているとき、'*MENU*'であるとみなされます。
    仮想子ウィンドウクラス '*DIALOG*' が使用出来ます。
    ダイアログボックスが表示されているとき、'*DIALOG*'であるとみなされます。
    仮想子ウィンドウクラス '*IME*' が使用出来ます。
    IMEがオンのとき、子ウィンドウが '*IME*' であるとみなされます。
    '*MENU*', '*DIALOG*', '*IME*' はこの順で有効です。
    (IMEがオンでメニューがアクティブのときは'*MENU*')


key-sequence1 = key-sequence2
defkey key-sequence1 key-sequence2
key-sequence1 = (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ...
defkey key-sequence1 (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ...
key-sequence1 = (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ... (key key-sequence2)
defkey key-sequence1 (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ... (key key-sequence2)


    キーを変換、またはコマンドを実行します。
    キー変換とコマンドを混ぜて書くことも出来ますが、
    キー変換は最後に実行されます。
    同じキーを割当てると、先のものが優先されます。
    全体が長い場合は () で囲んで複数の行に書くことができます。
    同一のキーにコマンドが割当てがされている場合、上に書いてある
    定義が有効になります。

    key-sequence2

    キーを変換します。
    以下の文字は特殊な意味を持ちます。

    ^ CTRLを押しながら次のキーを押す。
    % ALTを押しながら次のキーを押す。
    + SHIFTを押しながら次のキーを押す。
    ~ WIN(スタートメニューの出るキー)を押しながら次のキーを押す。

    現バージョンでは Windows キーへの変換は出来ません。

    キーの変換で、特殊キーを表すには以下の方法があります。

    a. キー名称による指定
    
       以下の名称が使用できます。

    ALT BACKSLASH BACKSPACE BKSL BKSP BS CAPS CAPSLOCK CLEAR DEL DELETE
    DOWN DOWN END ENTER ESC ESCAPE EQ EQUAL F1 F10 F11 F12 F2 F3 F4 F5 F6
    F7 F8 F9 HENKAN HIRAGANA HOME INS INSERT KANJI LEFT MUHENKAN NUM
    NUMLOCK PAGEDOWN PAGEUP PGDN PGUP RET RETURN RIGHT SCROLL SCROLLLOCK
    SPACE SPC TAB UP

    b. 仮想キーコードによる指定

       {$Xnn}(16進) または {$nnn}(10進) で指定します。

    c. {}で囲む

       {=} {)} {~} の様に一文字を囲むとその文字そのものを意味します。

    ex.) ^y = ^v


    (command1 arg1.1 arg1.2 ...)

    コマンドを実行します。
    コマンドの引数がスペース等を含む場合は、' か " で囲みます。
    "" 内の%ENVNAME% はsetqで設定した変数、または環境変数で展開されます。
    % 自身を表すには %% と書いて下さい。

    mousedown right/middle/left マウスを押す
    mouseup right/middle/left {with double-click-interval n} {without double-click} マウスを離す
      mouseup は with double-click-interval 1.0 がデフォルト
      ex.) ^l = (mousdown right)(mousup right)
           ^m = (mousdown middle)(mousup middle)
           ^r = (mousdown left)(mousup left)

    mouse-move {by pixel/system} {absolutely/relatively} x y
      マウスを動かす(ピクセル単位、相対移動がデフォルト)
      by system と absolutely を指定すると、by system は無視されます。
      absolutely で負の値を指定すると、画面の右、下からの位置になります。
      ex.) ^%f = (mouse-move 5 0)
           ^%b = (mouse-move -5 0)
           ^%n = (mouse-move 0 5)
           ^%p = (mouse-move 0 -5)

    move-mouse-here {into bounds/icon/label/selectbounds}
      選択されたアイテムにマウスポインタを移動します。(into icon がデフォルト)
      TreeView, ListView のみに有効です。(Explorer 等)
      ex.) [*/SysListView32]
           ^r = (move-mouse-here)(mouse-down right)(key '+{F10}')

    move-mouse-active-window
      アクティブなウィンドウにマウスを移動します。
      ex.) defun move-mouse-active-window (move-mouse-active-window)

    mouse-wheel 120/-120 (win98 or NT4.0 only?)
      マウスを上または下にスクロールします。
      120以外の数字を指定しても動きがぎこちなくなるだけのようです。
      また、Word, IE だと CTRLキーとの組合せはうまくいかないようです。
      ex.) ^%n = (mouse-wheel -120)
           ^%p = (mouse-wheel 120)

    find-window class/caption name1 name2 ...
      指定したウィンドウをアクティブにする。class と caption の併用も可。
      何も指定しないか 'class .' だとアクティブなウィンドウと同じクラスのウィンドウ
      ex.) [CabinetWClass/* IEFrame/*]
           defkey ^o (find-window class 'CabinetWClass' 'IEFrame')

    kill-window class/caption name1 name2 ...
      指定したウィンドウを閉じる。class と caption の併用も可。
      何も指定しないとアクティブなウィンドウを閉じる。
      ex.) defun close-internet-explorer (kill-window class 'CabinetWClass' 'IEFrame')

    switch-window {by name/key}
      ウィンドウを切換えます。(by name がデフォルト)
      ex.) ^xb = (switch-window)
           ^x^b = (switch-window by key)

    execute commandname-and-args コマンドを実行する。
    open file-or-shortcut-name ファイルを開く。
      引数なしだとファイル名を聞いてきます。(キーに割当てないと動きません)
      ワイルドカード使用可。(*.txt, *net* 等)
      http:,https:,ftp:,news:,file:,mailto:,! で始まるときはファイル存在チェックをしません。
      !のときは先頭の!を取除いてOSに渡します。
        SPC,TAB ファイル名を補完
        RETURN  ファイルを開く
        UP,DOWN 補完リストが出ているときに選択する
        CTRL-LEFT, CTRL-RIGHT ディレクトリ単位で移動
        CTRL-UP, CTRL-DOWN 最近開いたファイルを選択
          findfile-recent-max で表示する数を設定出来ます。
      開いたファイルは「最近開いたファイル」に追加されます。
      ex.) ^x^f = (open)
           defun google (open 'http://www.google.com/')
           defun excel (execute 'C:\Program Files\Microsoft Office\Office\EXCEL.EXE')

    activate-window マウスポインタがあるウィンドウをアクティブにする
    raise-window マウスポインタがあるウィンドウをアクティブにし、前面に持ってくる
    lower-window マウスポインタがあるウィンドウを最背面に移動する
    bury-window アクティブなウィンドウを最背面に移動する
    sink-window アクティブなウィンドウを「一枚下」に移動する
    maximize vertically/horizotally on/off/toggle
      アクティブなウィンドウを最大化する
      (タスクバーのダブルクリックとは違って画面のサイズから計算した大きさにする)
    move-window x y {width height} アクティブなウィンドウを移動させる。
      同時に大きさを変更することも出来る(相対指定のみ)
    resize-window {absolutely/relatively} width height
      アクティブなウィンドウの大きさを変更する(absolutely がデフォルト)
      ex.) %^a = (activate-window)
           %^r = (raise-window)
           %^l = (lower-window)
           %^b = (bury-window)
           %^s = (sink-window)
           defun max (maximize horizontally on) (maximize vertically on)

    or
      前のコマンドが失敗なら次のコマンドを実行。 ちゃんと動かないままほったらかしになっています。(^^;

    reload {with/without message} 設定ファイルの再読込み(with message がデフォルト)
    exit {with/without confirmation} MetaX を終了する。(without confirmation がデフォルト)
    suspend {with/without confirmation} MetaX を一時停止する。(without confirmation がデフォルト)
      ex.) ^x^r = (reload)
           ^x^c = (exit)
           defun suspend-metax (suspend)
      
    sleep time 指定した秒数だけ待つ
      ex.) (defun routin-input (execute 'c:\perl\bin\perl c:\scripts\set-clipboard.pl')
                               (sleep 1)
                               (send-keys-from-clipboard)
                               (mouse-move absolutely -720 -200))

    insert-section 設定ファイルにセクションを追加する
    get-section セクションをクリップボードにテキストとして書込む
    insert-virtual-keycode 仮想キーコードを設定ファイルに書込む
    get-virtual-keycode 仮想キーコードをクリップボードにテキストとして書込む
    get-application-filename 現在アクティブなウィンドウのexe名をクリップボードに入れます。
      ex.) ^xi = (insert-section)
           defun get-section (get-section)
           defun insert-virtual-keycode (insert-virtual-keycode)
           defun get-virtual-keycode (get-virtual-keycode)
           defun get-application-filename (get-application-filename)

    add-file-command {into inifile/clipboard}
      (1)エクスプローラやブラウザ等でコピーしたファイル名やURLをもとに、
         そのファイルを開くコマンドを設定ファイルに追加します。
      (2)(Win9x, 2k)エクスプローラ等でコピーしたファイルを開くコマンドを
         設定ファイルに追加します。
      ex.) defun add-file-command (add-file-command)
    add-application-command {into inifile/clipboard}
      現在アクティブなウィンドウを起動するコマンドを設定ファイルに追加します。
      ex.) defun add-application-command (add-application-command)

    get-clipboard-filename
      (Win9x, 2k) クリップボードにあるファイルをファイル名に変換する。
      ex.) ^u^c = (get-clipboard-filename)
           上記の様にセットしてエクスプローラで ^c^u^c とするとファイル名が取得出来ます。

    set-clipboard-data {text} クリップボードにデータを設定する。とりあえずテキストのみ。
    shelter-clipboard クリップボードの中身を退避する。
    restore-clipboard key {by name/key} クリップボードの中身を復元する。(by name がデフォルト)
      ex.) defun set-clipboard-data (set-clipboard-data "MetaX")
           ^c = (shelter-clipboard) (key '^c')
           %y = (restore-clipboard '^v')

    quoted-key 次のキーをそのまま送る
      ex.) ^q = (quoted-key)
    key key-seqence2 キーを送る
      ex.) ^c = (shelter-clipboard) (key '^c')

    meta-x defun 文で設定したコマンドを実行する
      SPC,TAB コマンドを補完
      RETURN  コマンドを実行
      UP,DOWN 補完リストが出ているときに選択する
      ex.) %x = (meta-x)

    change-mode mode-name {on/off/toggle/replace} 指定したモードを有効にする。
      replace は、モードをオンにした上で他のすべてのモードを無効にします。
      デフォルトは toggle です。
      ex.) (mode shift
             (^n = +{DOWN})
             (^p = +{UP})
             (^f = +{RIGHT})
             (^b = +{LEFT})
             (^a = +{HOME})
             (^e = +{END})
             (^v = +{PGDN})
             (%v = +{PGUP})
             (^%v = +{PGUP})
             (^xh = ^+{HOME})
             (^xt = ^+{END})
             (%f = ^+{RIGHT})
             (%b = ^+{LEFT})
             (^g = (change-mode shift off))
             (^c = (shelter-clipboard) (key '^c') (change-mode shift off))
             (^w = (key '^x') (change-mode shift off))
             (^{SPC} = (change-mode shift off))
            )
           (^{SPC} = (change-mode shift on))

    version バージョンを表示します。


(mode mode-name command-list)
    コマンド群を指定したモードで有効になるように指定します。
    キーコマンド以外も書けますが、中に書くことの意味はありません。
    mode に囲まれていないコマンドは mode 'defatult' として扱われます。
    mode の中に書くコマンド群はそれぞれ括弧で囲まれている必要があります。
    二つのモードで同一のキーにコマンドが割当ててあり、その両方が有効に
    なっている場合、上に書いてある定義が有効になります。
    ex.) → change-mode 参照

defun command-name key-sequence
defun command-name (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ...
    コマンドを定義します。meta-x コマンドとの組合せで使います。
    defun 文にはセクションは関係ありません。
    キーシークエンス、コマンドの書き方は defkey と同じです。
    ex.) defun get-section (get-section)

on startup key-sequence
on startup (command1 arg1.1 arg1.2 ...)(command2 arg2.1 arg2.2 ...) ...
    metax の起動時に処理を行ないます。
    ex.) on startup (execute '"C:\Program Files\Internet Explorer\IEXPLORE.EXE" ')

setq var-name value

      変数を設定します。後述の特殊変数以外は、"" 内で展開するために使います。
      ex.) (setq all-program 'C:\Documents and Settings\All Users\スタート メニュー\プログラム')
           defun teraterm (open "%all-program%\Tera Term Pro\Tera Term Pro")

      特殊編集は以下の通りです。

      minibuffer-width
      minibuffer-left
      minibuffer-top
      listwindow-width
      listwindow-height
      listwindow-left
      listwindow-top
      これらの変数は minibuffer, listwindow の位置を指定します。
      minibuffer-left, minibuffer-top, listwindow-left, listwindow-top は
      % による指定が可能です。負の値を指定すると画面の右、下からの位置になります。
      ex.) (setq minibuffer-top -150)
           (setq minibuffer-width 450)
           (setq minibuffer-left 30%)
           (setq listwindow-top -400)
           (setq listwindow-height 250)
           (setq listwindow-width 450)
           (setq listwindow-left 30%)
      
      minibuffer-echo-time
      2ストローク以上のキーバインドの途中までをタイプしたときに、
      meta-x ウィンドウが現れるまでの秒数です。
      デフォルトは1.0です。
      ex.) (setq minibuffer-echo-time 0)

      add-executables-to-commandlist
      PATHの通っている実行ファイルをコマンドに追加します。(exe,com,bat)
      defun で同名のコマンドが追加されている場合は追加しません。
      1で有効、0で無効。デフォルトは1です。
      PATHの代りに検索するパスを指定することも出来ます。
      'C:\winnt;C:\winnt\system32' 等と指定します。
      'C:\Some\folder\*.ttl' 等と指定すると exe,com,bat 以外のファイルも開けます。
      ex.) (setq add-executables-to-commandlist 'C:\windows\system32;C:\ttpmacro\*.ttl')

      domain ドメインまたはワークグループを指定します。
      hosts ホストをスペース区切りで指定します。
      これらの変数は UNCパスの補完に使用します。
      ex.) (setq domain 'WorkGroup')
           (setq hosts 'server1 server2')

      use-explorer-for-directory
      フォルダを open するとき、explorer を使用します。
      ex.) (setq use-explorer-for-directory 1)

      debug
      1 に設定するとMetaX.log という名前のファイルに
      ログを出力します。
      ex.) (setq debug 1)

      findfile-recent-max
      「最近開いたファイル」で表示する数を設定します。
      デフォルトは 20。
      0 の場合は制限なし。
      ex.) (setq findfile-recent-max 10)

      on-resume サスペンドからの復帰時に起動するコマンドを指定します。
      on-unlock コンピュータのロックを解除したときに起動するコマンドを指定します。
      ex.) (setq on-resume 'c:\on-resume.bat')
           (setq on-resume 'c:\on-unlock.bat')

      clipboard-shelter-max
      ex.) shelter-clipboard で保持するクリップボードの数。デフォルトは20。
           (set clipboard-shelter-max 10)