/etc/usbd.conf に以下のような記述をしておくことで、
マウスの着脱に応じてmousedの立ち上げたり落したりすることができます。
device "Mouse"
devname "ums[0-9]+"
attach "/usr/sbin/moused -p /dev/${DEVNAME} -I /var/run/moused.${DEVNAME}.pid"
detach "kill `cat /var/run/moused.${DEVNAME}`"
Xサーバに、マウスのボタンが5つあることを教える必要があります。
これは、
/etc/XF86Config の Pointer
セクションを以下のように記述することが必要です。
Section "Pointer"
Protocol "PS/2"
Device "/dev/mouse"
Resolution 100
Buttons 5
ZAxisMapping 4 5
EndSection
/etc/XF86Configを書き換えたら、
Xサーバを起動し直す必要があります。
これで、マウスのホイールの上下動に対して、
button4 と button5
がクリックされたのと同じXのイベントが発生するようになったはずです。
発生するイベントは、xevを使って確認できます。
ButtonPress event, serial 18, synthetic NO, window 0x4c00001,
root 0x26, subw 0x0, time 2642778861, (49,133), root:(886,157),
state 0x0, button 4, same_screen YES
ButtonRelease event, serial 18, synthetic NO, window 0x4c00001,
root 0x26, subw 0x0, time 2642778861, (49,133), root:(886,157),
state 0x800, button 4, same_screen YES
ButtonPress event, serial 18, synthetic NO, window 0x4c00001,
root 0x26, subw 0x0, time 2642779077, (49,133), root:(886,157),
state 0x0, button 5, same_screen YES
ButtonRelease event, serial 18, synthetic NO, window 0x4c00001,
root 0x26, subw 0x0, time 2642779077, (49,133), root:(886,157),
state 0x1000, button 5, same_screen YES
各種アプリケーションを対応させる
早速、button4 と button5
で各種アプリケーションがスクロール動作するように設定していきましょう。
Netscape 4.72
FreeBSD の ports でインストールした場合には、そのままで対応しています。
kterm
kterm のリソースに、以下の記述を加えます。
KTerm.vt100.translations: #override\n\
<Btn4Down>:scroll-back(5)\n\
<Btn5Down>:scroll-forw(5)\n\
Shift<Key>space: begin-conversion(_JAPANESE_CONVERSION)
この色の部分はkinput2 を使う場合に、
一緒に設定するための部分です。
このscroll-back とscroll-forwというアクションの引数の5は、
5行移動するという意味です。
本来は、scroll-back(count,unit)というように、
unitを指定するのですが、unitを省略すると line
を指定した事になります。このほかのunit としては、
page,halfpage, pixelがあります。
詳細については xterm のマニュアルを参照してください。
XEmacs
xemacs のスクロールは、
.emacs で以下のような関数をglobal-mapに定義してやります。
(define-key global-map 'button4
'(lambda (&rest args)
(interactive)
(let ((curwin (selected-window)))
(select-window (car (mouse-pixel-position)))
(scroll-down 5)
(select-window curwin)
)))
(define-key global-map 'button5
'(lambda (&rest args)
(interactive)
(let ((curwin (selected-window)))
(select-window (car (mouse-pixel-position)))
(scroll-up 5)
(select-window curwin)
)))
Gtkなアプリケーション
Gtkはそのままでも GtkVScrollbarなどは button4 と button5
でスクロールするのですが、
GtkTextなどもスクロールさせようとするとそのままでは、
スクロールできません。
そこで、button press event を key press event
に変換するプログラムを導入することにします。
imwheelのインストール
imwheelは、
設定ファイルに記述することで、
ウインドウ毎に発生させるkey press eventを変えることができます。
FreeBSD の ports/x11にもありますので導入は簡単です。
ただ、
この imwheel は特に指定しないウィンドウへの button press event
まで勝手に変更してしまうので、思わぬ影響が出る恐れがあります。
そこで私は、imwheel のソースを書き換えて、 default action
を ungrabButtons()にしました。
これで、設定ファイルで特に指定したウィンドウ以外への影響は無くなります。
~/.imwheelrc の書き方については、
imwheel のマニュアルを参照してください。
ちなみに私の ~/.imwheelrc はこんな感じです。
また、/usr/X11R6/etc/imwheelrc は削除しました。
"^Message History:.*"
None, Up, Shift_L|Page_Up
None, Down, Shift_L|Page_Down
これは、gtkicq のメッセージヒストリウィンドウ用の設定です。
Yukimitsu Izawa
Last modified: Fri Jul 28 02:35:16 JST 2000