Customize mouse-processor setting file

Menu

Introduction

このドキュメントでは mouse-processor の設定ファイルの内容 (書式、パラメータ等) について説明します。
付属の設定ファイル default.mprc で一通りの機能を利用できますが、 設定ファイルをカスタマイズすることで、より自分好みの動作をするよう設定を変更することができます。

Setting file

設定ファイルはコマンドライン引数、または所定の場所から検索されます。

ホームディレクトリとは以下のいずれかです。上から順に検索されます。

指定したファイル名に "%" (パーセント記号) でくくられた部分があると、それはくくられた文字列に対応する環境変数に置換されます。

File format

Character Encoding

設定ファイルの文字エンコードは UTF-8 です。 ASCII 文字以外、例えば日本語等を含める場合には必ず UTF-8 でファイルを保存して下さい。

Syntax

設定はS式で表記され、主に連想リストで構成されます。 各設定項目は、項目名をあらわすシンボルから始まるリストとなります。
S式の詳細については Appendix: S-Expression で説明していますが、通常はそれほど意識する必要も無いでしょう。

このドキュメントでは以下のような表記をします。 (表示環境によっては区別できない場合があります)

some-value
設定可能な項目をあらわします。
設定内容については各項目の説明を参照して下さい。
[some-value]
省略可能な設定項目をあらわします。
設定内容および省略時の設定については各項目の説明を参照して下さい。
...
設定項目、設定内容を省略していることをあらわします。
他の設定を指定可能ですが、説明上繁雑となるため省いています。

Setting

各種設定は設定ファイルの先頭から順に読み込まれます。
同一の設定項目に対して複数回設定がされた場合、最後の設定が有効となります。

include
include 文を記述すると他の設定ファイルを読み込むことができます。
(include file-name ...)
file-name にはファイル名を文字列で指定します。 複数のファイル名を指定したときは、順番に読み込まれます。
ファイルの検索方法は、コマンドライン引数で設定ファイル名を指定したときと同様です。 Setting file を参照して下さい。
例: ファイル 2button.mprc を読み込む
(include "2button.mprc")
global 設定
global 設定項目では全体の動作に影響する設定を記述します。
(combination-time . threshold-time)
2ボタン同時押しを認識する最大の時間間隔をミリ秒単位で指定します。
1つめのボタンを押してから、threshold-time ミリ秒以内に2つめのボタンを押すと、2ボタン同時押しをしたものと認識します。
この時間を過ぎるとそれぞれのボタンを個別に押したものとされます。 また、この時間内であっても2つめのボタンを押す前にマウスを動かしたり他のボタンを動作させると、2ボタン同時押しとは認識されません。 2ボタン同時に押したときと離したときの両方の動作を指定しなかったとき (nothing を指定したとき) も同様に2ボタン同時押しとは認識されません。
例: 時間間隔を 0.5 秒に設定
(global
 (combination-time . 500)
 ...
 )
(priority . process-priority)
mp.exe プロセスの優先度を指定します。
他のプロセスの負荷が高いときにマウスカーソルの動きが断続的になる等の現象が発生する場合、プロセスの優先度を高くすることで改善されることがあります。
通常は、問題が無い限り優先度を変更する必要はありません。
process-priority は次のいずれかから指定します。
high
above-normal
通常以上
normal
通常
below-normal
通常以下
idle
例: 優先度を通常以上に設定
(global
 (priority . above-normal)
 ...
 )
(tray-icon icon-file [index])
タスクトレイに表示するアイコンを指定します。
文字列 icon-file で指定されたファイルの index 番目のアイコンを利用します。 指定可能なファイルは、.ico ファイルや .exe.dll ファイルなどがあります。
index を省略すると 0 を指定したものとされます。
icon-file#f を指定するとタスクトレイにアイコンを表示しなくなります。 ただし、この場合はトレイアイコンからのメニュー等も利用できなくなりますので、十分注意して下さい。
例: 「マウス」コントロールパネルのマウスアイコンを利用
(global
 (tray-icon "main.cpl" 0)
 ...
 )
