目次


洗練されたPerl: Ionウィンドウ・マネージャーで遊ぶ

簡単で強力なウィンドウ管理方法

Comments

この記事を読んで頂ければ、X Window システム用のIonウィンドウ・マネージャーがどんなものか、感覚がつかめるでしょう。X Windowマネージャーはアプリケーションが開くウィンドウを管理するプログラムです。例えば皆さんがXTermやWebブラウザーをXターミナル上で実行したことがあれば、恐らくウィンドウ・マネージャーはバックグラウンドで実行しており、開かれるウィンドウの制御を助けているはずです。

Microsoft® Windows®では、ウィンドウ・マネージャーはOS(オペレーティング・システム)と非常に緊密に統合されています。デスクトップ全体にエクスプローラー・ウィンドウが開いていないようなWindowsマシンはほとんど考えられません。

UNIX®や、特にLinux™では、文化的、技術的に様々な理由から、デスクトップの進化は異なった道をたどりました。UNIXはそのウィンドウ・システムとしてXを選択し、X Windowマネージャーは典型的なUNIXユーティリティーとして、小さく、高速で、設定可能でした。twmのようなウィンドウ・マネージャーは最小限のものを求める人に人気が高く、一方、精巧な機構、Enlightenmentウィンドウ・マネージャーは、比較しようもないほど美しくグラフィックスを表示します。(MacOS X上でのIonに関する情報については参考文献を見てください。)

最近のUNIXデスクトップは一般的に言って、ウィンドウ・マネージャーとそれ以外のデスクトップ機構(CDE、KDE、Gnomeなどが行います)をかつてないほど緊密に統合していますが、それでもやはり、デスクトップが想定するものとは異なるウィンドウ・マネージャーも実行できるようになっています。

この記事は、気軽にウィンドウ・マネージャー(一般に、略してWMと言われます)を切り換えられるようなユーザーを対象にしています。もし皆さんがそれほど慣れていないユーザーであれば、注意してください。Ionは優しいWMではありません。Ionを使おうとするユーザーは、IonやXの設定を間違えて何かが動かなくなったような場合に自分でトラブルから抜け出せるだけの力を持っていることが必須です。十分注意して取りかかってください!

Ionを入力する

Ionはタイリング型のウィンドウ・マネージャーです。Ionに似たものは他にもありますが(参考文献に挙げたIonのホーム・ページにあるリンクを見てください)、私の意見では、スピードや機能、拡張性、設定のしやすさといったバランスがとれている点で、最高のものです。Ionのサイズはたった150 KBです(Debian Linuxのバージョン2時点では、モジュールのためにさらに160 KB必要です)。そして高速です。

最初に、定義をしましょう。タイリング型ウィンドウ・マネージャーは、ウィンドウを重ね合わせることはしません。ユーザーにコンテンツが見えなくなる一番の原因がウィンドウの重なりだと気がつくまでは、これは変に思えるかも知れません。ナビゲーションに関して言うと、管理するウィンドウにzプレーン(深さ)が無いため、タイリング型ウィンドウ・マネージャーは非常に効率的です。ですからユーザーは、単に2次元を管理すればよいのです。(完全な物語を見てください)

一つの疑問がすぐに頭に浮かびます。作業空間に収納できる以上にウィンドウがあった場合、特に管理できないほど小さなウィンドウにはしたくない場合にはどうなるのでしょう。ここでタイリングの他にIonが持つ、もう一つの素晴らしい機能、タブが登場するのです。一つのタブのみが見えるという点を除けば、タブはIonのzプレーンです。ですからウィンドウ・フレームにタブA、B、Cがあったとしても、その内の一つしか見ることができません。他のタブや、そのタブに属するウィンドウ群は隠れてしまいます。これはIonをうまく使おうとするには重要なことですので、良く覚えておいてください。今日の多くのアプリケーションではタブをサポートしているので、皆さんはIonを使ったことはなくても、タブがどのように動作するかはご存じでしょう。

