[userChrome.js] 軽量マウスジェスチャ

マウスジェスチャ機能は欲しいけど、All-in-One Gestures や Optimoz Mouse Gestures は余計な機能が多すぎる。AiOGから不要な機能を取っ払ってスリム化させようと試みたが、ソースコードが複雑すぎてやる気が失せた。そこで自分で一から考えて作ってみた結果、200行にも満たない userChrome.js 用スクリプトとして実装することができた。

xuldev.org :: userChrome.js scripts » Mouse Gestures

特徴

  1. マウストレイル(軌跡の描画)は重くなる原因なのであきらめた。とはいえ AiOG から trails.js を借りてきて一工夫すれば実装可能です。
  2. ジェスチャによって実行される処理は、極力ブラウザ本体に実装されたコマンドを呼び出すようにしている。
  3. 設定用GUIは無いが、スクリプトを直接編集することで無駄なく柔軟にカスタマイズできる。詳しくは下記スクリプト内の _performAction 関数をご覧ください。

TOP

27 Comments to “[userChrome.js] 軽量マウスジェスチャ”

All-in-One Gestures から乗り換えようと思ったのですが,
他のスクリプトは動作するのものの,
この軽量マウスジェスチャだけは全く動作しませんでした.
新規プロファイルを作製して試してみましたが,
それでも上手くいきませんでした.
環境は以下の通りです.
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-JP-mac; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2

すみません、本スクリプトはどうやらWindowsでしか動作しないようです。
他の環境では動作確認できていませんが、Linuxで動作しないという話をちらほら聞いています。

そうでしたか.残念ですが,仕方がありませんね.

釣られ人:

Linux(Ubuntu 6.10)の環境では動作しませんね。
私も仕方ないのでMouseGesturesを使ってます。

なんとか4月くらいまでにLinuxやMacのテスト環境をそろえたいと考えていますが、Windows以外のOSについての知識がゼロなため、攻めあぐねている状況です。特にLinuxは色々種類があってよくわかりません。すみません。

釣られ人:

ttp://pc9.2ch.net/test/read.cgi/software/1168635399/72
72氏の修正を適用すればLinuxでも動作しました。72氏に感謝感謝。

通りすがり:

Linux では mousedown 直後に contextmenu が呼ばれるようです。
コードを見るに Windows では mouseup 直後に呼ばれるのでしょうか。

> Linux では mousedown 直後に contextmenu が呼ばれるようです。
ということは、Linuxではマウスを離さずに押しっぱなし状態でもコンテキストメニューが表示されるということですか?

72氏の修正というのも試してみましたが、Win環境では逆に正常動作しませんでした。

mousedown→contextmenu→mousemove→mouseup
mousedown→mousemove→mouseup→contextmenu
結局、この両方に対応するしかないようです。いずれにしろLinux環境がないため、対応は困難ですが。

通りすがり:

まだ、あまりテストしていませんが、下のようにしてみたところ
手元では Linux, Windows 共に動作しているようです。

    handleEvent: function(event)
    {
        event = new XPCNativeWrapper(event);
        switch (event.type)
        {
            case "mousedown":
                // [1] ジェスチャ開始
                if (event.button == 2) {
                    this._isMoving = true;
                    this._hasPreventContextMenu = false;
                    this._startGesture(event);
                }
                break;
            case "mousemove":
                // [2] ジェスチャ継続中
                if (this._isMoving) {
                    this._progressGesture(event);
                }
                break;
            case "mouseup":
                // [3] ジェスチャ終了 アクション実行
                if (this._isMoving) {
                    this._stopGesture(event);
                    this._isMoving = false;
                    if (this._directionChain) { this._onceNoPopupContextMenu = true; }
                    else {                      this._onceNoPopupContextMenu = false; }
                    if (this._hasPreventContextMenu) {
                        this._displayContextMenu(event);
                    }
                }
                break;
            case "contextmenu":
                // [5.1] アクション実行後のコンテキストメニューを抑止する
                // [5.2] 方向が認識されない微小な動きの場合は抑止しない
                if (this._isMoving || this._onceNoPopupContextMenu) {
                    event.preventDefault();
                    event.stopPropagation();
                    if (this._isMoving) { this._hasPreventContextMenu = true; }
                    this._onceNoPopupContextMenu = false;
                }
                break;
        }
    },

    _displayContextMenu: function(e) {
        var evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("contextmenu", true, true, e.originalTarget.defaultView, 0,
            e.screenX, e.screenY, e.clientX, e.clientY, false, false, false, false, 2, null);
        e.originalTarget.dispatchEvent(evt);
    },