(initial-mode . mode-name)
設定読み込み後の初期モードを指定します。
mode-name には normal-mode 設定から一つ指定します。
normal-modescroll-mode 設定
normal-mode および scroll-mode 設定項目では、 それぞれ通常モードとスクロールモードの動作を記述します。
通常モードはマウス移動が可能なモードで、普段利用するときのボタン割り当てなどを設定します。 スクロールモードはウィンドウスクロール時のモードです。
各モードは複数の動作設定をもつことができ、それぞれに名前 (モード名) をつけられます。 各動作設定は、先頭がモード名であるリストとして記述します。
プログラム起動時や設定再読み込み時には、動作モードは initial-mode で指定された通常モードになります。
例: abcdef という名前の2つの通常モードと、uvwxyz という名前の2つのスクロールモードを設定
(normal-mode
 (abc
  ...
  )

 (def
  ...
  )
 )

(scroll-mode
 (uvw
  ...
  )

 (xyz
  ...
  )
 )
各モード設定には以下のイベント発生時の動作を記述できます。
(button-d-X . (action [args]))
(button-u-X . (action [args]))
それぞれ、ボタンを押したときと離したときの動作を指定します。
X には1から5までのボタン番号を指定します。
action には、どのような動作をするかを次のいずれかから指定します。 args には action への引数を指定できます。
action および args については、それぞれの説明を参照して下さい。
(button-d-X+Y . (action [args]))
(button-u-X+Y . (action [args]))
それぞれ、2ボタン同時に押したときと離したときの動作を指定します。
XY には1から5までのボタン番号で2ボタン同時押しの組み合わせを指定します。
action には、どのような動作をするかを次のいずれかから指定します。 args には action への引数を指定できます。
action および args については、それぞれの説明を参照して下さい。
(wheel . (action [args]))
マウスホイールを動かしたときの動作を指定します。
action には、どのような動作をするかを次のいずれかから指定します。 args には action への引数を指定できます。
action および args については、それぞれの説明を参照して下さい。
スクロールモードの設定には以下の設定を記述できます。
(scroll-ratio x-ratio y-ratio)
スクロール速度を指定します。スクロールモードでのみ有効です。
x-ratio および y-ratio は、それぞれ X 方向 (横)、Y 方向 (縦) のスクロール速度で、何倍の速度でスクロールするかを指定します。 負の数を指定するとスクロールの向きが逆になります。
例: 横を半分、縦を逆向きに2倍の速度でスクロール
(scroll-mode
 (half-x-reverse-double-y
  (scroll-ratio 0.5 -2)
  ...
  )
 )
各動作設定で action として指定できる設定には以下のものがあります。
(butto-d N)
(butto-u N)
それぞれ、ボタンを押す動作と離す動作を割り当てます。
N には1から5までのボタン番号を指定します。
この動作を指定できるのは以下のイベント設定です。
例: ボタン3をクリックしたとき、ボタン5のクリックとして動作するよう割り当てます。
(normal-mode
 (some-name
  (button-d-3 . (button-d 5))
  (button-u-3 . (button-u 5))
  )
 )
(normal-mode [mode-name])
現在の動作モードを通常モードに切り替えます。
mode-name には切り替え後の通常モードのモード名を指定します。 省略した場合は initial-mode のモードが指定されたものとされます。
この動作を指定できるのは以下のイベント設定です。
例: ボタン3のクリックがボタン4として動作するモード mode-A と、ボタン3のクリックがボタン5として動作するモード mode-B の2つの通常モードをボタン1と2の同時押しで切り替える
(normal-mode
 (mode-A
  (button-d-1+2 . (normal-mode mode-B))
  (button-d-3 . (button-d 4))
  (button-u-3 . (button-u 4))
  )

 (mode-B
  (button-d-1+2 . (normal-mode mode-A))
  (button-d-3 . (button-d 5))
  (button-u-3 . (button-u 5))
  )
 )