Ionのホーム・ページ(参考文献)には、Ionのタイリング動作とタブのスクリーン・ショットがあります。Ionが華麗ではないので、そのスクリーン・ショットも華麗さが欠けていますが、その動作は(信じられないほど)機能的なのです。必要なことをするのだけが目的なので、テーマのような華やかなものは使われていません。私はIonを使う前にEnlightenmentを使ったことがあるのですが、テーマが無いため、正直なところ最初はIonが全く魅力に欠けるものに見えました。しかし最終的にはIonを使うことによって、ウィンドウを飾るものよりも、ウィンドウの内部にあるものに集中できるようになったのです。皆さんがIonを試すのであれば、少なくとも一日はかけることをお勧めします。最初の印象があまりにも冴えないため、Ionを素晴らしいウィンドウ・マネージャーたらしめている最大の理由、単純さが、皆さんを尻込みさせてしまうかも知れません。

Ionを非常に便利だと思うようなユーザーは、何らかの理由でマウスが嫌いな人達です。Ionは全ての機能をキーボードから操作でき、マウスを使う必要はありません。マウスを使いたい人はマウスを使うこともできます。ただし、一旦キーボードでの操作を覚えてしまえば、キーボードで操作した方が簡単で早いのです。

最後に、X Windowマネージャーには数多くの種類があり、Ionが皆さんに最適なものではないかも知れません。Ionに似た他のウィンドウ・マネージャーは、Ionのホーム・ページのLinkセクションにリストアップされています。自分のプラットフォームで使用可能なものをよく調べ、自分がウィンドウ・マネージャーのどういう点が好きなのかによって、適切なものを選んでください。ただし、Ionはぜひ試してみてください。試してみて良かったと思うはずです。

Ionの歴史

Ionはその全歴史を通してTuomo Valkonenという名のフィンランド人ハッカーによって開発されました。現在のIonに先立つIonも、同じ作者によるPWMウィンドウ・マネージャーです。ソフトウェア・パッケージとしてのIonはLesser GNU Public Licenseとして入手可能ですが、Ionプロジェクトの独占的所有者はTuomoです。Tuomoはごく最近、Ionの最新版をSubversionリポジトリーに置きました。Ionの最新版を入手するための、このリポジトリーの使い方についてはIonのホーム・ページにあります。

2004年7月の時点で、Ionには明確に異なる3つのバージョンがあります。Ion 1はオリジナルのIonで、Cで書かれており、古典的なUNIXウィンドウ・マネージャーと似た考え方の、単純な設定フォーマットを持っています。Ion 1にはフローティング作業空間(オーバーラップ型ウィンドウ)はなく、ごく僅かの機能しかありません。それにもかかわらずIon 1は、必要最小限、合理的で非常に機能的という手法から、革命的なものでした。Ion 1はタイリング作業空間(この考え方は決して新しいものではありません)を初めて使ったものではありませんが、タブのおかげで非常にうまくまとまっていました。タブはIonのタイリング手法の大きな成功要因であり、私の知る限り、PWM以前のウィンドウ・マネージャーにはこの機能はありませんでした。いや、あったかも知れませんがIonほど広範な使い方をしていませんでした。Ionでは、ターミナル・ウィンドウまでタブ化するのです。

Ion 2はIonの大部分を書き換えたものです。やはりCで書かれていますが、Ionコードを整理するために、オブジェクト階層構造も整理しています。Ion 2での大きな変更は、オプションとしてのフローティング作業空間とLuaスクリプト言語の追加です。EmacsにおけるLispのように、LuaによってIonにカスタム化と拡張の手段が得られたのです。

Ion 3は現在開発中であり、(セッション管理のサポートや、mod_autows、より良いドック、スクラッチパッド、など)なかなか素敵な機能が既にテストされていますが、現時点ではユーザーに見える機能から見てIon 2からの大きな変更点はありません。冒険好きな人は、Ion 3のリポジトリーにこれらの機能の詳しい情報があるので見てください。

Ion 3はIon 2で導入された多くの機能を単純化し、また改善されたIon拡張モジュールを追加した、マイナーな内部書き換えです(ただしスクリプト面から見ると、Ion 2で学んだ教訓を反映して大きく変更されています)。Ion 3を使おうとするのであれば、その状況をよく確認してください。この記事の執筆時点ではドキュメンテーションもほとんど無く、まだ生煮えのリリースのようです。

私のIon設定

デフォルトのキー割り当てでIonを使い始めることはもちろんできますが、これでは使いにくいと感じる人もいるかも知れません。Wordstarやviのユーザーであればデフォルトのキー操作が容易だと思うかも知れませんが、皆さんのキーボードに空きのファンクション・キーがある場合には、デフォルトのキー操作を変更したいと思うかも知れません。ここではIon 2で少しキー割り当てを変更した、私自身の設定をお見せしましょう。

