Sorry, This page is Japanese only.

xfumbleとは

概要

xfumbleは、UNIX系OS(Linux等)のデスクトップ(X Window Systemを使用するもの)の使い勝手を、お好みに合わせて、少し良くするためのツールです。

つまり、X Window Systemにおける、キーバインドリコンフィギュレーションツール、その他もろもろ、です。

xfumbleを使えば、カーソルキーやファンクションキーに指を伸ばさなくてもよくなったり、キーボードとマウスを手が行ったり来たりするのを減らしたりできます。

もともと作者は、emacsというテキストエディタを使っておりましたが、このエディタのカーソル移動は、上移動だったらCtrl-p(Ctrlキーを押しながらp)、下移動だったらCtrl-n、ということになっておりました。これに指が慣れているので、emacs以外のアプリでも、ついつい、上移動をするのに Ctrl-pを押してしまい、そうするとたいていのアプリでは、「印刷」ってことになる(pはprintのp)から、とてもイライラしました。「emacs以外のアプリでは、ctrl-pはキーボードのカーソル上移動キーを押したのと同じこと」なんてことが、簡単に設定できる、そんなアプリが、作者には必須のアプリです。MS WindowsにはAutoHotkeyという名前のアプリがあったので、ずいぶんそれを使わせてもらっておりましたが、今使っている Linux(UNIX系OSのX Window環境)では、そういうのが、なかなか無い。それで、自分で作ることにしました。



動作環境

UNIX系OS(Linux等)で、X Window Systemが動作するデスクトップ...

の、はずなんですが、バージョンの違いにより、動かない環境もあるようです。
一応、下記の環境で、動作確認を行っております。


Fedora8
Fedora10
Ubuntu8.10
Ubuntu9.04
Ubuntu9.10
Ubuntu10.04


また、少なくとも、Ruby、およびruby/GTK2の動作環境(Feroraなら、ruby-gtk2)が必要です。



xfumbleの目指しているところ

MS Windowsには、この手の、キーバインドリコンフィギュレーションツールが、既にたくさんあります。

それらは、大別して、二つのタイプに分かれると思います

(1)ある、特定のアプリケーションのキーバインド(emacsとか、viとか)に特化した、キーバインドを提供するツール。
例えば、emacsだったら、野口さんのkeymacsとか、それの機能拡張版である、OishiさんのXkeymacsなど。
viだったら、easterさんのkeViなど。

(2)アプリケーションに依存しない、汎用的なキーバインド設定ツール。
例えば、作者も愛用していた、ChrisさんのAutoHotkey、あるいは、TAGAさんの窓使いの憂鬱など。

上記のアプリは、みな素晴らしい力作だと思いますが、それぞれ、下記のような長所と短所があると思います。

(1)のアプリは、特定のアプリのキーバインドに特化しているため、そのアプリに特化したキーバインドを求める人には最適。しかし、「基本はemacsなんだけど、自分でキーバインドを替えまくってて、もはや原型はとどめてない」なんて人には、ちょっと使えません。

例えばオイラ。xfumbleの作者は、emacsから入ったんだけど、Ctrl-fとかbとかでカーソル右と左というのが、指がつりそうになったので、Ctrl-lとkに替えました(ATOKの文節拡大縮小がこのキーで、気に入ってたんです)。それから、「行末にジャンプ」は、Ctrl-x Ctrl-lとか、もう、メチャクチャ。作者は、もはや普通のemacsは使えない(笑)。

(2)のアプリは、特定のアプリのキーバインドに依存していないため、どんなキーバインドも作れるのが魅力。しかしそのために、キーバインドのルールを記述する、特殊なプログラミング言語を学習しなければならないので、それが大変。
オイラはヲタクだから、AutoHotkeyのプログラミングにゾッコン惚れて、いろんなアプリを作ったもんです。なまずIMEとか。作者が欧米人で日本語対応してなかったので、AutoHotkey用日本語処理ライブラリとかも作ったんだぜ。
でも、そういうのはプログラミングヲタだからこそ、楽しいと感じるわけで、そうでない人にとってみたら、敷居が高いこと、この上ない。


ということで、xfumbleを作るにあたって、上記の(1)と(2)の真ん中を狙うようなアプリにしたいなぁ、と、思いました。すなわち、

(A)アプリケーションに依存しない、自由なキーバインドルールが作成できる。
(B)上記が、プログラムレス、例えば、メールソフトで、「受信メールのフォルダへの振り分け」ルールを指定する、あれをもうちょっと難しくしたくらいで、実現できる。


といったあたりを目指して開発をしています。

そのために、xfumbleでは、キーバインドのために必要な「機能」(ブロックって呼んでる)を提供し、それを使用者が、好みに応じて組み合わせることで、ルールを作成する、というスタイルを取っています。

例えば、xfumbleは、サンプルで、vi風のキーバインドのルールを提供していますが、これは、ブロックを、XMLの論理記述で、組み合わせたものです。viのためにプログラムを書いたのではありません。
viの動作は標準(コマンド)モードがあったり、挿入モードがあったり、visualモードがあったりと、結構複雑ですが、これらも、XMLの論理記述のみで、実現しています。