(scroll-mode mode-name)
現在の動作モードをスクロールモードに切り替えます。
mode-name には切り替え後のスクロールモードのモード名を指定します。
この動作を指定できるのは以下のイベント設定です。
例: 通常モード mode-N 時にボタン3を押ししている間だけスクロールモード mode-S に切り替え、ボタン3を離すと通常モードに戻る
(normal-mode
 (mode-N
  (button-d-3 . (scroll-mode mode-S))
  ...
  )
 )

(scroll-mode
 (mode-S
  (button-u-3 . (normal-mode mode-N))
  ...
  )
 )
(set-scroll-ratio x-ratio y-ratio)
スクロール速度を設定しなおします。スクロールモードでのみ有効です。
x-ratioy-ratio の意味は scroll-ratio と同じです。
この動作を指定できるのは以下のイベント設定です。
(mul-scroll-ratio x-ratio y-ratio)
スクロール速度を変更します。スクロールモードでのみ有効です。
scroll-ratioset-scroll-ratio で設定した X 方向のスクロール速度に x-ratio を乗じ、Y 方向のスクロール速度に y-ratio を乗じます。
この動作を指定できるのは以下のイベント設定です。
例: ボタン3を押すたびにスクロール方向が逆転するスクロールモード
(scroll-mode
 (some-name
  (button-d-3 . (mul-scroll-ratio -1 -1))
  ...
  )
 )
(wheel-input)
通常のホイールを回転させたときの動作と同じです。
この動作を指定できるのは以下のイベント設定です。
(post-wheel-message)
ホイールを回転させたときに発生するメッセージをマウスカーソル直下のウィンドウに送信します。
通常、ホイールメッセージはキーフォーカスがあるウィンドウに送信されますが、その動作を変更させます。 これにより、アクティブでないウィンドウや後ろの方にあるウィンドウへダイレクトにホイールメッセージを送れます。
この動作を指定できるのは以下のイベント設定です。
(nothing)
何も行ないません。
特定のボタンを無効にしたいときなどに指定します。
この動作は全てのイベント設定で指定できます。
scroll-window 設定
scroll-window 設定項目ではウィンドウごとのスクロール方法を記述します。
ウィンドウの種類ごとに一つのリストで表記し、リストの一つめの要素がどのウィンドウに一致するかを示し、二つめの要素がスクロール方法を示します。
対象ウィンドウが複数の設定に一致する場合、一致した設定のうち設定ファイルで最後に記述されているものが実行されます。

ウィンドウはウィンドウクラスとタイトルで区別します。
クラスとタイトルは、ウィンドウの親子関係をあらわすために ":" (コロン) で親ウィンドウのクラス・タイトルと連結して表現します。 最も右側が対象となる子ウィンドウで、一つ左側が親ウィンドウ、その左が親の親、というように連結します。 ただし、一番最初のウィンドウの左側はそのプログラムのパスとなります。
ウィンドウのクラスとタイトルは、ログウィンドウの "詳細を表示" にチェックを入れ、 通常モードからスクロールモードに移行するときに表示されるログから知ることができます。 "window class" の右に表示されるのがウィンドウクラス、"window title" の右に表示されるのがウィンドウタイトルです。
例: メモ帳のエディットコントロールのクラス
C:\WINNT\system32\notepad.exe:Notepad:Edit
scroll-window 設定項目では、ウィンドウのクラス・タイトルの指定に正規表現を使えます。 正規表現の詳細については Appendix: Regular Expression を参照して下さい。 正規表現は文字列として記述します。
例: 全てのエディットコントロールのクラスに一致する正規表現
":Edit$"
このとき、文字列と正規表現の両方で "\" がエスケープ文字として利用されていることに注意して下さい。 "\" 自身を表現するには "\\\\" と記述する必要があります。
例: メモ帳のエディットコントロールのクラスに完全に一致する正規表現
"^C:\\\\WINNT\\\\system32\\\\notepad\\.exe:Notepad:Edit$"
scroll-window 設定項目のウィンドウを指定する位置に文字列のみを記述すると、それはウィンドウクラスを示す正規表現であるとみなされます。
ウィンドウタイトルを指定するには、(title "title-regexp") と記述します。 同様に、ウィンドウクラスを指定するのに (class "class-regexp") と記述することもできます。
ウィンドウクラスとタイトルの両方を指定するには、(and ...) または (or ...) を使います。 and は両方に一致するウィンドウを、or はどちらかに一致するウィンドウを示します。
例: メモ帳で default.mprc というファイルを編集しているときのエディットコントロールにのみ一致
(and (class "notepad\\.exe:.*:Edit$")
     (title ":default.mprc - メモ帳:"))