デフォルトのキー割り当てを保持した上で、さらに新しいキー割り当てをインストールできることに注意してください。これは新しいユーザーにとって恐らく最も安全なオプションと言えるでしょう。

私のキー割り当てをお見せする前に、説明をする必要があるでしょう。私がキーボードを使うのは殆ど完全にEmacsとvi(プログラミング)、シェルの操作、そして(Emacsのgnusメール・リーダー、ニュース・リーダーを使用した)eメール用です。私はEmacsでのプログラミングにはFキーを全部使っています(F1からF12の単体または、ControlやShiftと組み合わせたもの)。Alt-F1からAlt-F12までをIon専用にしています。LogitechやSun、それにMemorexのキーボードにある余分なキーはアプリケーションを起動するために使用していますが、それがxmodmapでどのように動作するかは、このすぐ後で説明します。

私の設定で一番変わっているのはテン・キー部分でしょう。私はIonのナビゲーションのためだけにテン・キー部分を使用しています。私が設定した風にテン・キー部分を使うにあたって、何の修飾子(ControlやAlt、Shiftなど)も押す必要がありません。こうすることで、私がキーボードでタイプしている時には、単に右手をテン・キー部分に移すだけで、Ionの全ナビゲーションにアクセスできるのです。私の経験では、この設定は非常に効率が良く、皆さんも検討してみることをお勧めします。テン・キー部分はキーボード上のどこにでも複製することができるので、何かを犠牲にする必要はありません(99%の場合)。残りの1%では、私の設定が他のキーに割り当てられるように、あるいはAltを押すことと組み合わせてテン・キー部分に割り当てされるように、テン・キー部分を使う必要があります。

もし皆さんがどうしてもテン・キー部分が必要だと考えるのであれば、しばらく時間をとって考えて見てください。テン・キー部分を何に使うのでしょうか? 皆さんの手はどのくらい頻繁にテン・キー部分の上に置かれるでしょうか? 見方を変えて、皆さんは画面上のウィンドウを操作するためにどのくらい頻繁にマウスに手を出すでしょうか? 恐らく皆さんは、テン・キー部分が日々コンピューターを使う上で必須ではないことが分かるでしょう。その証拠としてラップトップ・コンピューターを考えてみてください。何日間かラップトップ・コンピューターを使ってみれば、別に分かれたテン・キー部分が無いことに気がつくでしょう。これは大部分のユーザーにとっては問題にはならず、ラップトップでは一般的な「オーバーレイ・テン・キー」を使う人は稀なのです。

Ion 2の設定はLuaと呼ばれる言語で書かれています。Ionのホーム・ページには、Ionの設定にLuaを使うためのドキュメンテーションへのリンクがあります(参考文献)。Ion 2で導入されたオブジェクト階層構造はLuaで操作されるので、皆さんがキー割り当てでのごく単純な変更以上にIon 2をカスタム化するつもりであれば、オブジェクト階層構造を説明したIon 2のドキュメンテーションを見ておくべきでしょう。

私のIon 2設定は幾つかのファイルから構成されています。グローバルなIon 2オプションを制御するion.luaがあります。Ionのタイリング作業空間に対してはionws.luaを使っていますが、現在これにあるのはキー割り当てのみです。グローバルなキー割り当てに関してはtzz-ion-bindings.luaを使っています。私はIonではPWM(フローティング)作業空間を使わないので、私のカスタム化にはPWMキー割り当てはありません。Ion 2に付いてくるデフォルトのPWM割り当てで充分なはずです。もしIon作業空間をテン・キー指向の割り当てのように単純にしたいのであれば、フローティング作業空間でテン・キー部分に何をさせるかを考える必要があります。フローティング・ウィンドウでは恐らくマウスが必須になるでしょう(だから私はフローティング・ウィンドウを使わないのです)。

