『のどか』のマウスフック機能を使って横スクロールを実装するぞ

 新しいマウスの話の続き。今回は、新しいマウスを買ったはいいが、うっかりチルトホイール(横スクロール)のないマウスを選んでしまったので、ソフトの方でマウスの横スクロール機能を実装しよう、という話です。*1

 自分が長年愛用しているキーカスタマイズソフト(キーバインド変更ソフト)に『のどか』というものがあります。前身の『窓使いの憂鬱』も含めると、もう10年以上使っています。とっつきはよくないですが、とても広範囲にわたるカスタマイズができるソフトです。キーの入れ替えで思いつくことはなんでもできますし、思いもつかないこともできます。

 もともとはキーボードのカスタマイズに主眼が置かれたソフトなので、マウス関係のカスタマイズは苦手だという印象がありました。それが、いつからか「マウスイベントフック機能」という機能が追加されてマウスのカスタマイズもできるようになった、と聞いたことがありました。それを使うことにしよう。

 『のどか』のオンラインヘルプの「マウスイベントフック機能」の部分を読んで、簡単な設定を書いてみます。

def option mouse-event = true
key RButton = A

 これでマウスの右ボタンを押すとキーボードの[A]が発動するはず。ではやってみましょう。『メモ帳』の上で右ボタンを押してみます。思った通りなら「a」が入力されるはず……。(カチ)うん、右クリックメニューが表示されました(^_^;) おかしいな。エラーは出ないから設定ファイルの読み込みは成功しているはず。

 改めてオンラインヘルプを読んでみると、最初の方にこう書いてあります。

なお、あらかじめ nodoka.exe, nodoka64.exe の起動時引数として、 -m が設定されている必要があります。-m指定されて起動しているかどうかは、ログウィンドウの先頭で、「use Mouse LL Hook」が表示されているか御確認ください。

 ログウィンドウを見ると、「use Mouse LL Hook」という表示はありません。「起動時引数ってなあに? おいしいの?」と思いましたが、『のどか』を起動するショートカットのプロパティを開いてリンク先の末尾に“ -m”を追加して起動し直してみたら、無事、右ボタンを押すと「a」が入力されるようになりました。きっとこれでいいんだろう。あとでちゃんと読んだら、オンラインマニュアルの中に「オプション 起動時引数」という項目がありました。

 ここまでできればあとは難しくありません。思うがままに機能を実装していきましょう。

[拡張ボタン1] + [ホイール] → 横スクロール

 これが今回の目的ですから、当然ですね。キーボードに触ることなくマウスだけで横スクロールが実現できて快適。これがあればチルトホイールはもういらない。はっきり言って、チルトホイールより操作性が良いと思う。

 問題の『Firefox』での横スクロールですが、「『Firefox』のウィンドウ上では、[拡張ボタン1]+[ホイール]を回したらカーソルキーの[←] [→]が押されたことにする」という方法で実現できました。

 これができただけで十分なんですが、せっかくなのでほかの機能も付けてみます。

[拡張ボタン1] + [右ボタン] → ウィンドウを最大化/元に戻す

 小さいウィンドウだと横スクロールが発生するので最大化したいという場合は多いし、最大化していると横に長すぎて読みにくいので元に戻したいという場合も多い。前に『FireGestures』のロッカージェスチャで実現していると書いた機能ですが、『のどか』で設定すれば『Firefox』だけでなく全アプリケーションで使えます。『FireGestures』では「左ボタンを押しながら右クリック」に設定していましたが、なぜ同じ操作に設定しなかったのかは後述します。なお、『FireGestures』の「左ボタンを押しながら右クリック」は「全画面表示」に変更しました。

[拡張ボタン1] + [左ボタン] → ウィンドウを最小化

 ウィンドウがいっぱい開いてじゃまだけど、閉じたくはない場合に使います。自分はブラウザのタブはあまり好きではなく、新しいウィンドウをどんどん開いてしまうので、こういうことはわりと起こります。

[拡張ボタン2] + [左ボタン] → ウィンドウを閉じる

 マウスカーソルの下にあるウィンドウアクティブウィンドウを閉じます。これで、右上の小さな×ボタンにマウスカーソルを合わせる必要が無くなります。ウィンドウを閉じるという操作は頻繁に使うのでかなり強力です。今までは『ZTop』で実現していましたが、この機会に『のどか』で設定することにしました。

 なお、なぜ今まで[拡張ボタン2]+[左ボタン]をウィンドウを閉じるにしていたかというと、『ZTop』の仕様に理由があります。『ZTop』のマウスボタン変更は、発動条件に設定したボタンを離した時にイベントが発生してしまうのです。例えば「右ボタンを押しながら左クリックでウィンドウを閉じる([Alt]+[F4])」という設定にしてしまうと、ウィンドウを閉じたのち、右ボタンを離した時に右クリックが発生してしまいます。そこで、暴発しても比較的影響が少ない拡張ボタン2(「進む」)を使うことにしました。

 以上の設定の設定ファイルは、次の通りです。