ウィンドウのスクロール方法には Scroll operator を指定します。
operator-config 設定
operator-config 設定項目では、Scroll operator の動作設定を記述します。
詳細については、各 Scroll operator の説明を参照して下さい。

Scroll operator

Scroll operator は、スクロールモード時にマウスの動きに応じてウィンドウをスクロールさせます。
どのウィンドウでどの Scroll operator を用いるかの対応付けは scroll-window 設定で指定します。
スクロール速度や方向などの各 Scroll operator ごとの設定は、operator-config 設定で記述します。 また、scroll-window 設定で Scroll operator を指定するときの引数として個別に記述することもできます。

Scroll operator には以下のものを指定できます。

(window-scrollbar [mode x-ratio y-ratio])
Windows 標準のスクロールバーを持つウィンドウをスクロールさせます。
mode にはマウスを動かす速度とスクロールの速度をどのように対応づけるかを指定します。 省略した場合は、operator-config 設定の default-mode の設定を使用します。
x-ratioy-ratio にはスクロール速度の比率を指定します。 省略した場合は、operator-config 設定の mode に対応する項目に設定してある値を使用します。 最終的なスクロール速度は、scroll-ratio の設定値と x-ratioy-ratio それぞれの対応する値を乗じた結果に比例します。
mode には以下のモードを指定できます。
drag
スクロールバーのサムをドラッグしたときとほぼ同じ速度でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、サムを1ピクセル分ドラッグするのと同じだけスクロールします。
percentage
スクロールバーの長さに関わらず一定の割合でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、スクロールバー可動範囲の1%分がスクロールします。
bar-unit
スクロールバーに設定されている最小の単位に比例した速度でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、スクロールバーの位置を1単位スクロールします。
line-scroll
スクロールバーの両端のボタンを押したときと同じだけスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、スクロールバー両端のボタンを1回押したのと同じだけスクロールします。
page-scroll
スクロールバーの両端のボタンとサムの間を押したときと同じだけスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、スクロールバー両端のボタンとサムの間を1回押したのと同じだけスクロールします。
例: メモ帳のエディットコントロールは line-scroll モードでスクロール、その他のエディットコントロールは drag モード・通常の 1/10 の速度でスクロール、ワードパッドのリッチエディットコントロールは page-scroll モードでスクロール
(scroll-window
 ("notepad\\.exe:.*:Edit$" (window-scroll))
 (":Edit$" (window-scroll drag 0.1 0.1))
 ("wordpad\\.exe:.*:RichEdit" (window-scroll page-scroll))
 ...
 )

(operator-config
 (window-scrollbar
  (default-mode . line-scroll)
  (line-scroll 1 1)
  (drag 1 1)
  (page-scroll 0.1 0.1)
  ...
  )
 ...
 )
