XでWheel Mouseを使う


 XFree86のバージョン3.3.1以上(だったかな?)では、正式にWheelMouseに対応しているらしく、XF86Config内で設定をしてやれば、Wheel機能を使えるようになる。
 まず、XF86ConfigのPointerセクションを以下のように変更する。
Section "Pointer"
   Protocol        "imps/2"
   Device          "/dev/mouse"
   BaudRate        1200
   Resolution      200
   Buttons         5
   ZAxisMapping    4 5
EndSection
 Protocolのimps/2は、多分IntelliMouse PS/2の略だと思われる。(笑)
 X Serverは、ホイールの回転をボタン4、5として検出するので、Button 5と5ボタンマウスの設定をして、ZAxisMapping 4 5でZ軸方向の動きにマッピングしている。  ホイールを押すことがボタン2に対応するので、Emulate3Buttonsは必要ない。

 これでXサーバー自体はホイールの動きを検出できるようになったので、次はアプリケーション側の設定をする。

 まず、NetscapeNavigator。.Xresourcesなどのリソース定義ファイルに、以下の設定を書いておく。
!! Netscape Communicator 4.xx
Netscape*drawingArea.translations:  #replace\
 <Btn1Down>:  ArmLink()\n\
 <Btn2Down>:  ArmLink()\n\
 ~Shift<Btn1Up>:  ActivateLink()\n\
 ~Shift<Btn2Up>:  ActivateLink(new-window)DisarmLink()\n\
 Shift<Btn1Up>:  ActivateLink(save-only)DisarmLink()\n\
 Shift<Btn2Up>:  ActivateLink(save-only)DisarmLink()\n\
 <Btn1Motion>:  DisarmLinkIfMoved()\n\
 <Btn2Motion>:  DisarmLinkIfMoved()\n\
 <Btn3Motion>:  DisarmLinkIfMoved()\n\
 <Motion>:  DescribeLink()\n\
 <Btn3Down>:  xfeDoPopup()\n\
 <Btn3Up>:  ActivatePopup()\n\
 \
 None<Btn4Down>:  LineUp()LineUp()LineUp()LineUp()LineUp()\n\
 None<Btn5Down>:  LineDown()LineDown()LineDown()LineDown()LineDown()\n\
 Shift<Btn4Down>:  ColumnLeft()\n\
 Shift<Btn5Down>:  ColumnRight()\n\
 Ctrl<Btn4Down>:  PageUp()\n\
 Ctrl<Btn5Down>:  PageDown()\n\
 Alt<Btn4Down>:  xfeDoCommand(back)\n\
 Alt<Btn5Down>:  xfeDoCommand(forward)

Netscape*globalNonTextTranslations: #override\
 ~Meta ~Alt ~Ctrl<Key>space:  xfeDoCommand(spacebar)\n\
 ~Meta ~Alt ~Ctrl<Key>Delete:  PageUp()\n\
 ~Meta ~Alt ~Ctrl<Key>BackSpace:  PageUp()\n\
 ~Meta ~Alt ~Ctrl<Key>Up:  LineUp()\n\
 ~Meta ~Alt ~Ctrl<Key>Down:  LineDown()\n\
 ~Meta ~Alt ~Ctrl<Key>Left:  ColumnLeft()\n\
 ~Meta ~Alt ~Ctrl<Key>Right:  ColumnRight()\n\
 ~Meta ~Alt ~Ctrl<Key>osfDelete:  PageUp()\n\
 ~Meta ~Alt ~Ctrl<Key>osfBackSpace:  PageUp()\n\
  Meta  Ctrl<Key>f:  fishcam()\n\
   Alt  Ctrl<Key>f:  fishcam()\n\
  Meta  Ctrl<Key>t:  net_showstatus()\n\
   Alt  Ctrl<Key>t:  net_showstatus()\n\
 ~Meta ~Alt ~Ctrl<Key>osfUp:  LineUp()\n\
 ~Meta ~Alt ~Ctrl<Key>osfDown:  LineDown()\n\
 ~Meta ~Alt ~Ctrl<Key>osfLeft:  ColumnLeft()\n\
 ~Meta ~Alt ~Ctrl<Key>osfRight:  ColumnRight()\n\
 ~Meta ~Alt ~Ctrl<Key>Prior:  PageUp()\n\
 ~Meta ~Alt ~Ctrl<Key>Next:  PageDown()\n\
 ~Meta ~Alt ~Ctrl<Key>osfPageUp:  PageUp()\n\
 ~Meta ~Alt ~Ctrl<Key>osfPageDown:  PageDown()\n\
 \
 None<Btn4Down>:  LineUp()LineUp()LineUp()\n\
 None<Btn5Down>:  LineDown()LineDown()LineDown()\n\
 Shift<Btn4Down>:  ColumnLeft()\n\
 Shift<Btn5Down>:  ColumnRight()\n\
 Alt<Btn4Down>:  xfeDoCommand(back)\n\
 Alt<Btn5Down>:  xfeDoCommand(forward)
    
 これで、普通に回すと上下スクロール、Shift押しながらだと左右スクロール、Ctrl押しながらだと、1ページづつ上下スクロールするようになる。

 次は、emacs。.emacsに以下の設定を書いておく。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; MouseのWheelでスクロールさせるための設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun up-slightly () (interactive) (scroll-up 5))
(defun down-slightly () (interactive) (scroll-down 5))
(global-set-key [mouse-4] 'down-slightly)
(global-set-key [mouse-5] 'up-slightly)

(defun up-one () (interactive) (scroll-up 1))
(defun down-one () (interactive) (scroll-down 1))
(global-set-key [S-mouse-4] 'down-one)
(global-set-key [S-mouse-5] 'up-one)


(defun up-a-lot () (interactive) (scroll-up))
(defun down-a-lot () (interactive) (scroll-down))
(global-set-key [C-mouse-4] 'down-a-lot)
(global-set-key [C-mouse-5] 'up-a-lot)
    
 これで、普通に回すと上下スクロール、Shift押しながらだと1行ずつ上下スクロール、Ctrl押しながらだと1ページずつ上下スクロールができるようになる。

 rxvtは、デフォルトでホイールマウスに対応しているらしく、何も設定しなくても動いてくれる。GTKも1.2からはデフォルトで対応している。


 なお、ここに書いた設定は、このサイトの情報を元にしている。

Debian雑記帳に戻る