# 【マウス】
def option mouse-event = true

mod Mod3              += !!XButton1       # 拡張ボタン1をモディファイヤ3に
mod Mod4              += !!XButton2       # 拡張ボタン2をモディファイヤ4に
key M3-*WheelForward  = S-*WheelForward   # 拡張ボタン1を押しながらホイールで横スクロール
key M3-*WheelBackward = S-*WheelBackward  # (同上)
key M3-*LButton       = &WindowMinimize   # 拡張ボタン1を押しながら左ボタンでウィンドウを最小化
key M3-*RButton       = &WindowMaximize   # 拡張ボタン1を押しながら右ボタンでウィンドウを最大化/元に戻す
key M4-*LButton       = &WindowClose      # 拡張ボタン2を押しながら左ボタンでウィンドウを閉じる
# key M4-*RButton     =                   # ※空き

window Firefox /firefox\.exe/ : Global    # 以下は『Firefox』用の設定
key M3-*WheelForward  = *←               # 拡張ボタン1を押しながらホイールで横スクロール
key M3-*WheelBackward = *→               # (同上)

 基本的に、拡張ボタン1と2をワンショットモディファイヤ にして、[拡張ボタン]+[何か]に機能を割り当てていく形です。Modが3と4なのは、0~2はほかで使っているからです。左ボタンや右ボタンもワンショットモディファイヤにしようかと思いましたが、やってみるとドラッグができなくなってしまいました。残念。先ほど後述すると書いた「左ボタンを押しながら右クリック」を「ウィンドウの最大化/元に戻す」にできない理由がこれです。『FireGestures』のロッカージェスチャで実現している「右ボタンを押しながらホイールで高速スクロール」を全アプリケーションに適用できたら良さそうだな、と思っていたのに。

 よく考えると、マウスの左ボタンと右ボタンはワンショットモディファイヤのようなものなんですね。左ボタンを押して、そのまま離せば左クリック。左ボタンを押して、離さずにマウスカーソルを動かせばドラッグ。そして、そのあと左ボタンを放しても左クリックは発生しない。

 [拡張ボタン2]+[右ボタン]がまだ空いています。何にするのがいいでしょう? 前回も書きましたが、基本的にマウスはできるだけ使うべきではないと思っているので、マウスを多機能にするのは本末転倒なんですよね。マウスをどうしても使ってしまうのはやはりブラウザなので、ブラウザを使用時によく使う機能を設定したいところですが。

 さあ、これで全アプリケーションでマウスでの横スクロールが実現できて嬉しい気分になりました。そのあとで気がついたのですが、Twitterのページで横スクロールができない(´・ω・`) そもそもキーボードの[→]を押してもスクロールしないじゃん。おのれ。

2015/09/13追記

 その後、カスタマイズ内容を少し変更しました。

y-koutarou.hatenablog.com

関連する記事

y-koutarou.hatenablog.com

y-koutarou.hatenablog.com

*1:もともと、自分は『ZTop』というフリーソフトを使っていました。ウィンドウが別のウィンドウ枠などにぴったりくっつくなど、さまざまな機能があるユーティリティソフトです。その機能の一つに、「[Shift]+[ホイール]で横スクロール」があります。これを使えばいいじゃん、と最初は思っていました。

 ところが、どういうわけか『Firefox』で横スクロールができません。ホイール個別設定で「Shift+ホイールで横ホイールMsg生成」にチェックを入れても動かない。readme.txtを見ると、2007/12/03 ver.1.7で「ホイール個別設定に「Shift+ホイールで横ホイールMsg生成」を追加。FireFoxでshift+ホイールによる横スクロールができるようになった。」と書かれているのだけど……。

 問題がもう一つ。[Shift]+[ホイール]という操作はあまり使いやすくはないので、マウスだけで操作できるように[拡張ボタン1]+[ホイール]あたりにしたいです。しかし、これは『ZTop』では実現できません。『ZTop』には「マウスボタン変更」というマウスカスタマイズ機能があるのですが、「変更後のキー」はキーボードのキーしか指定できないので、マウスの横スクロールを発生させることができないのです。

 というわけで、別の方法を試してみることにします。