dragpercentagebar-unit の各モードは対象ウィンドウのスタイルに WM_HSCROLL または WM_VSCROLL のうち少なくともいずれかが指定されている必要があります。 これらのスタイルが指定されていなかった場合はこの実行は失敗します。
(neighborhood-scrollbar [mode x-ratio y-ratio])
対象ウィンドウのすぐ隣付近にあるスクロールバーコントロールをスクロールさせます。
window-scrollbar とは異なり、対象ウィンドウはスクロールバーを持たず、そのウィンドウの隣 (右側や下側など) にスクロールバーコントロールを個別に持っている場合に使います。 MS Office 製品や、Acrobat Reader などが該当します。
modex-ratioy-ratio の指定値および設定方法は window-scrollbar と同様です。
(scrollbar-control [mode x-ratio y-ratio])
スクロールバーコントロールを操作します。
スクロールバー単体を対象とする場合に使います。
mode の指定値および設定方法は window-scrollbar と同様です。
x-ratioy-ratio はスクロール速度を指定します。 スクロール速度は、
X 方向の動き * x-ratio + Y 方向の動き * y-ratio
に比例します。
operator-config 設定では、水平スクロールバーは h-bar、垂直スクロールバーは v-bar をキーとして個別に設定を記述します。
例: 水平スクロールバーの場合はマウスの横の動きでスクロールさせ、垂直スクロールバーの場合はマウスの縦の動きでスクロールさせる
(scroll-window
 ...
 (":ScrollBar$" (scrollbar-control))
 ...
 )

(operator-config
 (scrollbar-control
  (default-mode . drag)
  (h-bar
   (drag 1 0)
   ...
   )
  (v-bar
   (drag 0 1)
   ...
   )
  )
 ...
 )
(trackbar-control [mode x-ratio y-ratio])
トラックバーコントロールを操作します。
トラックバー単体を対象とする場合に使います。
modex-ratioy-ratio の指定値および設定方法は scrollbar-control と同様です
(ie-scroll [mode x-ratio y-ratio])
Internet Explorer をスクロールさせます。
IE コンポーネントを使っているアプリケーション、HTML ヘルプやタブブラウザなども使用できます。
x-ratioy-ratio の指定値および設定方法は window-scrollbar と同様です。
mode にはマウスを動かす速度とスクロールの速度をどのように対応づけるかを指定します。 省略した場合は、operator-config 設定の default-mode の設定を使用します。
mode には以下のモードを指定できます。
drag
スクロールバーのサムをドラッグしたときとほぼ同じ速度でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、サムを1ピクセル分ドラッグするのと同じだけスクロールします。
percentage
スクロールバーの長さに関わらず一定の割合でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、スクロールバー可動範囲の1%分がスクロールします。
pixel
スクロール対象をピクセル単位でスクロールします。
scroll-ratiox-ratioy-ratio で設定した値が全て 1 だった場合に、マウスカーソルが1ピクセル移動するぶんマウスを動かすと、1ピクセル分スクロールします。
(wheel-message [x-ratio y-ratio tick])
マウスホイールを回転させたときと同じメッセージを対象ウィンドウに送信します。
マウスの動きでホイールの回転を再現したい場合に使います。
アプリケーションが水平ホイールメッセージに対応していれば水平方向のスクロールが可能かもしれません。
x-ratioy-ratio はホイールの回転速度を指定します。 縦方向の回転速度は、
Y 方向の動き * y-ratio
に比例し、横方向の回転速度は、
X 方向の動き * x-ratio
に比例します。 省略した場合は、operator-config 設定の ratio に設定してある値を使用します。
tick は一回のメッセージで送信する回転量です。 通常は 120 を指定します。 アプリケーションが対応していれば 120 より小さい値を指定できます。 省略した場合は、operator-config 設定の tick に設定してある値を使用します。
例: リストビューコントロールの場合はマウスの縦動作でホイール動作
(scroll-window
 (":SysListView32$" (wheel-message))
 ...
 )

(operator-config
 (wheel-message
  (ratio 0.0 -5.0)
  (tick . 120))
 ...
 )

Scroll operator には他の Scroll operator を引数としてとる Meta scroll operator も指定できます。

(or scroll-operator1 [scroll-operator2 ...])
指定された Scroll operator を成功するまで順次実行します。
実行が成功した場合はそれ以降に指定された Scroll operator は実行されません。
例: 他のどの scroll-window の設定にも合致しなかった場合は window-scrollbarneighborhood-scrollbarwheel-message から順次実行可能なものを試す
(scroll-window
 (".*" (or (window-scrollbar)
           (neighborhood-scrollbar)
           (wheel-message)))
 ...
 )
