しょぼしょぼすくりぷと xyzzy編 > ツール/ゲーム ジョークライブラリ集 > マウスジェスチャー機能

マウスジェスチャー機能

xyzzyにマウスジェスチャー機能を追加します

概要

右クリックの4方向のみに対応したマウスジェスチャー機能です。

機能

右クリックでマウスを動かすと、それに完全マッチしたアクションを実行します。 (*mouse-action-list* のリスト参照)

機能一覧

正規表現に対応し、アナログ的な I/Fも搭載しました。
これによって、正規表現では微妙な誤操作も吸収でき、きっちりジェスチャーしなくても良くなります。 また、一つのコマンドに対して複数のアクションリストパターンを書く必要が無くなります。
これらの特徴をもたせたので筆記体のようなアクションでもかなり楽に指定できます。

またアナログ的なI/Fによって →→も可能になりました。たとえば、↓スクロールする時に ↓と↓↓で移動量を変えることができます。(下の例参照)

キャンセル機能(マウスをぐちゃぐちゃ操作する:方向アクション20個分ぐらい)をつけたので間違った操作をしても、コマンドがトリガーされないようにできます。

セレクション範囲対応コマンドは先頭に "S"をコマンドにつけてください。

アクションを作るときは 実行後*mouse-action-history*の変数にアクションが入っているので、そこからアクションを作ると楽です。

影響

global-keymapの右マウスボタンの press , up ,move 3つを潰します。
(セレクション範囲は残してます。また、コンテキストメニューも今まで通り表示されます)

設定

おすすめ設定例(アクションパターン活用例)

マウスジェスチャーの基本的な部分は省略して、 ちょっとサンプルの解読は面倒だったり意図が通じないと思うので (正規表現がいまいち苦手な人も含めて )説明します。

文字ジェスチャ

文字や丸などは、程良い大きさの感覚を掴む必要があるかもしれません

記号ジェスチャ

window アクションジェスチャ

アナログ的ボリューム ジェスチャ

セレクション用 ジェスチャ

設定方法

・ファイルを site-lispフォルダ配下に格納
・.xyzzyなどに読み込み処理を記載
(load-library "mouse-action.l")

実際のアクション設定例は下記を参照ください。
・*mouse-action-list*: マウスジェスチャーリスト
   [構造]
   *mouse-action-list* = (list アクションリスト)
   アクションリスト = (list ジェスチャーコマンド、表示 、コマンド)

・*mouse-action-threshhold* :マウス無反応距離
・*mouse-action-popup* ;マウスジェスチャーpopup表示 / t:popup-string   nil:message

Selectionがある場合はコマンドの先頭に "S"がつく
;設定例 
(setq *mouse-action-list*
      '(
        ;(".\\{10,\\}$" "quit" (lambad()(message "quit:mouse-action")) t);正規表現ストッパー 10アクション以上でキャンセル
        ("↓→" "タブを閉じる" delete-current-buffer-force);独自関数
        ("→←→←" "保存" save-buffer)
        ("↑←" "保存" save-buffer)

        ("←→" "共通設定" option-property-sheet)
        ("↑↓" "全て選択(A)" selection-whole-buffer) ;A文字のイメージ
        ("S←↓→" "Copy Selection(C)" copy-selection-to-clipboard);C文字のイメージ
        ("↑↓↑↓" "Memo (M)" memo-start);M文字のイメージ、独自関数

        ("^S?↑+→↓←$" "Paste (P)" paste-from-clipboard t);P文字のイメージ
        ("^S?←↓+→↑←$" "Grep(G)" grep-dialog t);G文字のイメージ
        ("^S?→+↑←↓↓*→↑$" "Filer(F)" open-filer t);筆記体fのイメージ
        ("^→+↑+↓+→+$" "時刻挿入(t)" insert-date t);筆記体のt : 独自関数
        ("^S→+↑+↓+→+$" "セレクションインデント(i)" (lambda () (selection-start-end (start end) (indent-region start end))) t);筆記体のi

        ("^→→→→+←+$" "split-window" (lambda () (split-window (- *last-mouse-line* (get-window-start-line)))) t)
        ("^↓↓↓+↑+$" "split-window" (lambda () (split-window-vertically *last-mouse-column*)) t)
        ("→←" "split-window" split-window)
        ("↓↑" "split-window" split-window-vertically)
        ("^.\\{,2\\}\\(↓+←+\\)\\{2,\\}.\\{,3\\}$" "windowを閉じる"  (lambda () (if (> (count-windows) 1) (delete-window) (delete-current-buffer-force))) t) ;斜め45度で
        ("S→↑" "file jump" find-file-string) ;独自関数
        ("^.\\{,2\\}\\(↓+→+\\)\\{1,3\\}.\\{,3\\}$" "囲み文字"  enclose-braces t) ;斜め45度で、独自関数
        ("^S\\(←+↑+→+↓+\\)\\{1\\}.\\{,3\\}$" "grep(O)" (lambda ()(grep (selection-start-end (start end) (buffer-substring start end)))) t) ;O文字のイメージ
        ("^S\\(←+↑+→+↓+\\)\\{2\\}.\\{,3\\}$" "grepd(O)" (lambda ()(ed::scan-files (selection-start-end (start end) (buffer-substring start end)) nil (directory-namestring (get-buffer-file-name)))) t)

        ("^\\(←+↑+→+↓+\\)\\{1\\}.\\{,3\\}$" "エクスプローラ(O)" open-directory-where-current-buffer-file-be t) ;O文字のイメージ,独自関数
        ("^\\(←+↑+→+↓+\\)\\{2\\}.\\{,3\\}$" "関数一覧:◎" list-function t) ;2重丸(下から)
        ("^\\(←+↑+→+↓+\\)\\{3\\}.\\{,3\\}$" "バッファ一覧:3重丸" select-buffer t) ;3重丸(下から)

        ("^[→←]+$" "前後のバッファ" (lambda ()(dotimes (i (length-mouse-action "→")) (next-buffer))(dotimes (i (length-mouse-action "←")) (previous-buffer)))t)
        ("^[↑↓]+$" "上下スクロール" (lambda ()(next-page(- (length-mouse-action "↓") (length-mouse-action "↑"))))t)
        ))
一度の覚えるのは大変なので、1,2個ずつ好きなものを覚えていって、自分用にカスタマイズすれば良いと思います。

ソース

mouse-action.l | 旧mouse-action.l

ひとこと

よく使っていたマウスジェスチャー機能がなくなったので、 しばらく我慢していたけれども、再開発しました。
web archiveがありました。→MicroTips(xyzzy dept) - zauberer.at.infoseek.co.jp

履歴

2010/08/01 一つのファイルにして公開

関連リンク

しょぼしょぼすくりぷと xyzzy編 | ツール/ゲーム ジョークライブラリ集