当然、emacs風のキーバインドのルールも、ブロックを組み合わせたものです。

emacsで使う「キーマクロ」機能も、xfumbleでは、「ブロック」で提供しています。その同じ「ブロック」を、viのルールの中で使って、viにおける「ピリオドによる繰り返し」の機能を実現してます。

もちろん、プログラム記述が、XML記述に置き換わっただけで、普通の人にとって、敷居が低くなる、わけではありません。

XMLで記述できる程度に、カスタマイズのルールを単純化することで、XML記述を、GUIアプリで実現し、XMLなんか知らなくっても、GUIで、自分好みのルールを作成できるようにすること。ここが、狙いです。

※現在(2010/6/14)のところ、残念ながら、上記のGUIアプリは、完成しておりません。つまり、ルール作成、つまりブロックの組み合わせには、XMLファイルを記述しなければなりません。しかし、いつか、この組み合わせを、GUIアプリで実現し、(B)の目標を達成したいと考えています。



なぜ、xfumble(エックスファンブル)という名前?

"x"は、20年以上前からの、伝統的なX Windowアプリケーションの接頭文字。"xeyes"とか"xterm"とか、"x"が頭についたアプリは、やたらと存在します。最近の新しいアプリでは、こういう名前は少なくなったけど、基本部分は20年以上も仕様が変わっていない、優秀なX Windowシステムに敬意を表して、あえてレトロな命名にしてみたわけです。

"fumble"には、「ごそごそ手探りする」「下手な手つきでいじくり回す」といった意味があります。作者が作ってるのはまさにそんな感じで、キー入力やマウス入力をゴソゴソやって横取りし、普通のアプリケーションを「騙す」ことで、コンピュータデスクトップの使い勝手をよくしようというもの。立派な統合アプリ環境を開発して、さぁ、どうです?、と言うよりも、既存のアプリの使い勝手の向上や、既存のアプリ同士の連携を、「下手な手つきでいじくり回す」感じで、まぁ動けばいいじゃん、と実現するのが目的だから、"fumble"という単語は、割とピッタリではないか、と思っています。

さらに、"fumble"は、例えば、「野球でボールを取り損なう」なんて事にも使うように、あんまりいい意味の単語ではないようです。そういう言葉をあえて名前に使ってることが、逆に目立っていいかな?という、多少の色気もありました。



ライセンス

ダウンロードページで公開しているxfumbleのソースコードは、GPLバージョン3にて配布を行います。

下記のライセンス条項は、上記すべてのソースコードに適応します。

---------------
xfumble - X Windowにおける動的キーバインド(その他いろいろ)ツール
Copyright(C) 2008- 遠藤なまず

このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェ
ア財団によって発行されたGNU 一般公衆利用許諾書(バージョン3)が定める条
件の下で再頒布または改変することができます。

このプログラムは有用であることを願って頒布されますが、*全くの無保証
*です。商業可能性の保証や特定目的への適合性は、言外に示されたものも 含
め、全く存在しません。詳しくはGNU 一般公衆利用許諾書をご覧ください。

GNU 一般公衆利用許諾書は、
http://www.gnu.org/licenses/
をご覧ください。
---------------


簡単に言えば、「タダ」「無保証」「改変自由」「再頒布自由」「ただし、改変した内容は、公開する義務を負う。つまり、せっかく改変してくれたんだったら、オイラにも見せてよね。」です。



謝辞

xfumbleを作るにあたって、のぞむさんの、keyfakeが、非常に参考になりました。
xfumbleのもっとも根本の、「XTest extention機能で、擬似キー出力を実現する」というアイデアは、のぞむさんのkeyfakeがなかったら、まだ気がついてなかったかもしれません。のぞむさん、本当にありがとうございました。

xfumbleのほとんどは、プログラミング言語Rubyで書かれています。Rubyの「コードブロック」の仕組みが、極端なイベントドリブン型プログラムのxfumbleの開発を、とてもハッピーなものにしてくれました。まつもとさん、本当にありがとうございました。

xfumbleが、X Window Systemと直接やりとりする部分は、C言語で書かれています。Xlibとやりとりするrubyのクラスを、C言語で作成する方法について、もりきゅうさんのRuby/Xlibが、非常に参考になりました。もりきゅうさん、本当にありがとうございました。

さらに、X.Orgが新しくなって、RECORD extensionが使用できなくなり、それに代わるキーイベント配送方法を考えていたときに、Chris DekterさんのAutoKeyというツールのソースコードが、大変に参考になりました。USBケーブルで複数のキーボードを接続しても動作するように、/dev/input/by-pathを検索して、キーボード関係のデバイスを、全部オープンする、というアイデアは、Chrisさんから頂きました。また、X.Orgのバージョンをチェックして、1.6未満だったら、RECORDを使う、というアイデアも、参考になりました。Chirsさん、本当にありがとうございました。

それから、コーヒー一杯で何時間も粘り、ノートパソコンの電気まで勝手に使う、ずうずうしいヒゲオヤジに、いつもやさしく接してくれる京阪香里園駅のスターバックスの店員の皆さん、本当にありがとう。