(apply-parent scroll-operator [nth])
親ウィンドウを対象ウィンドウとします。
scroll-operator で指定した operator を nth 世代親のウィンドウに適用します。 nth が省略された場合は 1 を使用します。

Appendix

S-Expression

mouse-processor で利用するS式は、Scheme (R5RS) のもののサブセットです。
このS式は以下の要素で構成されます。

コメント
";" (セミコロン) から、その行の末尾まではコメントとして扱われます。
整数
数値を表わします。 接頭辞 #o #d #x を付けることで、それぞれ8進数、10進数、16進数で表記できます。
例: 以下は全て10進数の 26 と同じ値になります。
26  #o32  #d26  #x1A
浮動小数点数
数字に小数点 "." を含めることで有限精度の実数を表記できます。
シンボル
アルファベットや記号で構成され、機能名などに用いられる識別子です。
文字列
ダブルクオーテーション (二重引用符、"")でくくられ、任意の文字を含めることができます。 ダブルクオーテーションを含める場合は直前に "\" を前置します。"\" 自身を含めたい場合も同様です。
真偽値
真および偽をあらわします。
偽は #f、真は #f 以外となります。 明示的に真をあらわす #t もあります。
cons セル
car 部と cdr 部の二つで構成され、それぞれに任意の値を入れることができます。 car と cdr の間を "." で区切り、全体を括弧 () でくくって表記します。
例: car 部に car というシンボル、cdr 部に "cdr" という文字列を入れた cons セルは、以下のように表記します。
(car . "cdr")
リスト
リストは cons セルの連なりで構成されます。
n個の要素を持つリストは n個の cons セルで構成され、それぞれの car 部は要素を cdr 部は次の cons セルを保持します。最後の cdr 部は空リスト () を保持します。
例: 4つの要素を持ち、それぞれの要素が整数のリストは以下のように表記します。
(1 . (2 . (3 . (4 . ()))))
このままでは表記が繁雑となるため、cdr 部が cons セルの場合は、car 部と cdr 部の間のドットと cdr 部をくくる括弧は省略することができます。
例: 以下は全て同じリストを表わします。
(1 2 3 4)
(1 . (2 3 4))
(1 . (2 . (3 . (4 . ()))))

BNF 記法っぽい定義は以下のとおり。

<datum> = <boolean>
        | <number>
        | <flonum>
        | <symbol>
        | <string>
        | <list>

<boolean> = #t | #f

<number> = <number 2>
         | <number 8>
         | <number 10>
         | <number 16>

<number R> = <radix R> <integer R>

<integer R> = <sign> <digit R>+

<sign> = <empty> | + | -

<radix 2> = #b
<radix 8> = #o
<radix 10> = <empty> | #d
<radix 16> = #x

<digit 2> = 0 | 1
<digit 8> = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
<digit 10> = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<digit 16> = <digit 10> | a | b | c | e | f

<flonum> = <sign> <fraction>

<fraction> = . <digit 10>+
           | <digit 10>+ . <digit 10>*

<symbol> = <identifier>

<identifier> = <initial> <subsequent>*
             | <peculiar identifier>

<initial> = <letter> | <special initial>
<subsequent> = <initial> | <digit> | <special subsequent>

<letter> = a | b | c | ... | z
<special initial> = ! | $ | % | & | * | / | : | < | = | > | ? | ^ | _ | ~
<digit> = <digit 10>
<special subsequent> = + | - | . | @
<peculiar identifier> = + | - | ...

<string> = " <string element>* "

<string element> = <any character other than " or \> | \" | \\

<list> = ( <datum>* )
       | ( <datum>+ . <datum> )

<empty> =

Regular Expression

利用可能な正規表現は VBScript と同じです。
これは egrep や perl 等の一般的な正規表現とほぼ同じです。

Index


webmaster@tamanegi.org