皆さんは私がなぜマウスを嫌うのか不思議かも知れません。マウスは確かに良いポインティング・デバイスなのですが、マウスを使いすぎると、コンピューター・ユーザーによく発症する、手根トンネル(管)症候群(Carpal Tunnel Syndrome: CTS)や反復運動過多損傷(Repetitive Stress Injuries: RSI)の元になると疑われています。私の経験では、マウスの使用頻度を減らすと手首が楽になります(実際私は数年前、CTSになりかけました)。しかし私は医者ではないので、皆さんがこうした病気が気になるのであれば、医者に相談することをお勧めします。大部分の専門家はできるだけマウスの使い方を減らすように勧めますが、当然ながらキーボードの使いすぎも、同じくらい健康には害があります(特に姿勢が悪い場合)。コーディング(chording、一度に2つ以上のキーを打つこと)は特に害があり、できる限り避けるべきです。ここでお見せする私の設定では、Ionでタブやフレームの間を移動するという、最も一般的に使われるナビゲーション作業に対して、特にコーディングを避けるようにしています。

大量のタイプをする場合には、マウスの使い方を減らすとキーボードとマウスの間で手を動かす必要が減るため、生産性を上げることができます。健康的かつ生産的にコンピューターを使うために最上なのは、頻繁に5分間の休憩を取ることだ、ということを忘れないでください。

下記は私のion.lua設定ファイルです。Luaは非常に複雑な言語ですが、「- -」が注釈の始まりであることはすぐに分かるでしょう。

リスト1. ion.lua
--
-- Ion main configuration file
--

-- Modules.
load_module("query")
load_module("menu")
load_module("ionws")
load_module("floatws")
load_module("dock")

-- Set default modifier. Alt should usually be mapped to Mod1 on
-- XFree86-based systems. The flying window keys are probably Mod3
-- or Mod4; see the output of 'xmodmap'.
DEFAULT_MOD = "Mod1+"

-- Maximum delay between clicks in milliseconds to be considered a
-- double click.
--set_dblclick_delay(250)

-- For keyboard resize, time (in milliseconds) to wait after latest
-- key press before automatically leaving resize mode (and doing
-- the resize in case of non-opaque move).
--set_resize_delay(1500)

-- Opaque resize?
enable_opaque_resize(true)

-- Movement commands warp the pointer to frames instead of just
-- changing focus. Enabled by default.
enable_warp(true)

-- Kludges to make apps behave better.
include("kludges")

-- Make some bindings.
include("tzz-ion-bindings")

-- Define some menus (menu module required to actually use them)
include("ion-menus")

-- How to shorten window titles when the full title doesn't fit in
-- the available space? The first-defined matching rule that succeeds
-- in making the title short enough is used.
add_shortenrule("(.*) - Mozilla(<[0-9]+>)", "$1$2$|$1$<...$2")
add_shortenrule("(.*) - Mozilla", "$1$|$1$<...")
add_shortenrule("XMMS - (.*)", "$1$|...$>$1")
add_shortenrule("[^:]+: (.*)(<[0-9]+>)", "$1$2$|$1$<...$2")
add_shortenrule("[^:]+: (.*)", "$1$|$1$<...")
add_shortenrule("(.*)(<[0-9]+>)", "$1$2$|$1$<...$2")
add_shortenrule("(.*)", "$1$|$1$<...")

-- List of directories to look for manuals in the F1 man page query.
query_man_    "/usr/man",
    "/usr/share/man",
    "/usr/X11R6/man",
    "/usr/local/man"
}

Luaは登場してから10年ほど経っていますが、まだあまり広く知られていません。Luaは私が知っている他のスクリプト言語のどれとも異なっており、少し分かりにくいと思うIonユーザーは私一人ではありません。ただし、一旦慣れてしまえば、それまでの苦労は充分報われると聞いています。

リスト1での設定と、Ion 2にデフォルトで付いてくるion.luaを比較しても、大きな差はないと感じるでしょう。私のion.luaは主に、私がカスタム化したLuaファイル(このすぐ後に出てきます)をロードするための場所になっています。

Ion 2での描画オプションを制御する私のdraw.luaファイルは、Ionに付いてくるデフォルトのlook-clean.luaファイルの丸コピーなので、ここで説明する価値はありません。look-clean.luaファイルには良くコメントが付けられているので、Ionの色や外観をカスタム化したいのであれば、よくファイルを見てください。draw.luaファイルで私が加える変更は、フレームのタイトルのフォントを大きくすることだけです。こうしているのは、単に私がどこでも大きなフォントを使うのが好きだからです(目のためには、使える範囲で一番大きなフォントを使うことです)。

