  X mouse wheel scroll
  Colas Nahaboo (colas@sophia.inria.fr)
  July 22 1999
  翻訳：川岸 良治 (kawagisi@yk.rim.or.jp)
  日本語訳：2000年11月5日

  このドキュメントは、様々なアプリケーションでホイール付きマウスを使用す
  る方法を説明しています。Colas Nahaboo X mouse wheel scroll page
  (http://www.inria.fr/koala/colas/mouse-wheel-scroll/) を翻訳したもので
  す。
  ______________________________________________________________________

  目次

  1. はじめに
  2. 原理
  3. ハードウェア
  4. X Server
     4.1 XFree 3.3.2 (と、それ以降)
     4.2 XFree 3.3.1 (および派生物 : SuSE)
     4.3 商用のサーバ

  5. gpm
  6. mhub
  7. XTerm
  8. rxvt
  9. Athena ウィジェット
  10. Netscape
  11. XEmacs
  12. Gnu Emacs
  13. TCL / TK アプリケーション
     13.1 exmh

  14. Filerunner
  15. KDE
  16. NEdit
  17. GlQuake (and Quake2)
  18. ImWheel
  19. GTK / GNOME / GIMP
  20. 呪われたアプリ (非 X, tty)
     20.1 Pine

  21. ホイールをネイティブにサポートするプログラム
  22. 動作しないプログラム
  23. X 以外、Unix 以外
  24. FAQ - よくある質問と、その答
  25. News
  26. 日本語訳について

  ______________________________________________________________________

  1.  はじめに

  このページ (http://www.inria.fr/koala/colas/mouse-wheel-scroll/) の目
  的は、新しいホイールマウス (MS intellimouse、Logitech pilot+ と
  Logitech mouseman+) を使用するためにハックされたものを全て集めることで
  す。これは本当に大きくなりました。しかし、一つの大きなページであること
  は検索や印刷がより簡単なので、私はよいことであると思います...
  【訳注：オリジナルの英語の HTML ファイルは、上記のように一つの長いペー
  ジとして表示されます。この翻訳版の文書は HTML, text, ps の各型式が存在
  しますが HTML 型式の場合 1 ページあたり 1 つのセクションとなります。】

  注：この文書に追加するコメント、提案、パッチをメールで送ってください。
  【訳注：メールは英文で書いて原作者に送ってください。翻訳に関しては「日
  本語訳について」というセクションをご覧ください】

  o  私あての Eメール： colas@sophia.inria.fr (あぁ、私は迅速にお答えす
     ることを約束できません)

  o  もっと良いのは (1999年7月から) ローカルフォーラム X Mouse Wheel WWW
     Board <http://www.inria.fr/koala/colas/mouse-wheel-scroll/wwwboard>
     にメッセージをポストすることです。他のユーザーが私より速くあなたを
     助けることができるし、また、あなたが直接情報を他のユーザーと共有す
     ることができます。 このボードは6月の初めに壊れました（メッセージを
     読むことはできるが、ポストすることができませんでした）しかし現在は
     修復されています（6月13日）。

  o  また usenetのニュースグループ comp.windows.xにメッセージをポストす
     ることもできますが、最近ではこのニュースグループはあまり読まれてい
     ません。

  このページで使われている小さいアイコンが Qbullets
  <http://www.inria.fr/koala/qbullets/>.  にあります。【訳注：これはオリ
  ジナルの英語版ホームページの場合です。この翻訳版では、アイコンはありま
  せん】

  この文書の全てのコードはパブリックドメインなので、(改変、複製等) 好き
  なように使ってください。また、この文書に掲載するコードをお送り頂いた場
  合、そのコードもパブリックドメインとなることを承知されたものとみなしま
  すので、ご了承ください。

  私は、あなたの貢献とともにあなたの名前(および、ウェブ・サイトまたは電
  子メールアドレス)も載せます。私は、ハックされたことを報告するだけで直
  接には試さないので、詳細に関して他の人達が直接あなたと連絡をとれるよう
  にするためです。あなたのことがこの文書に表示されることを望まないなら、
  その旨をお伝え下さい...

  2.  原理

  動作の原則は、Xサーバ (XFree <http://www.xfree86.org> 3.3.2 またはそれ
  以上）を使用またはインストールする必要があるということです。これは、低
  レベルのマウスに依存するホイールプロトコル（"マウス・ドライバ"）を理解
  でき、ホイールの上下の動きを偽の button4 と button5 のイベントにみせか
  けるように翻訳します。そして、この文書は既存の X アプリがこれらの
  button4 と button5 のイベントを受信したときに、スクロール・ウィンドウ
  にスクロールの動きをバインドさせるための config ファイルの変更とパッ
  チ・プログラムの全てを収集しようとしています。

   マウス        X           ボタン          ツールキット      アプリでの
   ホイール ===> サーバ ===> 4 と 5     ===> やアプリの   ===> スクロール
   の動き                    のイベント      設定ファイル

  上手に設計されたツールキットは、ホイールを理解するこのツールキット上の
  全てのアプリのリソースのどこかを設定するだけですむでしょう。しかし、生
  涯はそれほど単純ではないので、多くのレガシーな（古い、遺産の）アプリは
  手で調整しなければなりません。うまくいけば、新しい X アプリは
  StarOffice のように、ネイティブにホイールをサポートし始めるでしょう...

  私のパッチは、以下のような一貫した動作をするようにしています。できれ
  ば、あなたが提出されるパッチにも同じポリシーを採用するようにしてくださ
  い（他のポリシーで別のパッチを提出することは自由です）：

  o  スクロールは、N行（N は一般的に 5〜10）単位で動く

  o  Shift キーが押されたときは、微調整のために 1行単位で動く

  o  Ctrl キーが押されたときは、1ページ単位で動く

  3.  ハードウェア

  私が最初に見たホイール付きマウスは、Geniusマウス (Easyscroll) で事実上
  サポート無しでした (実際には最初のスクロール・マウスは、mouse systems
  の "3d mouse" であると CoreyFro <http://www.jps.net/vmac/coreyfro/> が
  私にメールしてきました)。 1 年後にマイクロソフトは、その Intellimouse
  で概念を普及させました。そして、いつものように不当競争のために使おうと
  しました (それは、MS アプリでのみ動作しました)。しかし、他のメーカ
  ー(例えば logitech) は、 Windows の全てのアプリケーションで動作する製
  品で、すぐに追いつきました。

  ここにリストされていないマウス・タイプでの成功の報告をお願いします。市
  場には多くあるようです。（私が聞いたことのあるものは： Fellows mouse,
  Kensington Thinking Mouse, Genius NetScroll, Genius NetMouse と
  NetMouse Pro, ASCII MieMouse...).

  o  Logitech の "plus" モデルは、動きます(私は、これを使っています)。コ
     ードレスも動きます。但し "OEM" バージョン(黒いロゴ付きの白いもの)
     ではないもの(下記参照)。トラックボールも動きます。 Logitech
     Mouseman+ は "Logitech Mouseman Wheel" に名前が変わった点に注意して
     ください。

  o  Microsoft Intellimouse は、動きます。

  o  IBM scrollpoint マウス(ラップトップ上の touchpoint)は動くことが
     John Fulmer から報告されています。

  o  Mitsumi Mouse は XF86Config の IntelliMouse の設定が必要です。
     Thorsten Schnier <http://www.arch.usyd.edu.au/~thorsten/>

  o  Genius EasyScroll. 古いモデルは動作しません。これは MS が殺した
     5ビットのプロトコルを使っています。 Martin Brunner
     <http://members.xoom.com/flexman/index.html>

  o  Primax Navigator mouse <http://www.primax.nl/> (シリアルモード。
     Johnathan Swan <http://www.jswan.demon.co.uk/> からの報告)しかし、
     注意！ PS/2モードでは動かないようだ！と Thomas Heier は、報告してい
     ます。

  o  Arnd Bergmann は、Knopex Wineasy 4Dマウスのプロトコルを理解する
     imwheel と gpm のパッチ <http://www.et.fh-
     osnabrueck.de/~std7652/4d-mouse/> を作りました(このマウスには、3つ
     のボタンと2つのホイールがあり、一つは水平方向で一つは垂直方向のスク
     ロール用です)。しかし、X 用のパッチはありません。 (X は 5つのボタン
     のみサポートしています。解決策は水平ホイールの modifiers(修飾子)
     を、 meta-button-4 & 5 のようにごまかすことです)

  o  boeder Sm@artMouse Pro
     <http://195.185.187.227/d/k_prodshow.asp?artnr=65418> は
     intellimouse の config で動作します。第二のホイールは、第一と反対の
     方向で動きます(Frank Weisからの情報)。

  報告された失敗 (このハードウェアを買ってはいけない)

  o  Logitech FirstMouse+ (またはある国、例えばドイツでは  PilotMouse+)
     の OEM バージョンで、トップの上に黒いロゴをもつもの。最も正確な情報
     が FUJISHIMA Satsuki から私に下記の電子メールで報告されました：

  私は先日『M-S48 マウスは、X の上で動作します』と電子メールを
  出しました。私は、これが不正確であることを知り悲しいです。し
  かし、私はこれより少し正しい情報を入手しました − M-S48 と印
  刷されたマウスには 2つのタイプがあります。片方は動作しますが
  他方は動きません。つまり私がこれまでに見たロジテック First-
  Mouse+ には３つのタイプがあるのです。ロゴに色が付いている
  「箱入り」バージョン、ロゴ無しの「バルク」バージョン、ロゴが
  モノクロの 'OEM' バージョンです。

  最初のものは動作します。これは 'MODEL: M-C48' と印刷されてい
  ます。全ての文字は直接そのボディにモールドされています。しか
  し、S/N と P/N はステッカーに印刷されています。ボディに色の
  ついた Logitech ロゴがあります。私はこれを 1997年12月に買い
  ました。

  二番目も動作します。'MODEL: M-S48' と印刷されています。全て
  の文字は、ステッカーに印刷されています。ロゴは無くて、ボディ
  は黒く塗られています。私は 1998年9月にこれを買いました。

  最後は、現在実行不可能なものです。'MODEL: M-S48 OEM' と印刷
  されています。全ての文字は、ステッカーに印刷されています。白
  いボディにモノクロのロゴがあります。『実行不可能』なので、私
  の友人は私にこれを貸してくれました！ 彼はこれを1999年2月に買
  いました。

  私は各マウスのパッケージを開けて発見しました： 3つとも異なる
  ロジックボードを持っています。そして、抵抗の種類と数が異なり
  ます。動作する 2 つは Logitec のコントローラチップで、動作し
  ないものは Zilog のチップでした。(私がデジタル・カメラを持っ
  ていれば、容易にあなたを理解させることができるでしょう)。

  要約：3種類のロジテック FirstMouse+ があります。悪い選択は箱
  入りでリテール(小売)の 'MODEL: M-C48' は良い選択です。

  LOGITECH のマウスは、カラーロゴのものだけを買いましょう

  注：サツキは後日私にそれを郵送しました。そして、これらのマウスは
  FreeBSD の "moused" デーモンによって認識されています。だから、将来それ
  らを認識するように XFree が作られることが期待できます。

  注：3つボタンのホイールマウスが HP から 'C4736-60101' として発売されて
  います。(トップに黒い HP ロゴ、底面に HP part no. があるステッカーとモ
  デル名 'M-S 48') これは Zilog チップによる実行不可能な Logitech M-S48
  OEM の変種です。 (Martin Kroeker からの情報）

  o  Kensington Scroll Mouse-in-a-Box, Chris Grossmann
     <http://www.tunl.duke.edu/~grossman/> による報告。

  私は、標準の3-ボタン・マウスとしても、または新しいホイールプロトコルで
  実行することもできるマウスを入手されることを強く勧めます。それは、非 X
  アプリまたは非 Microsoft OS の下での生活を非常に容易にします。Logitech
  のマウスは、この機能を持っていますが MicroSoft のマウスにはありませ
  ん。私はそれ以外は知りません(あなたがご存知なら、私にメールを下さい)。
  MS Windows では MicroSoft のマウスは、MicroSoft アプリでのみ働いていま
  した！(彼らは、つい最近、新しいドライバで全てのアプリをサポートするよ
  うになったばかりです)。可能ならシリアルのものより PS/2 バージョンを使
  うようにしてください。 PS/2 プロトコルは、より速いレートでマウスをサン
  プリングするので、より良いレスポンスが得られます。

  4.  X Server

  4.1.  XFree 3.3.2 (と、それ以降)

  XFree 3.3.2 は、生まれつき多くのマウスホイールデバイスをサポートしてい
  ます。 XFree 3.3.2 の配布物の中のドキュメント・ファイル README.mouse
  <http://www.inria.fr/koala/colas/mouse-wheel-scroll/README.mouse> を見
  てください。そのサポートは極めて完全で、カスタマイズ可能です。それはあ
  る種のマウス (例えば logitech MouseMan+) の第4のボタン (横の親指ボタ
  ン)もサポートしています。ですから少なくとも XFree 3.3.2 にアップグレー
  ドすることは、推奨される解決方法です。通常、必要なことの全ては
  XF86Config で bindtag を宣言し、Pointer セクションに以下の行を付け加え
  ることです：

      ZAxisMapping 4 5

  我々は、ホイールを Z 軸(axis)として使う代わりに、ボタンに割り当てま
  す。ボタンは、再コンパイルしたりアプリケーションやツールキットにパッチ
  を当てなくても、リソースを変更するだけでそれをサポートする唯一の方法だ
  からです。 4ボタンマウスを持っていて、第4ボタンを使いたいなら、ホイー
  ル用に直接 5 と 6 を使うのではなく、このページのリソースを使うことがで
  きるように button6 に button4 を再度割り当てることを勧めます。あぁ、X
  は公式には 5 つのボタンしかサポートしていません(従って Xt と Motif ア
  プリではボタン 6 を使うことができない)、だからアプリケーションに依存す
  る横のボタンは、もう使わないでください。そして、X サーバはこの方法はで
  きないようなので、横のボタンを使うことはまったたくお勧めできません。上
  記の場合は "Protocol imps/2" と "ZAxisMapping 4 5" を使ってください。
  第6のボタンを使いなら、以下のコマンドで横のボタンを button6 に再度割り
  当てることができます：

  xmodmap -e "pointer = 1 2 3 6 4 5"

  このコマンドは、その初期化プロセスのために、対話的にボタンを押したり離
  したりするよう促すかもしれない点に注意してください。そこで私は X のス
  タートアップ・スクリプトで以下のコードを使います：

  ## rebind mouse buttons for mouseman+
  echo '#!/bin/sh
  xmodmap -e "pointer = 1 2 3 6 4 5"' >/tmp/x$$
  chmod a+x /tmp/x$$
  xterm -bg pink2 -fg blue4 -fn 9x15 -name "Pointer Remap" -e /tmp/x$$
  rm -f /tmp/x$$

  そして XF86Config ファイルで以下のプロトコルのどれか一つを使う必要があ
  ります：

    Section "Pointer"
        Protocol "imps/2"            # for ps/2 wheel mouse
        Protocol "intellimouse"      # for serial wheel mouse
        Protocol "MouseManPlusPS/2"
        ... see the Xfree docs

  警告！  X Config ファイルに Emulate3Buttons が定義されていると、これら
  のパッチまたはサーバは動作しません。

  4.2.  XFree 3.3.1 (および派生物 : SuSE)

  3.3.2 またはそれ以上にアップグレードする必要があります。下記の行は参考
  のためにのみここに載せます。
  o  Tim Goodwin (Cygnus) による gpm と XFree サーバ へのパッチ:
     mouse.shar は、 ftp.cygnus.co.uk://people/tgoodwin/
     <ftp://ftp.cygnus.co.uk/people/tgoodwin/> または、ローカルコピー
     <http://www.inria.fr/koala/colas/mouse-wheel-scroll/mouse.shar> か
     ら入手できます。 これは XFree 3.3.1 のソースを入手しコンパイルする
     必要があります。そんなにトリッキーではありませんが X のコンパイルシ
     ステム(imake) についてよく知っていると役立ちます。

  o  コンパイル済みの XFree サーバ： 私はこれらのパッチを入れた
     XF86_SVGA v3.3.1 を作りました。 ftp://koala.inria.fr/pub/linux/
     <ftp://koala.inria.fr/pub/linux/> の
     XF86_SVGA_331_mousewheelpatched.gz
     <ftp://koala.inria.fr/pub/linux/XF86_SVGA_331_mousewheelpatched.gz>
     から入手できます。 Alejandro Guerrieri S3Virge 用にコンパイルされた
     バージョン。圧縮された linux バイナリ
     <ftp://koala.inria.fr/pub/linux/XF86_S3V_mousewheelpatched.gz> を入
     手できます。 readme
     <ftp://koala.inria.fr/pub/linux/XF86_S3V_mousewheelpatched.txt> を
     ご覧下さい。また Olivier Dalle
     <http://www.inria.fr/sloop/personnel/Olivier.Dalle/> によってコンパ
     イルされた version for S3
     <ftp://koala.inria.fr/pub/linux/XF86_S3_mousewheelpatched.gz> もあ
     ります。

  o   SUSE X servers <http://www.suse.de/XSuSE/XSuSE_E.html> 既に、この
     パッチが組み込まれています。

  標準の XFree v3.3.1 サーバは、シリアル MS マウスでのみ動作します。上記
  の解決策はMS のシリアルおよび PS/2 バージョンと、 Logitech マウスで動
  作します。

  XF86Config ファイルで以下のどれか一つのプロトコルを使用する必要があり
  ます：

    Section "Pointer"
        Protocol "imps/2"            # for ps/2 wheel mouse
        Protocol "intellimouse"      # for serial wheel mouse

  注意！ これらのパッチまたはサーバは、X Config ファイル (XF86Config)で
  Emulate3Buttons が定義されていると動作しません！ [症状]: ホイールから
  は、ボタン 1, 2, 3 用のシグナルしか送出されません。 [理由]:
  Enulate3Buttons は複雑な仕組みで書かれていて、3 つ以上のボタンを扱うに
  は、再設計する必要があるためです。 [解決策]: Emulate3Buttons の行が存
  在する場合は、コメントにします。

  4.3.  商用のサーバ

  AcceleratedX (X-Inside <http://www.xig.com>): Michael Welsh Duggan  は
  これでカーネルを再コンパイルするための
  /usr/src/linux/drivers/char/psaux.c のパッチ
  <http://www.epita.fr:8000/~epx/projets/index.html> を作成しました。ロ
  ーカルコピー <http://www.inria.fr/koala/colas/mouse-wheel-
  scroll/psaux.c-with-INTELLIMOUSE-ps2> もあります。

  Metro Link <http://www.metrolink.com> : 1998年6月から Microsoft
  Intellimouse をサポートしています (しかし Logitech はまだ?)。

  5.  gpm

  gpm 1.13 にイベントをデコードさせることができます、以下のコマンドのど
  れか一つによるgpmで作成された擬似デバイス /dev/gpmdata (/dev/ttyS0 ま
  たは dev/tty/psauxの代わり)の出力で処理されたイベントを X に読み込ませ
  ることもできます。

  gpm -t pnp -R
  gpm -t ms3 -R

  (Olivier SIMON <Olivier.Simon@Capway.com> による tip)

  6.  mhub

  Marcus Sundberg <http://www.stacken.kth.se/~mackan> は次のように書いて
  います： GGI project <http://www.ggi-project.org/> (http://www.ggi-
  project.org/) の LibGII に mhub と呼ばれるユーティリティがありま
  す。mhub は シリアルと PS/2 MouseMan+ (および他の多くのマウス)の何れか
  らのマウスデータも読むことができて、かつシリアル IntelliMouse,
  MouseSystems または PS/2 フォーマットで出力することができます。

  PS/2 ポート上に MouseMan+ があるなら、たぶん XFree サーバで mhub も使
  いたいと思うでしょう。なぜなら XFree (3.3.3.1 までの全てのバージョン)
  は、ホイールデータを間違って分析するからです。これはホイールを高速に回
  したときに分かります---方向が逆になり、アプリケーションは後ろ向きにス
  クロールします。 IntelliMouse のデータなら正しく解釈されるのです
  が、MouseMan+ はダメです。そうした場合、mhub は役に立ちます。

  7.  XTerm

  ホイールはセーブされている出力行をスクロールします。以下の行を
  /.Xdefaults に追加して下さい。

  !# Scrolling on wheel mouse: half a page normally, line per line with shift
  XTerm.vt100.translations: #override\n\
   Shift<Btn4Down>,<Btn4Up>:scroll-back(1,line)\n\
   Shift<Btn5Down>,<Btn5Up>:scroll-forw(1,line)\n\
   Ctrl<Btn4Down>,<Btn4Up>:scroll-back(1,page)\n\
   Ctrl<Btn5Down>,<Btn5Up>:scroll-forw(1,page)\n\
   <Btn4Down>,<Btn4Up>:scroll-back(1,halfpage)\n\
   <Btn5Down>,<Btn5Up>:scroll-forw(1,halfpage)\n\

  !# In the scrollbar we map buttons 5 & 4 to 1 and 2 otherwise, core dump
  !# This will move proportionnaly to cursor position but we dont know how to
  !# program the same exact behavior as in the text widget.
  XTerm.vt100.Scrollbar.translations: #override\n\
       <Btn5Down>: StartScroll(Forward)\n\
       <Btn4Down>: StartScroll(Backward)\n\

  8.  rxvt

  rxvt <http://babayaga.math.fu-berlin.de/~rxvt/> は、 xterm の置き換わ
  るものですが、バージョン 2.4.6 からホイールマウスをサポートしていま
  す。リソースファイルの調整は不要です。

  9.  Athena ウィジェット

  Athena をベースにした全てのアプリケーションで使用できます。下記を
  /.Xdefaults に追加して下さい。
  !## Athena text widgets
  *Paned.Text.translations: #override\n\
   Shift<Btn4Down>,<Btn4Up>: scroll-one-line-down()\n\
   Shift<Btn5Down>,<Btn5Up>: scroll-one-line-up()\n\
   Ctrl<Btn4Down>,<Btn4Up>: previous-page()\n\
   Ctrl<Btn5Down>,<Btn5Up>: next-page()\n\
   None<Btn4Down>,<Btn4Up>:scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()\n\
   None<Btn5Down>,<Btn5Up>:scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()\n\

  xrn, xmh 用の大変便利なハックです： 特定の "Table Of Contents" (TOC)
  ウィジェットにスクロール機能を追加します。

  !## Athena table of contents, for toc widgets of xrn & xmh
  *toc.Translations: #override\n\
   Shift<Btn4Down>,<Btn4Up>: scroll-one-line-down()\n\
   Shift<Btn5Down>,<Btn5Up>: scroll-one-line-up()\n\
   Ctrl<Btn4Down>,<Btn4Up>: previous-page()\n\
   Ctrl<Btn5Down>,<Btn5Up>: next-page()\n\
   None<Btn4Down>,<Btn4Up>:scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()scroll-one-line-down()\n\
   None<Btn5Down>,<Btn5Up>:scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()scroll-one-line-up()\n\

  10.  Netscape

  全ての Netscape バージョンで動作するはずです。私は 2.02, 3.01, 4.02,
  4.04, 4.05, 4.5 でテストしました。私自身と Sergey V. Kovalyov と
  Alexey Solovyov が試した後で 1998年6月11日に Alexey Marinichev がコン
  トリビュート（貢献）しました。
   /.Xdefaults に以下を追加します:

  !## NETSCAPE
  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\
          Ctrl<Btn4Down>: PageUp()\n\
          Ctrl<Btn5Down>: PageDown()\n\
          Shift<Btn4Down>: LineUp()\n\
          Shift<Btn5Down>: LineDown()\n\
           None<Btn4Down>: LineUp()LineUp()LineUp()LineUp()LineUp()LineUp()\n\
           None<Btn5Down>: LineDown()LineDown()LineDown()LineDown()LineDown()LineDown()\n\
          Alt<Btn4Down>: xfeDoCommand(forward)\n\
          Alt<Btn5Down>: xfeDoCommand(back)\n

  Netscape*globalNonTextTranslations: #override\n\
   Shift<Btn4Down>: LineUp()\n\
   Shift<Btn5Down>: LineDown()\n\
   None<Btn4Down>:LineUp()LineUp()LineUp()LineUp()LineUp()LineUp()\n\
   None<Btn5Down>:LineDown()LineDown()LineDown()LineDown()LineDown()LineDown()\n\
   Alt<Btn4Down>: xfeDoCommand(forward)\n\
   Alt<Btn5Down>: xfeDoCommand(back)\n

  上記は、ALT キーを押すと Netscape のウィンドウ1ページ全てをスクロール
  する機能も追加します。そうしたくないなら、各セクションの最後の 2行
  (Alt<Btn><Down>) を削除するだけです。数字キーでのスクロールを有効にし
  たい場合は、上記の下に以下の 6行を追加してください：

   <Key>KP_9: PageUp()\n\
   <Key>KP_3: PageDown()\n\
   <Key>KP_8: LineUp()\n\
   <Key>KP_2: LineDown()\n\
   <Key>KP_4: ColumnLeft()\n\
   <Key>KP_6: ColumnRight()\n

  追伸： Alexey MarinichevWilliam M. Perryによる関連しないハック : 私は
  これが本当にすごいことがわかりました (フレームだけに適用されるのではな
  い)： Btn3 エントリを下記と置き換えます：

          <Btn3Down>: \n\
          <Btn3Down>,<Btn3Up>: xfeDoCommand(back)\n\
          <Btn3Down>,<Btn3Motion>: xfeDoPopup()\n\

  すると、右ボタン・クリックでバックし、クリックとドラッグでメニューが表
  示されます。注意： フレームをスクロールするには最初にその内側をクリッ
  クする必要があります。そうしないと Netscape はあなたがスクロールできる
  ことを知っているようには見えません(言い換えれば：ポインタ位置を判断す
  るには鈍すぎます)。

  11.  XEmacs

  通常は、 William M. Perry の mwheel.el
  <ftp://ftp.cs.indiana.edu/pub/elisp/mwheel.el> emacs パッケージを使う
  べきです。しかし、このリンクを動かす前に mwheel.el のベータ版
  <http://www.inria.fr/koala/colas/mouse-wheel-scroll/mwheel.el> (Feb 23
  1998) のローカルコピー、または下記の私が作成した未完成のコードを使うこ
  ともできます。

  .el ファイル (デフォルトは  /.emacs) にどれか一つを加えてください。

  ;;=============================================================================
  ;;                    scroll on  mouse wheel
  ;;=============================================================================

  ;; scroll on wheel of mouses
  (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 [(shift button4)]
    '(lambda (&rest args)
      (interactive)
      (let ((curwin (selected-window)))
        (select-window (car (mouse-pixel-position)))
        (scroll-down 1)
        (select-window curwin)
  )))
  (define-key global-map [(control button4)]
    '(lambda (&rest args)
      (interactive)
      (let ((curwin (selected-window)))
        (select-window (car (mouse-pixel-position)))
        (scroll-down)
        (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)
  )))
  (define-key global-map [(shift button5)]
    '(lambda (&rest args)
      (interactive)
      (let ((curwin (selected-window)))
        (select-window (car (mouse-pixel-position)))
        (scroll-up 1)
        (select-window curwin)
  )))
  (define-key global-map [(control button5)]
    '(lambda (&rest args)
      (interactive)
      (let ((curwin (selected-window)))
        (select-window (car (mouse-pixel-position)))
        (scroll-up)
        (select-window curwin)
  )))

  そして関連する話題として、数字キーで XEmacs のナビゲートをする以下のコ
  ードも使用できます。

  ;;=============================================================================
  ;;                    scroll on numpad
  ;;=============================================================================

  (define-key global-map 'kp_9 'scroll-down)
  (define-key global-map 'kp_3 'scroll-up)
  (define-key global-map 'kp_6
    '(lambda (&rest args) (interactive)  (other-window 1)))
  (define-key global-map 'kp_4
    '(lambda (&rest args) (interactive)  (other-window -1)))
  (define-key global-map 'kp_2
    '(lambda (&rest args) (interactive)  (scroll-up 1)))
  (define-key global-map 'kp_8
    '(lambda (&rest args) (interactive) (scroll-down 1)))
  (define-key global-map 'kp_7 'beginning-of-buffer)
  (define-key global-map 'kp_1 'end-of-buffer)
  (define-key global-map 'kp_5
    '(lambda (&rest args) (interactive)  (recenter 0)))

  12.  Gnu Emacs

  普通は XEmacs の場合と同様に mwheel.el
  <ftp://ftp.cs.indiana.edu/pub/elisp/mwheel.el> emacs パッケージを使う
  べきです。 ``XEmacs のセクション''をご覧ください。一方 、下記の仮の
  Elisp を使用することができます。 Sylvia Knight
  <http://www.cl.cam.ac.uk/~sfk1000/>, Sylvia.Knight@cl.cam.ac.uk の好意
  により---1998年2月2日に送られてきました:

  (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)

  上記のように5行だけではなく、半ページぶんスクロールさせたい場合は、
  John Rowe が送ってくれた下記の GNU Emacs コードがあります。

  (defun scroll-up-half ()
    "Scroll up half a page."
    (interactive)
    (scroll-up (/ (window-height) 2))
  )

  (defun scroll-down-half ()
    "Scroll down half a page."
    (interactive)
    (scroll-down (/ (window-height) 2))
  )
  (global-set-key [(mouse-5)] 'scroll-up-half)
  (global-set-key [(mouse-4)] 'scroll-down-half)

  13.  TCL / TK アプリケーション

  Bruce Stephens からの情報： このコードをファイル、例えば
  /.mscroll.tcl の中に入れます。そしてこれを source  /.mscroll.tcl とし
  て tcl アプリケーションの中でインクルードします。

  proc mscroll {bindtag} {
      bind $bindtag <Button-5> [list %W yview scroll 5 units]
      bind $bindtag <Button-4> [list %W yview scroll -5 units]
      bind $bindtag <Shift-Button-5> [list %W yview scroll 1 units]
      bind $bindtag <Shift-Button-4> [list %W yview scroll -1 units]
      bind $bindtag <Control-Button-5> [list %W yview scroll 1 pages]
      bind $bindtag <Control-Button-4> [list %W yview scroll -1 pages]
  }

  そして、新しく定義する関数へのパラメータとして、それらを与えることに
  よって、希望するウィジェット上でバインディングを宣言します。例えば
  TkMan の最後に下記を追加します。

  source ~/.mscroll.tcl
  mscroll Text

  13.1.  exmh

  exmh では、 /.tk/exmh/user.tcl の中で次のようにします：

  source ~/.mscroll.tcl
  proc User_Init {} {
      mscroll TScroll
  }
  proc User_Layout {} {
      mscroll .ftoc.t
  }

  次にログウィンドウのTcl のプロンプトで以下のコマンドを入力する必要があ
  ります (menu Pref/Hack support/)。

  auto_mkindex .tk/exmh/

  そして exmh を再起動してください。

  14.  Filerunner

  Filerunner <http://www.cd.chalmers.se/~hch/filerunner.html> は、バー
  ジョン 2.4.1 からはネーティブにホイールマウスをサポートしています。私
  の filerunner 2.4 へのパッチ <http://www.inria.fr/koala/colas/mouse-
  wheel-scroll/filerunner-patches.txt> の履歴情報を置きました。これらは
  filerunner 2.3 でも動作するはずです。

  (Filerunner は、私がこれまでに見た Windows, Amiga,Macintosh のファイル
  マネージャの中では最高のものであるというのが私の評価です。試してみてく
  ださい！)

  15.  KDE

  ホイールをサポートしています(beta 4)。 jamus jegier に感謝します。 KDE
  credits <http://www.kde.org/credits.html> をご覧ください。 これらの
  パッチは Felix Ide が最初に私にメールで送ってくれました。 KDE Beta4 へ
  のパッチ <http://www.inria.fr/koala/colas/mouse-wheel-
  scroll/KDEbeta4-mousewheel.patch> のローカルコピーを入手できます。しか
  し、それはもう既に主要なディストリビューションの一部として配布されてい
  るでしょうから、通常はわざわざダウンロードする必要はないでしょう。

  注意： KDE はデフォルトでは xrdb を使うように設定されているようです。
  従って  /.Xdefaults と app-default ファイルの読み込みを無効にします。
  必ず、 xrdb -remove をコールしてこれを削除してください。

  実際には上に言明したほど明白ではないと Joe Votour は私にメールで以下の
  ように言ってます (1999年2月3日)：

       KDE 1.1pre1 は (あなたのページにリストされている) IMWheel プ
       ログラムを使えばホイールマウスをサポートします。私はこの情報
       を KDE のウェブサイトにある KDE documentation/FAQ から入手し
       ました。作者によると Qt がホイールマウスのサポートした時点
       (これはバージョン 2.0 になると思います)で KDE はネーティブな
       サポートを統合するでしょう。 XFree86 ZAxisMapping 機能
       は、(あなたのページにあるように) xrdb -remove を実行する場合
       のみ使用することができます。しかし、これは KDE ではないプロ
       グラムにおける全ての KDE の機能(KDE1.1 は非 KDE プログラム、
       例えば Netscape が KDE のルック & フィールを持つようにしま
       す)を無効にします。また、スタートアップ時にそれを無効にする
       方法がないことが分かった(Autostart フォルダに置いたスクリプ
       トは使ったが、動いているようには見えません)ので、 xrdb は
       KDE のセッションが開始する前に実行する必要があります。要約す
       ると -- IMWheel プログラムを使いましょう、そうすれば問題は解
       決します。

  しかし、私は Jamus Jegier <http://jamus.home.ml.org/info> からパッチの
  状態を詳しく述べた Eメールも受け取りました：

       KDE 用の私のパッチについて詳しく述べたいと思います。これは古
       いニュースですが、これをクリアしたいと思いました。私のパッチ
       はホイール機能を追加しませんでした。それは、3個以上のボタン
       を持つどんなマウスも役に立たなくするバグを修正するはずでし
       た。問題を起こしたコードは、左利きのマウスボタンの設定でし
       た。擬似コードは下記のようなものに見えました：

       struct mousestuff;
       if mouse_buttons=2 do ... if mouse_buttons=3 do ...
       set_mouse(mousestuff)
       このようにマウスが 2 つまたはボタンが無いなら、mousestuff は
       未定義状態です。X Window System はホイールマウスを 5 ボタン
       のマウスとして見るのでマウスの設定は台無しにしてしまい、マウ
       スを役に立たなくします。私はこれがクリアされることを望みま
       す。
       jamus

  また Qt2.0 では、マウスホイールをネイティブにサポートするよう計画中の
  ようですが、kvt の KDE 1.1 に含まれるバージョンでは、すでにマウスホイ
  ールのサポートがコードに折り込み済みですので、そのまま使えます。

  【訳注：2000年9月 Qt2.2 が公開されました】

  16.  NEdit

  Chuck Homic と、 Tim B. Laursen と Tobias Winterhalter による。:

  !# NEdit
  NEdit*text.Translations: #override\n\
          Shift<Btn4Down>,<Btn4Up>: scroll_up(1)\n\
          Shift<Btn5Down>,<Btn5Up>: scroll_down(1)\n\
          Ctrl<Btn4Down>,<Btn4Up>: previous_page()\n\
          Ctrl<Btn5Down>,<Btn5Up>: next_page(1)\n\
          <Btn4Down>,<Btn4Up>: scroll_up(3)\n\
          <Btn5Down>,<Btn5Up>: scroll_down(3)\n

  私は一度に 3行スクロールするのが好きですが、上記の 3 をそれ以外に変更
  できます。これを .Xdefaults または .nedit に置くことができます。
  -Chuck
  注意： ヘルプウィンドウでは、スクロールできません。
  - Tim

  17.  GlQuake (and Quake2)

  Linux 上の Glquake は svgalib を使用します。バージョン1.3.0 からのみホ
  イールマウスをサポートします。sunsite からダウンロードできます。 (バイ
  ナリ
  <ftp://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.libc5.bin.tar.gz>
  またはソース
  <ftp://sunsite.unc.edu/pub/Linux/libs/graphics/svgalib-1.3.0.tar.gz>
  の何れも。一方、古い svgalib バージョンを qkHack Library <http://www-
  hmw.caribel.pisa.it/fxmesa/fxqkhack.html> でハックすることもできます。
  これは X で libsvga をエミュレートし、 (Quake 1 と IIで)とてもうまく動
  作します！)

  私は、さらにホイールがキーコード送信するように qkHackLib をハックしま
  した (mouseman+ logitech 4ボタンマウスで、上が "i"、下が"j"、親指ボタ
  ンで"k")。このバージョンをローカルに入手できます： qkHackLib-
  v0.5-colas.tgz <http://www.inria.fr/koala/colas/mouse-wheel-
  scroll/qkHackLib-v0.5-colas.tgz> .

  18.  ImWheel

  IMWheel <http://solaris1.mysolution.com/~jcatki/imwheel/> は、ホイール
  マウスをサポートしていない古いプログラムをサポートする急場しのぎのハッ
  クです。しかし、スクロールするためのキーボードアクセラレータを理解しま
  す。これは単に、マウスボタンの押下をキーの押下に変換します。しかし、
  ウィンドウのクラスと名前によって設定可能な素敵な機能があります。

  19.  GTK / GNOME / GIMP

  GTK+ 1.2.x バージョンはマウスホイールをサポートしています！

  20.  呪われたアプリ (非 X, tty)

  20.1.  Pine

  Roy Stogner による：

  マウスホイールを X ではないアプリで使用するために、特定のアプリを起動
  し、そのアプリ専用にリソースを使うように xterm を設定することができま
  す。例えば私は、ほとんどのウィンドウ化されたメールリーダよりも pine が
  好きなので .Xdefaults には以下のようなものが含まれています。

  !# There are non-ascii characters here; sorry if it messes with your
  !# mail reader

  pine*vt100.translations: #override\n\
   Shift<Btn4Down>,<Btn4Up>:string("^[OA")\n\
   Shift<Btn5Down>,<Btn5Up>:string("^[OB")\n\
   Ctrl<Btn4Down>,<Btn4Up>:string("^[OA^[OA^[OA^[OA^[OA")\n\
   Ctrl<Btn5Down>,<Btn5Up>:string("^[OB^[OB^[OB^[OB^[OB")\n\
   <Btn4Down>,<Btn4Up>: string("^[OA")\n\
   <Btn5Down>,<Btn5Up>: string("^[OB")\n\

  注意： ^[ は一つの ASCII 印刷不可文字 "escape" に置き換える必要があり
  ます。

  xterm での "string()" の動作は、与えられた文字を実行中のアプリにタイプ
  します。そして括弧の中の ASCII ではないものは上下矢印キーのコードで
  す。これらは、例えば vi では "Ctrl-V, 下矢印キー" で入力できます。

  次に "xterm -name pine -title Pine -e pine" と入力すると pine  固有の
  リソースに従った xterm の中で pine が起動します。

  21.  ホイールをネイティブにサポートするプログラム

  Star Office <http://www.stardivision.com/> は、印象的な Linux (および
  他の OS) 用のオフィススイートで、個人使用は無料です。バージョン 5.0 で
  ホイールをサポートしました。最初のバージョンはスクロールが逆方向なの
  で、最初のバージョン用のパッチも入手するよう注意してください！

  22.  動作しないプログラム

  これらには、ソースにパッチをあてる必要があります。これらにパッチをあ
  て、そのパッチを私にメールで送ってください。あるいは、もっと良いのは作
  者にパッチをあてるように要求する、またはパッチを彼に送って将来のリリー
  スに取り込むよう要求してください！ 別の解決策は前出の： ``ImWhell'' を
  使うことです...

  o  svgalib

  アップデートされるもの： 下記のソフトウェアは将来ホイールのサポートが
  実装されるはずです：

  o   xforms <http://bragg.phys.uwm.edu/xforms> の作者 T.C. Zhao は
     199年3月7日に言いました：「ホイールマウスは次のバージョンで多少はサ
     ポートされます」

  o   The JX toolkit <http://www.its.caltech.edu/~jafl/jx/> は、サポート
     を追加中です。

  23.  X 以外、Unix 以外

  興味のある方へ：

  o   Buzzkill's mouse-wheel world <http://buzzkill.stomped.com/> は PC
     ゲームを重点的に扱っています。

  24.  FAQ - よくある質問と、その答

  Q - KDE が動作しないように見えます

  A - 分かりません。私自身は KDE をまだ使ったことがありません。 KDE の
  フォーラムやニュースグループで質問してください(そして確実な回答が得ら
  れたら私に教えてください)。

  Q - ある種のWindows アプリのように、ボタンを押したままにしてマウスのス
  クロールを動かす「パンニング」をしたいのですが。

  A - これはツールキットで実装されているものより高度な動きですね。この文
  書には解決策はありませんが、この機能はツールキット (TCL+TK)、またはこ
  れをそれ自身に実装しているプログラム (Idraw, spreadsheets...  のような
  ドロー系のプログラム) で見つけることができます。

  Q - このマウス／トラックボール／ポインタは動作しますか？

  A - 最初のステップは、X サーバ (XFree またはその他)でホイールをサポー
  トすることです。もしそれがサポートされていない場合は、私は援助すること
  ができません。

  Q - 少し前にあなたにメールを出したのに返事がこないのですが？

  A - 私はやるべき事が沢山あります。そして、私は「バッチ」によってメール
  を処理する傾向があります。私は全てのホイールマウスに関連したメールを一
  度に読んで返事を出すことがよくあるでしょう。バッチの間、少なくても一ヶ
  月は待つことになるでしょう :-( 迅速なレスポンスをお望みなら、 X Mouse
  Wheel WWW Board <http://www.inria.fr/koala/colas/mouse-wheel-
  scroll/wwwboard> のローカルフォーラムを使ってみてください。

  Q - button2 以外に、横側にある「親指」ボタンを使いたい。または 4 つあ
  るいは、それ以上のボタンを持つマウスを使いたい。

  A - これは困難だと思います。X プロトコルは 5 つのボタンのみサポートし
  ているという事実と、xmodmap は 2 つの物理的なボタンを同じ論理値に再割
  り当てすることを許可していないからです。従って、私にはこの解決策があり
  ません。最もよいのは(そして水平ホイールの使用も許可する)、 X サーバが
  ボタンイベントではなく、ホイールイベントでキーボードのふりをしたイベン
  トを送信するようにすべきです。 XFree にこれが追加されると良いですね。

  25.  News

  注：このページ(訳注：オリジナルの英語のホームページのこと)が更新された
  ことをメールで知らせて欲しい方は、フリー・ウェブページ・モニタリング・
  サービス NetMind URL-Minder <http://www.netmind.com/URL-
  minder/new/register.html> を利用されることをお勧めします。

  変更履歴：

  o   1999年7月22日 BBS システム

  o  私の遅い反応を補正するために :-) X Mouse Wheel WWW Board
     <http://www.inria.fr/koala/colas/mouse-wheel-scroll/wwwboard> ロー
     カルフォーラムを作成

  o  ページに色々追加 (バックログされたメールを読んで)

  o   1999年4月21日 追加するための時間が無かった様々な情報

  o   GTK 1.2 サポート

  o  マウスをいくつか追加

  o   1999年3月29日

  o  Alexei V. Barantsev による XEmacs コードの修正 (`mouse-position' の
     代わりに `mouse-pixel-position')

  o  Knopex Wineasy 4D 用の Arnd Bergmann による imwheel と gpm へのパッ
     チ

  o   ``mhub'' の情報を追加

  o   1999年2月21日

  o  FUJISHIMA Satsuki による、どの logitech マウスが動くかという正確な
     情報

  o   1999年2月3日

  o   Joe Votour による正確な KDE のステータス

  o   Asmo Saarikoski が、OEM の logitech は動作するはずと報告

  o   GTK フロントのニュース

  o   Roy Stogner による新しい ``Curses'' セクションでの pine のハック

  o   Primax Navigator マウスをリストアップ

  o   1999年1月9日

  o  ハードウェアのセクションで、どのマウスが動かないかのリストを開始。
     OEM logitech

  o

  o   ネーティブにホイールをサポートするプログラム用に、新しく
     ``Native'' サポートのセクションを作成

  o   1998年10月9日

  o  ハードウェア情報を ``Hardware section'' に分離

  o   1998年9月8日

  o   (空の) GTK セクションを開始

  o   1998年9月3日

  o  この文書は W3C HTML Validation Service <http://validator.w3.org>
     に(HTML 3.2 で)パスしました

  o  書き換えと説明を少し

  o   Exmh セクション完了

  o   1998年8月28日

  o  ``ImWhell'' のセクションを追加

  o   1998年8月18日

  o   ``rxvt'' のセクションを追加 (Rauf Gungor に感謝)

  o   ``glquake'' セクションにある qkHacklib のパッチへのリンクを更新

  o   1998年8月12日

  o   Netscape セクション: ALT を追加してフルページのスクロール

  o   1998年7月16日

  o   NEdit のヘルプのスクロールは不可能

  o   svgalib 1.3.0 はネイティブにマウスをサポートしている

  o   1998年7月9日 バケーションから戻ってきた... 6月1日からのメールボッ
     クスをクリーンにした。

  o  NEdit

  o   non-X ホイールマウスへのリンク

  o   non-working プログラムのセクション

  o   Netscape のよりよい解決策

  o   glquake 上のセクション (yeah!)

  o   1998年6月29日

  o   Metro Link による MS Intellimouse への言及を追加

  o  リソースの # による fixed コメントを開始 (athena)

  o   1998年5月5日

  o  この新しいセクションを開始

  o   Felix Ide による KDE のセクション

  o   1997年12月30日 このページ(訳注：オリジナルの英語のホームページ)誕
     生

  26.  日本語訳について

  翻訳に関するご意見は JF プロジェクト <JF@linux.or.jp> 宛てに連絡してく
  ださい。

  校正：

  o  千旦   Yuji Senda        <ysenda@pop01.odn.ne.jp>

  o  瀬戸口 Setoguchi Takashi <setzer@mx3.tiki.ne.jp>

  o  川嶋   Tsutomu Kawashima <kawawa@mail.interq.or.jp>

  o  水原   MIZUHARA Bun      <mizuhara@acm.org>

  o  武井   TAKEI Nobumitsu   <takei@webmasters.gr.jp>

