よくある質問
もくじ
- Alt-Tabを含むキーマクロを再生すると、ウインドウを選択するポップアップ(ウインドウスイッチャ)が出たまま止まってしまうことがある
- キーマクロを再生すると、アプリがハングしてしまう。あるいは、もう少しキーマクロ再生をテキパキできないか?
- Alt-Tabを含むキーマクロを再生したとき、ウインドウが切り替わってから次のタイプに移るまでの時間が長すぎる。もうちょっと速くならない?
- xfumbleが出すメッセージバーやミニバッファの位置が、なんか微妙なんだけど
- ミニバッファで、コマンドの候補が出てくれるのはいいけれど、候補の出る順番が変わるのが気に入らない。固定の方がいいんだけど
- せっかく、ミニバッファのコマンドの候補の出る順番が、選択の頻度に応じて変わってくれるんだから、先頭の候補をすぐ選択させてくれないかな
- Thunderbirdで、メールアドレスを入力すると出てくる「アドレス候補ウインドウ」の動作がおかしい
- Firefoxで、「このページをブックマーク」というメニュー項目を選ぶんでも、ダイアログが一瞬表示され、すぐ消えてしまう
- キーリコンフィグが効かなくなった
- 数引数に、間違って1000とか入れて、繰り返しがいつまでも終わらない
- ポップアップメニューをキーで表示させた後、キーバインドがまったく効かなくなった
- キーリコンフィグがまったく効かなくなって、直らない
- xmodmapで、keysymを変更したのに、反映されない
- xmodmapで、異なる二つのキーに、同じkeysymを割り当てた(例えば二つのキーにEscapeなど)のに、反映されない
質問と答え
・Alt-Tabを含むキーマクロを再生すると、ウインドウを選択するポップアップ(ウインドウスイッチャ)が出たまま止まってしまうことがある
・キーリコンフィグが効かなくなった
・数引数に、間違って1000とか入れて、繰り返しがいつまでも終わらない
・ポップアップメニューをキーで表示させた後、キーバインドがまったく効かなくなった
・キーリコンフィグがまったく効かなくなって、直らない
・xmodmapで、keysymを変更したのに、反映されない
・xmodmapで、異なる二つのキーに、同じkeysymを割り当てた(例えば二つのキーにEscapeなど)のに、反映されない
- xfumbleは、人間が手でキーをタイプするのをプログラムがマネすることで、キーマクロ再生しているのですが、処理能力の高いパソコンだと、人間では絶対に打てないような速さでキーをタイプしてしまい、システムが予期し得ない不具合が発生することがあります。
- 上記は、Alt-Tab(ウインドウ切り替え)の場合に顕著です。特にウインドウマネージャがcompizの場合は、どうもよく不具合がおこるようです。
- そのような場合、Alt-Tabをxfumbleが打つ際に、若干のウエイトをいれることで、問題が解決します。
- emacs.xml、vi.xmlの中から、下記の記述を見つけてください。
<action block="TypeKeyReleaseWait" file="key.rb" disable="true">
これは、Alt-Tabをおして、Altを離すタイミングを、100msecほど、遅らせる指定をするブロックです。最後のdisable="true"で、デフォルトでは、指定を行っておりません。もし、「ウインドウを選択するポップアップ(ウインドウスイッチャ)が出たまま止まってしまう」ような不具合がでたら、disable="false"としてください。これで、Altを離すタイミングが、「人間がタイプするみたいに」ちょっとだけ遅れて、不具合が解消されます。これでも解消されない場合は、ウエイトの秒数を増やしてみてください。
- 上記と同じ理由で、xfumbleは、人間では絶対打てない速度でキータイプしてしまうので、ただアプリ内でテキストをタイプしただけで、アプリがハングしてしまうことがあります。そのため、xfumbleでは、デフォルトで、タイプの間隔を、10msecウエイトするようになっています。
- 障害が起きなければ、このウエイトはもっと少なくてもいいし、障害が起きれば、もう少しウエイトを増やした方がいいでしょう。これは、xfumbleを動作させるマシンやアプリに依存しますので、調節してみてください。
- 下記の記述を見つけてください。
<action block="TypeKeyPressWait" file="key.rb" disable="false"> <press_wait_time> 10 </press_wait_time> </action>これは、キーマクロをタイプするタイミングを、10msecほど、遅らせる指定をするブロックです。障害がなければ、10msecを、5とか、1とかにして良いでしょう。あるいは、disable="true"にしてしまえば、いっさいのウエイトを行わないようになります。障害がある場合は、逆に数値を増やしてください。
- アプリによっては、ウインドウが切り替わったあと、すぐにタイプをすると、(ビックリして?)キーを受け付けなくなることがあります。Thunderbirdとか、結構そうですね。そこで、マクロによってウインドウが切り替わったときは、デフォルトでは、余裕をみて、1.2秒ウエイトさせるようになっています。
- しかし、高速なマシンですと、ここまで待つ必要もなさそうです。もう少し速くしたかったら、emacs.xml、vi.xmlの中から、下記の記述を見つけてください。
<action block="KeyMacroAttr" file="key_macro.rb"> <win_change_wait_time> 1200 </win_change_wait_time>"1200"が、ウエイトの秒数(1.2秒)を、指定しています。ここを、例えば"600"とかに変更して、様子をみてください。
- デフォルトのxfumbleでは、ウインドウマネージャがcompizやKWinの場合を想定して、メッセージバーやミニバッファの出力位置を決めています。ウインドウマネージャがMetacityの場合は、出力位置がちょっとズレます。
- そのような場合、emacs.xml、vi.xmlの中から、下記の記述を見つけてください。
<!-- <offset> 0,-40 </offset> --> </action> <!-- <action block="MessStsBarAttr" file="message_sts_bar.rb"> <offset> 0,-40 </offset> </action> -->ここの、コメントアウト(<!--...-->)を外して、offset指定を有効にしてください。-40という値で、Metacityの場合はうまくいくと思います。うまくいかなかったり、他のウインドウマネージャをお使いの場合は、数値を変更してみてください。
- デフォルトでは、コマンドの候補は、その選択頻度に応じて、頻度が高いものが先頭に出てくるような、学習機能がついています。それで、候補の出る順番が変わります。
- emacs.xmlから、下記の記述を探してください。
<action block="CmdPadAttr" file="command_pad.rb"> <mode> emacs </mode> <window_command> cmd_add.xml </window_command> <desktop_command> cmd_emacs.xml </desktop_command> <learn> true </learn> - 上記の、<learn>true</learn>の、trueをfalseにしてください。これで、学習機能がoffになります。
- デフォルトでは、emacsと同じように、入力したキーにマッチするコマンドの候補が複数あるときは、その候補が一つに確定するまで、キーを打たないといけません([Mathed]表示が出るまでキーをタイプしないと選択できない)。しかし、候補が複数あっても、Reteurnをたたくことで、候補の先頭のコマンドを実行してしまうようにすることも可能です。
- emacs.xmlから、下記の記述を探してください。
<action block="CmdPadAttr" file="command_pad.rb"> <mode> emacs </mode> <window_command> cmd_add.xml </window_command> <desktop_command> cmd_emacs.xml </desktop_command> <learn> true </learn> <activate_first_candidate> false </activate_first_candidate> - 上記の、<activate_first_candidate>false</activate_first_candidate>の、falseをtrueにしてください。これで、[Matched]が出なくても、候補の先頭のコマンドを実行することができます。
- Thunderbird(Ver.2)は、ポップアップウインドウが、すべてX Windowシステム上、"NORMAL"というウインドウタイプ属性になっていて、普通のメニューか、アドレス候補ポップアップか、はたまたツールチップかが、区別できません。
- しかし、区別ができないと、xfumbleは、これらのポップアップうまく制御することができません。
- そこで、苦肉の策として、(1)縦横比が、横に長い。(2)しかし、ツールチップよりは、縦が長い、という条件を満たすものを、「アドレス候補ポップアップ」と認識するようにしました。
- emacs.xml、vi.xmlの中から、下記の記述を見つけてください。
<trigger block="WinMapEvent" file="window.rb"> <app_name>Thunderbird-bin</app_name> <type>NORMAL</type> <transient_for>true</transient_for> <height>up,19</height> <aspect_ratio>up,3.8</aspect_ratio> </trigger><aspect_ratio>up,3.8</aspect_ratio>が、「横が縦よりも3.8倍以上長い」ことを表します。さらに、<height>up,19</height>が、「縦が19ピクセルより(ツールチップより)長い」ことを表します。しかし、これらの数値は、作者の環境で設定したものなので、皆さんの環境では異なるかもしれません。 - xfumbleをコンパイルしたディレクトリに、「popup.rb」という検証用スクリプトがありますので、それを、下記のごとく起動してください。
$ ruby popup.rb
このスクリプトは、マップ(表示)されたウインドウのサイズや属性を出力します。これで、「アドレス候補ポップアップ」や、ツールチップの大きさをチェックして、数値を書き換えてみてください。
- 上記のThunderbirdの場合と同じような理由で、ダイアログの縦と横の長さで、ダイアログであることを特定していることが原因です。
- emacs.xml、vi.xmlの中から、下記の記述を見つけてください
<trigger block="WinMapEvent" file="window.rb"> <app_name>Firefox</app_name> <type>UTILITY</type> <transient_for>true</transient_for> <width>eq,314</width> <height>eq,196</height> </trigger>さらに、
<trigger block="WinMapEvent" file="window.rb"> <app_name>Firefox</app_name> <type>UTILITY</type> <transient_for>true</transient_for> <width>eq,348</width> <height>eq,205</height> </trigger> - <width>eq,314</width><height>eq,196</height>、あるいは<width>eq,348</width><height>eq,205</height>が、「ダイアログの大きさは314x196、あるいは348x205」であることを表します。
- 上記のThunderbirdの場合と同じように、popup.rbを使って、皆さんの環境に応じて、数値を変えてみてください。
- 数値が正しければ、マウスクリックで、「このページをブックマーク」を選んだ場合は、ダイアログは消えずに残るようになります。しかし、キーボードで、「ブックマーク」メニューを開き、「このページをブックマーク」を選んだ場合は、やはり消えてしまいます。これはあきらめてください。キーボードで「このページをブックマーク」を選択する場合は、Firefoxのキーボードショートカット"Ctrl-d"を使ってください。Ctrl-dを入力するのが嫌な場合は、xfumbleで、Ctrl-dを他のキーにリコンフィグしてみてください。例えば、下記は、Firefoxの場合、Ctrl-Shift-b(CtrlとShiftを押しながらb)を、Ctrl-dに、リコンフィグするルール記述です。
<rule> <trigger block="KeyEvent" file="key.rb"> <keysym>^+b</keysym> </trigger> <state_action> <state block="ActiveWinChangeEvent" file="window.rb"> <app_name>Firefox</app_name> </state> <action block="TypeKeys" file="key.rb"> <keysym>^d</keysym> </action> </state_action> </rule>
・キーリコンフィグが効かなくなった
- 他のウインドウにActiveウインドウを変更すると、直ることがあります。
・数引数に、間違って1000とか入れて、繰り返しがいつまでも終わらない
- 'g'キーを押してみてください。止まります。
・ポップアップメニューをキーで表示させた後、キーバインドがまったく効かなくなった
- Escapeでポップアップメニューを消すと、多分直ります。
- ポップアップウインドウは、X Windowの仕様の都合で、特別扱いをしなければなりませんでした。(上記、Thunderbirdの「アドレス候補ポップアップ」や、Firefoxの「このページをブックマーク」での問題参照)。極力、特別扱いしていることがわからないように工夫しましたが、それでも、うまくいかないことがあります。ポップアップウインドウをキーで出力させた時は、0.5秒ほど、次のキーをタイプするのを待った方が、無難です。
- ポップアップウインドウは、xfumbleにきちんと教えてやる必要があります。現在、emacs.xml、vi.xmlでは、Thunderbirdが出すポップアップメニューと「アドレス候補ポップアップ」、Firefoxが出す「候補ウインドウ」(ロケーションバーや、検索バーで、文字を打った時に、候補一覧を見せてくれる、アレ)と、Firefoxのブラウザの中の、「コンボボックス」(北海道とか東京とか、都道府県を選んでくださいなんてときに出てくる、アレ)、さらに「このページをブックマーク」ダイアログ、XFCE4環境のメインメニュー、他、一般的な「DROPDOWN_MENU」「POPUP_MENU」属性がついたポップアップウインドウを、xfumbleに「教えて」やってます。
- 他のアプリで、うまく動かないポップアップメニューがあったら、xfumbleに「教えて」やるためのXML記述を作成しますので、作者までご連絡ください。
・キーリコンフィグがまったく効かなくなって、直らない
- キーリコンフィグがまったく効かなくなって、前述の終了キー(Ctrl-Alt-Shift-Escape同時押し)もダメだった場合は、xfumbleのプロセスを殺してください(端末でCtrl-cとか、ps aux | grep xfumbleでPIDを探してkillとか)。
- その際、xfumbleとは別プロセスで、ステータスウインドウやコマンドパット用のプロセスが死なずに残ることがあるので、それらも殺してください。
例えば、こんな感じで。
$ ps aux | grep XFM namazu 19773 0.0 0.6 27008 13828 pts/2 S+ 09:00 0:00 ruby ./_XFM_STSWIN namazu 19778 0.0 0.7 27824 14620 pts/2 S+ 09:00 0:00 ruby ./_XFM_CMDPAD namazu 20032 0.0 0.0 5132 796 pts/6 S+ 09:35 0:00 grep XFM $ kill 19773 $ kill 19778
・xmodmapで、keysymを変更したのに、反映されない
- スマン、xfumble起動中のキーマップ変更には、まだ対応してないんだ。xfumbleを再起動してくれ
・xmodmapで、異なる二つのキーに、同じkeysymを割り当てた(例えば二つのキーにEscapeなど)のに、反映されない
- スマン、現在のところ、xfumbleでは、一つのkeysymは、一つの物理的なキーに対応していることを前提に書いてるんだ。そのうち直すから、ちょっと待っててくれ