グローバルなキー割り当てはtzz-ion-bindings.luaにあります。もし私のキーボードと皆さんのキーボードでシンボルの位置が異なる場合には、キー再割り当てが必要かも知れません。例えば私の場合は作業空間0から6までに割り当てたキーは、テン・キーの数字の周りに3/4円を作ります。再割り当て用のキーの名前を見つけるには、xevプログラムを使うことができます。

DEFAULT_MODはMod1であることを忘れないでください。これは通常のLinuxシステムでは(そして大部分のUNIXでも)Altキーです。AltキーはMetaキーとしても知られていますが、Emacsではもちろん、EscキーでMetaにアクセスすることができます(一方SolarisではMetaキーは菱形のように見え、Altキーは単にAltです)。この最後の文の意味が分かる人であれば、ご同情申し上げます!

リスト2. tzz-ion-bindings.lua
-- Load a library to create common queries.
include("querylib")
-- Load a library to create menu display callbacks.
include("menulib")
global_bindings{
-- use the keys *around* the numbers on the keypad to switch
-- to workspaces 0 through 6
    kpress("KP_Divide", function(s) s:switch_nth(0) end),
    kpress("KP_Multiply", function(s) s:switch_nth(1) end),
    kpress("KP_Subtract", function(s) s:switch_nth(2) end),
    kpress("KP_Add", function(s) s:switch_nth(3) end),
    kpress("KP_Enter", function(s) s:switch_nth(4) end),
    kpress("KP_Decimal", function(s) s:switch_nth(5) end),
    kpress("KP_0", function(s) s:switch_nth(6) end),
-- convenient Ion control functionality
    kpress(DEFAULT_MOD..KEYF11, querylib.query_restart),
    kpress(DEFAULT_MOD..KEYF12, querylib.query_exit),
-- sometimes I need to "walk" through workspaces, instead
-- of switching to specific ones
    kpress(DEFAULT_MOD.."Shift+Left", WScreen.switch_prev),
    kpress(DEFAULT_MOD.."Shift+Right", WScreen.switch_next),
-- these are assigned with xmodmap to keys on my Logitech keyboard
    kpress("XF86Mail", make_exec_fn("emacs -name gnus -f gnus")),
    kpress("XF86Standby", make_exec_fn("xlock -mode matrix")),
    kpress("XF86AudioMute", make_exec_fn("aumix.sh")),
    kpress("XF86AudioRaiseVolume", make_exec_fn("/usr/bin/aumix -v+3")),
    kpress("XF86AudioLowerVolume", make_exec_fn("/usr/bin/aumix -v-3")),
    kpress("Shift+XF86AudioRaiseVolume", make_exec_fn("/usr/bin/aumix -v+1")),
    kpress("Shift+XF86AudioLowerVolume", make_exec_fn("/usr/bin/aumix -v-1")),
    kpress("XF86AudioPlay", make_exec_fn("xmms --play")),
    kpress("XF86AudioStop", make_exec_fn("xmms --pause")),
    kpress("XF86AudioPrev", make_exec_fn("xmms --rew")),
    kpress("XF86AudioNext", make_exec_fn("xmms --fwd")),
-- I run a lot of terminals, so this is a way to make sure that no
-- matter what X resources are loaded, I get a consistent look to my
-- terminals.
    kpress("XF86PowerOff", make_exec_fn("Eterm -f yellow --shade 100
	--term-name xterm --double-buffer -L 500000 --font
	-misc-fixed-bold-r-normal--14-130-75-75-c-70-iso10646-1")),
    kpress("Mod1+XF86PowerOff", make_exec_fn("xterm -bg black
	-fg yellow -fn -misc-fixed-bold-r-normal--14-130-75-75-c-70-iso10646-1
	-cr blue -geometry 80x50 -name term")),
-- essential programs for me
    kpress("XF86Start", make_exec_fn("emacs")),
    kpress("XF86Search", make_exec_fn("mozilla")),
-- miscellaneous menus
    kpress("Print", make_bigmenu_fn("mainmenu")),
    mpress("Button2", make_pmenu_fn("windowlist")),
    mpress("Button3", make_pmenu_fn("mainmenu")),
}
mplex_bindings{
    kpress_waitrel(DEFAULT_MOD.."Return",
                   make_mplex_clientwin_fn(WClientWin.toggle_fullscreen)),
-- Alt+W is short and sweet, yet hard to press accidentally
    kpress_waitrel(DEFAULT_MOD.."W", WMPlex.close_sub_or_self),
}
genframe_bindings{
    -- Tag an object
    kpress(DEFAULT_MOD.."Shift+A", WGenFrame.attach_tagged),
    -- Tag viewed object
    kpress(DEFAULT_MOD.."T", make_mplex_sub_fn(WRegion.toggle_tag)),
-- 6 and 4 on the keypad go back and forth between tabs.
-- this is very essential to my setup.  I couldn't use Ion without
-- these key bindings.
    kpress("KP_6", WGenFrame.switch_next),
    kpress("KP_4", WGenFrame.switch_prev),
-- miscellaneous frame-oriented bindings
    kpress(DEFAULT_MOD.."A", querylib.query_attachclient),
    kpress(DEFAULT_MOD.."G", querylib.query_gotoclient),
    kpress(DEFAULT_MOD.."F3", querylib.query_exec),
    kpress(DEFAULT_MOD.."F4", querylib.query_ssh),
    kpress(DEFAULT_MOD.."F5", querylib.query_editfile),
    kpress(DEFAULT_MOD.."F6", querylib.query_runfile),
    kpress(DEFAULT_MOD.."F7", querylib.query_lua),
    kpress(DEFAULT_MOD.."F9", querylib.query_workspace),
    kpress(DEFAULT_MOD.."M", make_menu_fn("ctxmenu")),
    mpress("Button3", make_pmenu_fn("ctxmenu"),"tab"),
}

そして最後に私のIonタイリング作業空間割り当てです。もちろん、これらもテン・キー指向になっています。

リスト3. ionws.lua
ionws_bindings{
-- I seldom have more than 2 vertical splits in an Ion workspace, so
-- I don't need dedicated keys to moving left and right between
-- them.  Since 6 and 4 were taken for tab navigation, I use the keypad
-- 5 to go to the next split to the left.  I can always go right with
-- Alt+Tab.
    kpress("KP_5" WIonWS.goto_left),
    kpress(DEFAULT_MOD.."Tab" WIonWS.goto_right),
-- horizontal splits are more frequent for me, so it's convenient to
-- move between them with the up/down (8 and 2) keypad keys.
    kpress("KP_Down", WIonWS.goto_below),
    kpress("KP_Up", WIonWS.goto_above),
}

ionframe_bindings{
-- these bindings left me make new splits in Ion.  They all use
-- the Pause key, because it's not used for anything else.
    kpress(DEFAULT_MOD.."Pause", function(frame) frame:split_empty("bottom") end),
    kpress("Pause", function(frame) frame:split_empty("right") end),
    kpress("Shift+Pause", function(frame) frame:close("right") end),
-- standard Ion functions to use the mouse when necessary
    mclick("Button1", WGenFrame.p_switch_tab, "tab"),
    mdblclick("Button1", WIonFrame.toggle_shade, "tab"),
    mdrag("Button1", WGenFrame.p_tabdrag, "tab"),
    mdrag("Button1", WGenFrame.p_resize, "border"),

    mclick("Button2", WGenFrame.p_switch_tab, "tab"),
    mdrag("Button2", WGenFrame.p_tabdrag, "tab"),

    mdrag(DEFAULT_MOD.."Button3", WGenFrame.p_resize),
}

ionframe_moveres_bindings{
-- resizing keys.  As much as I use Ion without the mouse,
-- I find it very convenient for resizing as opposed to the keyboard.
-- Your mileage may vary.
    kpress("AnyModifier+Escape", WIonFrame.cancel_resize),
    kpress("AnyModifier+Return", WIonFrame.end_resize),

    kpress("Left", function(f) f:do_resize( 1, 0, 0, 0) end),
    kpress("Right",function(f) f:do_resize( 0, 1, 0, 0) end),
    kpress("Up",   function(f) f:do_resize( 0, 0, 1, 0) end),
    kpress("Down", function(f) f:do_resize( 0, 0, 0, 1) end),
    kpress("F",    function(f) f:do_resize( 1, 0, 0, 0) end),
    kpress("B",	   function(f) f:do_resize( 0, 1, 0, 0) end),
    kpress("P",    function(f) f:do_resize( 0, 0, 1, 0) end),
    kpress("N",    function(f) f:do_resize( 0, 0, 0, 1) end),

    kpress("Shift+Left", function(f) f:do_resize(-1, 0, 0, 0) end),
    kpress("Shift+Right",function(f) f:do_resize( 0,-1, 0, 0) end),
    kpress("Shift+Up",   function(f) f:do_resize( 0, 0,-1, 0) end),
    kpress("Shift+Down", function(f) f:do_resize( 0, 0, 0,-1) end),
    kpress("Shift+F",    function(f) f:do_resize(-1, 0, 0, 0) end),
    kpress("Shift+B",    function(f) f:do_resize( 0,-1, 0, 0) end),
    kpress("Shift+P",    function(f) f:do_resize( 0, 0,-1, 0) end),
    kpress("Shift+N",    function(f) f:do_resize( 0, 0, 0,-1) end),
}

ion.luaにionwsモジュールをロードすると、ionws.luaは自動的にロードされることに注意してください。私のion.luaファイルに明示的な「require ionws」が無いのは、そのためです。

まとめ

変化は人生のスパイスですが、皆さんはこの記事から充分なスパイスが得られたのではないでしょうか。Ionは正統的なウィンドウ・マネージャーではありませんが、皆さんが自分で試してみれば、その価値が分かるでしょう。私は最近Windowsやその他フローティング・ウィンドウのデスクトップ環境を見ていると、フローティング・ウィンドウで妨害されなければユーザーの効率はどれほど向上するだろうか、と思わずにはいられません。フローティング・ウィンドウが常に悪いというわけではありませんが、大部分の場合、重なった時には時間と画面スペースの浪費になり、ユーザーがウィンドウをあちこちに動かさざるを得なくなることを私としては言いたいのです。

Ionのホーム・ページにはIonの哲学や開発に関する多くのリンクや説明があります。スクリーン・ショットを見るためにも、このホーム・ページを見てください。Ionの魅力は単純さと、目障りにならないことなので、華々しいウィンドウ・フレームやアニメーション付きの背景は無くても、Ionは皆さんのコンピューター環境を良くすべく懸命に働いていることを忘れないでください。


ダウンロード可能なリソース


関連トピック

  • Ion に興味を持つ人にとって Ionウィンドウ・マネージャーのホーム・ページ (US)は必須です。このサイトにはダウンロード用のファイルやディスカッション・リスト、リンク、それに動作中のIonのスクリーン・ショットなどが置かれています。
  • X.orgはX Windowシステムの背後にある団体です。
  • CDEは歴史的には重要なマネージャーですが、今はあまり使われなくなっています。デフォルトでDTWMを使っています。
  • KDEは現在主流のUNIXデスクトップ環境の一つです。デフォルトでKWinを使っています。
  • Gnomeも現在主流のUNIXデスクトップ環境の一つです。デフォルトでMetacity WMを使っています。
  • Enlightenmentはあらゆる華々しさを必要とする時には偉大なウィンドウ・マネージャーです。素晴らしい外観を備えたウィンドウ・マネージャーとしては他にfvwmicewmがあります(後者は実は、外観が良いだけではなく、非常にコンパクトでもあります)。
  • Ion以外に軽量なウィンドウ・マネージャーとしてはLarsWMRatpoisonがあります。この最後、RatpoisonはGNU screenに基づいており、これもマウス無しで操作することができます。また、GNU screen、Ratpoisonやその他最小限のウィンドウ・マネージャーに関する議論 (US)も見てみてください。
  • Luaをさらに学ぶための場所はたくさんあり、Programming in Lua(Ingram/Bertram Books, 2003年刊)はオンラインで読むことができます。活発なlua-usersメーリング・リストもあります。またlua-users wikiにはチュートリアルや非公式なFAQへのリンクがあります。
  • キーの再割り当てに関する古典的な資料としてJamie Zawinksi's XKey Capsがあります。またMITによるxmodmap help pageもあります。
  • developerWorksの「洗練されたPerl」シリーズにある、Ted著のPerl関連の記事も読んでください。
  • 最適化されたPerl開発環境の一部としてのEnlightenmentウィンドウ・マネージャーを、洗練されたPerl: あるプログラマーのLinux指向セットアップ(developerWorks, 2001年3月)の中でTedが説明しています。
  • developerWorksのLinuxゾーンにはLinux開発者向けの資料が他にも豊富ですのでご覧下さい。
  • Developer BookstoreのLinuxセクションにはLinux関連の書籍が値引きして購入できますので、ご利用ください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=228117
ArticleTitle=洗練されたPerl: Ionウィンドウ・マネージャーで遊ぶ
publish-date=09292004