通りすがり:

> ということは、Linuxではマウスを離さずに押しっぱなし状態でもコンテキストメニューが表示されるということですか?

そういうことです。
ちなみに、mouseup 時に項目を選択していると、その項目が実行されます。

Windows, Linux 両対応したコードをこちらに貼ろうとしたのですが、長過ぎたのか貼れませんでしたので、メールにて送信しておきました。

通りすがりさんのコードを試したところ,
Mac でも動作しました.
どうもありがとうございます.

釣られ人:

Vista、Ubuntu6.10の環境でも動作しました。
いまのところ特に問題ないです。

本日ようやくVMware + UbuntuのLinuxテスト環境ができあがりました。
通りすがりさんのコードでWin,Linuxともに問題なく動作しております。
Macでの動作報告お待ちしております。

[…] 通りすがりさんによるパッチをベースに、[userChrome.js] 軽量マウスジェスチャを Windows/Linux の両方に対応させました。 Mac での動作確認をお待ちしております。以下は今回修正した内容についてメモです。 […]

にゃー:

便利に使わせてもらってます。ありがとうございます。
ロッカージェスチャというのでしょうか、右クリックー>左クリックで戻る、
左クリックー>右クリックで進むとしたいのですがどうすればいいですか?

にゃー:

アンケート結果がでてますね。取り下げます。失礼しました。

ロッカージェスチャ機能追加を試みたのですが、残念ながら右クリックしながら連続左クリックで連続して戻る機能が実装できませんでした。右クリックしながら左クリック1回のみであれば可能ですが、それでも良いですか?

にゃー:

ありがとうございます。それで充分です。数回戻る(進む)時はジェスチャを繰り返し、たくさん戻る時はツールバーの戻るボタンの履歴から戻るので全然OKです。

[…] 用 軽量マウスジェスチャへ、以下の2機能を追加したバージョンを作成しました。 […]

釣られ人:

userChrome.js 0.8
http://forums.mozillazine.org/viewtopic.php?t=556229

0.8だと動作しないみたいです @Linux

[…] [userChrome.js] 軽量マウスジェスチャ(Windows/Linux/Mac対応 – SCRAPBLOG […]

私の環境ではタブを閉じるの動作がうまくいきません。現在のタブとその前のタブの二ついっぺんに閉じちゃいます。

[…] 普段ページを見るのに、いろいろ好きにカスタマイズできるのも含めて、firefoxを使用しています。そのfirefoxでマウスジェスチャー(マウスの右クリックボタンを押したまま、マウスを左に移動させると前のページに戻るとか)を使用しており、どの方向に移動させるとどうなるというのを、自分で決めることができるのですが、下記が自分の設定です。 右クリック+↑ ・・・ 更新       ↓ ・・・ タブを閉じる       ↓↑ ・・・ 閉じたタブを開く        ← ・・・ 戻る        → ・・・ 進む […]

とおりすがりのななし:

ttp://www.xuldev.org/misc/script/MouseGestures.uc.js
こちらマウスジェスチャーでタブを閉じると
エラー: this.mCurrentBrowser is null
ソースファイル: chrome://browser/content/tabbrowser.xml
行: 0
というエラーを吐いたのですが、なぜでしょうか?
どのようなエラーなのかも調べたのですがよく分かりませんでした
教えていただければ嬉しいです

いつもありがとうございます:

軽量マウスジェスチャで操作がとても軽快です。感謝してます。
こちらの軽量マウスジェスチャでブックマークなどから特定のページを開くことはできますか?
お時間あるときで結構ですのでどうぞ教えてください。

Firegesturesの
[Popup]検索エンジンを指定して検索
[Popup]閉じたタブの一覧
がとても便利なのですが、これを実装するためにはどういった関数を追加すればよいのですか。
firegesturesのjar中の_buildPopup関数などを見てみましたが、よく分かりません。

↑作ることできました。

TOP

TOP