FvwmButtons

名前
形式
説明
初期化
呼び出し
設定オプション
配置アルゴリズム
設定例
COPYRIGHTS ( 原文 )
著作権 ( 日本語訳 )
作者

名前

FvwmButtons − FVWM ボタンボックスモジュール

形式

FvwmButtons は fvwm によって実行されるので、コマンドライン からの呼び出しでは動作しません。

説明

FvwmButton モジュールは、 X の端末のルートウィンドウ上に居 座る複数のボタンからなるウィンドウを提供します。ユーザは、 いつでもそのボタンを押して、そのボタンにユーザがあらかじめ 指定したコマンドをウィンドウマネージャから呼び出すことがで きます。 FvwmButtons は fvwm がウィンドウマネージャとし て 使われているときに動作するのみです。

ボ タ ンボックスは、任意の設定、および任意の位置にできます し、呼び出される動作を表示するアイコンの色は白黒もカラーも 可です。

初期化

初期化の間、FvwmButtons は、ボタンボックス位置情報と色、ア イコン、動作を記述している設定ファイルを検索します。 こ の ファ イルの書式は後で説明します。設定ファイルは、fvwm がそ の初期化のときに使用するものです。

いくつかの異な る 設 定 で FvwmButtons を 使 う に は、 FvwmButtons をオプションパラメータ付きで呼びだすと、その代 わりの名前で使うようになります (例えば "Module FvwmButtons SomeButtons")。 こ の 場 合 SomeButtons は、設定ファイルの "*SomeButtons" から始まる行のみを読み、 FvwmButtons に対す る行を読みません。

ファイル名の 2 つ目の引数を与えることで、デフォルトの fvwm 設定ファイルの代わりに追加の設定ファイルを指定することもで き ます。これは、"*FvwmButtonsFile" の設定を上書きします。 以下を参照してください。

呼び出し

FvwmButtons は .fvwmrc ファイルに ’Module FvwmButtons’ と い う行を入れることで呼びだせます。 FvwmButtons を fvwm の 初期化の際に起動する場合は、これは InitFunction 内に置くべ きですが、あるいはそれを後で呼び出すためにメニューやマウス ボタン、キーストロークなどに割り当てることも 可 能 で す。 fvwm は設定オプションの ModulePath で指定されたディレクト リを探して FvwmButtons をみつけようとします。

設定オプション

FvwmButtons は .fvwmrc ファイルの以下のオプションを認識 し ます:

*FvwmButtonsBack color

これは、ボタンの背景色を指定します。浮き彫りと影の 色もこれから計算されます。

*FvwmButtonsColumns columns

これは、生成するボタンの列の数を指定します。指定し なかった場合、列の数は要求されたボタンの数を行の数 で割った数が設定されます。行と列の両方が設定 さ れ て、それに足りる数のボタンを指定しなかった場合、列 の指定は無視されます。

*FvwmButtonsFile filename

これは、このボタンに対する設定がファイル filename に書かれていることを意味します。この filename はフ ルパス名で与えるか、または fvwm の起動ディレクトリ に なければいけません。設定ファイルは、fvwm の設定 ファイルとほ ぼ 同 じ 書 式 で す が、 各 行 に は "*FvwmButtons" という接頭辞ががついているものとし て読まれます。"#" で始まる行はコメントと見なされ、 行末の "\" はその行が継続することを意味します。

*FvwmButtonsFont font

これには、ボタンのラベルに使われるフォントを指定す るか、または None を指定します。

*FvwmButtonsFore color

これは、ボタンのラベル文字列と、白黒アイコンで使わ れる色を指定します。

*FvwmButtonsFrame width

これは、各ボタンの周りの浮き彫りの幅を指定します。 これを負の値にすると、その浮き彫りはいつでも普通の 浮き彫りの逆になります。その結果、沈み込んだボタン が得られ、それはアクティブのときに浮かび上がること になります。

*FvwmButtonsGeometry geometry

こ れ は、FvwmButtons のウィンドウの位置を指定しま す。サイズは指定の必要はなく、FvwmButtons は自動的 に、すべてのボタンを綺麗に収納するようなサイズを自 動的に選択します。 geometry は、標準的な X11 ウィ ンドウの geometry 指定と同じです。

*FvwmButtonsPadding width height

ボタンの浮き彫りとボタンの内容部分との間の空白は、 通常は左右は 2 ピクセル、上下は 4 ピクセルですが、 取 り 込 ま れ た (swallow) ウィンドウとコンテナ (container) は別で、これらは特に命令が指定されてい なければ空白は何も入りません。この設定は、デフォル トの水平方向の空白のサイズを width ピクセルに、 垂 直方向を height ピクセルに指定します。

*FvwmButtonsPixmap pixmapfile

こ れ は、背景に使われるピクスマップ画像を指定しま す。透明な背景にしたい場合は "none" と指定してくだ さい。

*FvwmButtonsRows rows

これは、生成するボタンの行の数を指定します。指定し なかった場合は、2 行を使います。

*FvwmButtons(options) [title icon command]

これは、ボタンボックス内のボタンの内容を指定 し ま す。 以下の options をコンマ、あるいは空白区切りで ボタンに与えられます:

widthxheight

ボタンは、通常のボタンの横幅の width 倍に、通常 の 縦幅の height 倍になります。

Action [(options)] command

こ れは、ボタンが、return キーかマウスボタンを押さ れてアクティブになったときに実行される fvwm コマン ド command を指定します。 command が空白を含む場合 は、それらを引用符で囲まなければなりません。現在の オプション:

Mouse n - この動作 (action) はマウスボタンが n の ときのみ実行されます。一般的な動作に加えて、各マウ スボタンに一つの動作を定義できます。

Back color

これは、このボックスを描画するのに使用する背景色を 指定します。浮き彫りと影の色もこれから計算さ れ ま す。

Container [(options)]

これは、このボタンがボタンボックスのミニチュアを含 むことを意味しますが、これはほぼ他 の FvwmButtons モ ジュー ル を取り込む (swallow) ことと同等です。 options は、一つのボタンに与えるものと同じですが、 それらはここに含まれるすべてのボタンに影響します。 この使用に対して有効なオプショ ン は Back, Font, Fore, Frame, Padding です。 Title と Swallow オプ ションに対するフ ラ グ は、 Title( フ ラ グ) and Swallow( フ ラ グ) の形でセットできます。あなたは "Columns width" か "Rows height" のどちらかも指 定 すべきでしょうが、そうでなければコンテナの内側にボ タンを配置する目的で "Rows 2" が仮定されます。例と して、設定例 の節を参照してください。

コ ン テナボタン自体 (内容とは分離して) は、 FramePadding のような書式のオプションを取り、それ に コマンドを割り当てることができます。これは、以下の ようなコンテナの周りに微妙なレリーフを作れることを 意味します:

*FvwmButtons(2x2, Frame 5, Padding 2 2, Action Beep,\ Container(Frame 1))

多分、少なくとも widthxheight のサイズ設定をコンテ ナに与えたいと思うでしょう。

End

これは、現在のコンテナに対するこれ以上のボ タン定義がないこと、そしてこの後のボタンはコンテナ の親に置かれることを指定します。このオプションは、 それ自身を一つの行として置くべき、すなわち以下のよ うにします:

*FvwmButtons(End)

Font fontname

これは、このボタンのラベルにフォント fontname が使 われるようにします。

Fore color

これは、このボタンのタイトルと白黒アイコンの色を指 定します。

Frame width

ボ タ ン の浮き彫りが width ピクセル幅になります。 width を負の値にすると、その浮き彫りはいつでも普通 の浮き彫りの逆になります。その結果、沈み込んだボタ ンが得られ、それはアクティブのときに浮かび上がるこ とになります。

Icon filename

こ れは、ボタン上に表示されるアイコンの X11 ビット マップファイル (xbm)、または XPM カラーア イ コ ン ファ イ ル を指定します。 FvwmButtons は、アイコン ファイルを見つけるのに、 fvwm の設定項 目 で あ る IconPath や PixmapPath で指定されているパスを探し ます。

NoSize

このオプションは、最初のボタンサイズの計算の際にこ の ボ タンが何も考慮されないことを意味します。これ は、一行の中に入れておくには大きいピクセルサイズの 組が得られてしまうような特殊なボタンに有用で、これ によってボタンボックス全体が膨らんでしまうことを避 けることができます。

Padding width height

ボタンの浮き彫りとボタンの内容部分との間の空白は、 通常は左右は 2 ピクセル、上下は 4 ピクセルですが、 取 り 込 ま れ た (swallow) ウィンドウとコンテナ (container) は別で、これらはデフォルトでは空白は何 も入りません。

こ の オプションは、水平方向の空白のサイズを width ピクセルに、垂直方向を height ピクセルに設定 し ま す。

Size width height

これは、FvwmButtons がアイコンとタイトルのから計算 するサイズには無関係に、このボタンの内 容 部 分 が width x height ピクセルを要求することを指定しま す。取り込まれた (swallow) ウィンドウだけのボタ ン バー は、 FvwmButtons が取り込まれたボタンのサイズ を考慮しないために、このオプションを指定しなければ それほど大きくはなりません。他のボタンはボタンボッ クスにより大きいサイズを要求する可能性がありますの で、このオプションは、最小のスペースの保証を与える だけであることに注意してください。

Swallow [(flags)] hangon command

これは、FvwmButtons に command を実行させ、 hangon という名前に一致するウィンドウが現れたときにこのボ タンの中にそのウィンドウを捕みとって取り込みます。 例:

*FvwmButtons(Swallow XClock ’Exec xclock &’)

これは、名前かクラス、またはリソースが "XClock" で ある最初のウィンドウを取り、それをボタンの中に表示 します。モジュールは、’Exec ほにゃら’ の代わりにモ ジュールを指定することで取り込むことができ ま す。 例:

*FvwmButtons(Swallow "FvwmPager" "FvwmPager 0 0")

Swallow には以下の flags を指定できます:

NoClose / Close - これは、このボタンの中に取り込ま れ たプログラムが、 FvwmButtons がきれいに終了した ときに開放されるか、または閉じられるかどうかを指定 します。

NoHints / Hints - これは、このボタンの中に取り込ま れたプログラムからのヒント情報を無視するかどうかを 指定します。これはウィンドウ自身を、そのボタンに合 うように強制的にリサイズするのに便利です。デフォル トの値は "Hints" です。

NoKill / Kill - これは、取り込まれたプログラム を、kill することで閉じるか、またはそのメッセー ジ を送ることで閉じるかを指定します。これは、ウィンド ウマネージャプロトコルを受け付けないプログラムを終 了 す る と き に 便 利 でしょう。デフォルトの値は "NoKill" です。また、これは "NoClose" を指定した場 合は意味を持ちません。

NoRespawn / Respawn - これは、取り込んだプログラム が殺されるときに、それを再び起動するかどうかを指定 し ます。 "Respawn" が指定された場合、そのプログラ ムは元の command によって起動されます。そのプロ グ ラムが死ぬことにはとても合理的な理由がある場合もあ りますので、このオプションは注意して使ってく だ さ い。

NoOld / UseOld - これは、名前 hangon に一致する既 に存在するウィンドウを、それ自身を command で起 動 す る 前に取り込もうとするかどうかを指定します。デ フォ ル ト の 値 は "NoOld" で す。 "UseOld" は、"NoKill" と 組み合わせて使用することで、その ウィンドウをウィンドウマネージャの再起動 (restart) を切り抜けて生き残るようにできます。

*FvwmButtons(Swallow (UseOld) "Console" Nop)

それをあなた自身で起動できるようにしたい場合、それ を一つの Action と組み合わせてください:

*FvwmButtons(Swallow (UseOld) "Console" Nop, \ Action ‘Exec "Console" console &‘)

NoTitle / UseTitle - これは、ボタンのタイトルを 取 り込んだウインドウのタイトルから取るか、そうしない かを指定します。 "UseTitle" を指定した場合、ボタン のタイトルはウィンドウの名前を反映して動的に変化し ます。デフォルトは "NoTitle" です。

Title [(options)] name

これは、ボタンに書かれるタイトルを指定します。タイ トルを引用符で囲むことで空白をタイトルに含ませるこ とも可能です。そのボタンに対するタイトルが長すぎる 場合は、その文字列はそれが丁度合う長さになるまで一 つずつ切りとられていきます。 justify が "Right" の 場合、文字列の先頭の方が削除されていき、そうでない 場合は最後の方が切り取られます。 Title には以下 の options を指定できます:

Center - タイトルは水平方向にセンタリングされま す。これはデフォルトです。

Left - タイトルは左端に合わせられます。

Right - タイトルは右端に合わせられます。

Side - これは、タイトルを表示位置を、デフォルト で あ るアイコンや取り込まれた (swallow) ウィンドウの 下ではなくそれらの右側にタイトルを表示するようにし ます。小さいアイコンを使う場合は、これと "Left" オ プションを使うことで、 fvwm のメニューと同様の見た 目を得ることができます。

Legacy fields [title icon command]

こ のフィールドは以前の版の FvwmButtons との互換性 を維持するもので、使用は勧められません。フィールド title は、オプション Title name と同等です。 title フィールドが "-" の場合は、タイトルは何も表示さ れ ま せ ん。フィールド icon は、オプション Icon icon と同等です。 icon フィールドが "-" の場合は、ア イ コ ンは何も表示されません。フィールド command は、 オプション Action command、またはもう一つ Swallow "hangon" command と同等です。

コマンド

FvwmButtons は、任意の fvwm コマンドを認識します。 これに関するより詳しい情報は fvwm(1) を参照して く だ さい。 Exec コマンドを Actions で使う場合は、少 し拡張されています。書式は以下の通りです:

Exec ["hangon"] command

FvwmButtons がそのような Exec コマンドを見つ け る と、コマンドの引用符で囲まれた部分が、その名前やク ラスに一致するようなウィンドウに出会うまで、そのボ タンは、押されたままになります。これは、ユーザが要 求した動作がこれから実行されるんだということを見た 目の反応としてユーザに提供する、ということを目的と しています。引用符で囲まれた部分が空文字列である場 合、ボタンはすぐに前に出てきます。それが「押し込ま れた」状態であっても、ユーザがボタンを押し続けるこ とでそのコマンドを再度実行できることに注意してくだ さい。

引用符

空白を含む文字列は、必ず引用符で囲む必要が あ り ます。それは、コマンドでも同じです。以下の 3 種類の引用符文字は、引用符として使えます; 単一引用 符:

’これは "引用" です’,

二重引用符:

"これは別の ’引用’ です"

逆引用符:

‘これは 変わった 引用 かな‘

逆 引用符は、以下のように FvwmCpp のようなプリプロ セッサを使ってそこにあなたのコマンドを挿入させたい ような目的のためのものです:

#define BG gray60 *FvwmButtons(Swallow "xload" ‘Exec xload -bg BG &‘)

配置アルゴリズム

FvwmButtons は、コンテナがある場合はボタンボックス自体を含 む各コンテナに対して再帰的に、以下のアルゴリズムを用いてそ れらのボタンをできるだけ最良の配置にしようとします。

サイズを正しく取得

最初に、それが必要とするボタン単位面積での総数を、 各ボタンのボタン単位の横幅と高さの積を加えていくこ とで計算します。コンテナは、とりあえず標準的なボタ ン 一 つと考えます。それから、引数 rowscolumns の値を考慮します。行 (rows) の数が与えられている場 合、 列 (columns) はどれだけ必要かを考え、 columns の値がその必要な数より大きくない場合でもそれを使い ますので、その場合はボタンボックスの下にいくらか空 のスペースができることになります。列の数が与えられ ている場合、すべてのボタンが丁度合うのにどれくらい の行の数が必要かを計算します。どちらも与えな い 場 合、 行数は 2 と仮定され、列の数はボタンの面積数か ら計算されます。

ボタンのシャッフル

さて、これでボタンをその中に配置するのに十分な領域 が得られることになりますので、残っているのは、これ らを正しく配置することです。そのアルゴリズムは、ボ タンがすべて単位サイズであると仮定し、それらを左か ら右に、上から下へと西洋風の方式で配置してい き ま す。 まずボタン 1 を見て、このボタンは標準よりも大 きいかと考えます。そうでなければ、その次のボタンに 対 しても同じことを行います。 1x1 よりも大きいボタ ンがみつかった場合、それにスペースを用意しないとい けません。このアルゴリズムは、それが正しい座標であ ると仮定し、その左上の角を変更しません。そして、こ の ボ タンが必要とする場所に重なるボタンを "スライ ド" させます。そのボタンは右にスライドし、右端のも のは次の行へ折り返します。このボタンに対するすべて のスペースが綺麗になったときに、このアルゴリズムは 次のボタンに対する処理に移り、同じことを行います。

コンテナ

コンテナは同じアルゴリズムで配置され、実際にそれら はそれらを見つけたアルゴリズムで再帰的にシャッフル されます。

明確にする例

ここの例は有用だと思います: 6 つのボタンがあ る と し、 2 番は 2x2 のサイズで、それ以外はすべて単位サ イズであるとします。この場合、全体のボタン面積数は 1 が 5 つ、4 が 1 つで合計 9 となります。ここで、3 列を指定したとします。

1) +---+---+---+   2) +---+---+---+   3) +---+---+---+
   | 1 | 2 | 3 |      | 1 | 2 |   |      | 1 | 2 |   |
   +---+---+---+      +---+---+---+      +---+---+---+
   | 4 | 5 | 6 |      | 3 | 4 | 5 |      | 3 |   | 4 |
   +---+---+---+      +---+---+---+      +---+---+---+
   |           |      | 6 |       |      | 5 | 6 |   |
   +-----------+      +---+-------+      +---+---+---+

4) +---+---+---+   5) +---+-------+
   | 1 | 2 |   |      | 1 |       |
   +---+---+---+      +---+   2   |
   | 3 |   |   |      | 3 |       |
   +---+---+---+      +---+---+---+
   | 4 | 5 | 6 |      | 4 | 5 | 6 |
   +---+---+---+      +---+---+---+

このアルゴリズムは、図 1 で開始されます。最初の 大 き なボタンを 2 番のボタンと見つけ、そしてそのボタ ンが占有する部分の単位領域を、それぞれ左から右へ、 上から下へという順に開放しようとします。最初に、ボ タン 3 にこれを適用し、全体をずらして図 2 のように し ま す。次は、ボタン 4 にこれを適用し、 4 から 6 までのボタンを 1 度ずつずらしていって結局図 4 のよ う になります。これで、ボタン 2 の要求するすべての 単位領域が開放され、ボタン 2 の実際のサイズが得 ら れることになります。

ボタンのサイズはどうなるか ?

FvwmButtons が設定で要求されているアイコンとフォン トを読んだときに、取り込んだ (swallow) のでない す べてのボタンが必要とするサイズを見い出すことができ ます。コンテナの単位ボタンサイズは、無理矢理詰め込 まなくても最も大きいボタンがその中に入るように十分 大きく設定されます。取り込んだウィンドウには、この 仕組みから得られるボタンサイズでゆったりとできるこ とを単純に期待します。取り込んだあるウィンドウに対 して、より大きなスペースを要求する特定の設定が必要 な場合、それはボタンの設定行でオ プ ショ ン "Size width height" を使うことで設定できます。これは、こ のボタンの浮き彫りや空白の内側に少なくとも width x height ピクセルを与えるよう FvwmButtons に伝えま す。

設定例

以下の例は、.fvwmrc ファイルから FvwmButtons の初期化コ マ ンドを記述する部分を抜き出したものです:

##########################################################
# fvwm の初期化の際に起動されるべき任意のモジュールをロード

ModulePath /usr/lib/X11/fvwm:/usr/bin/X11

# FvwmButtons がまちがいなく常にあるようにする
AddToFunc InitFunction     "I" Module FvwmButtons
AddToFunc RestartFunction  "I" Module FvwmButtons

# それをタイトルバーなし、sticky とし、アイコンを指定

Style "FvwmButtons"

Icon toolbox.xpm, NoTitle, Sticky

##########################################################

*FvwmButtonsFore Black
*FvwmButtonsBack rgb:90/80/90
*FvwmButtonsGeometry -135-5
*FvwmButtonsRows 1
*FvwmButtonsFont -*-helvetica-medium-r-*-*-12-*
*FvwmButtonsPadding 2 2

*FvwmButtons(Title Resize,Icon resize.xpm ,Action Resize)
*FvwmButtons(Title Move ,Icon arrows2.xpm,Action Move )
*FvwmButtons(Title Lower ,Icon Down ,Action Lower )
*FvwmButtons(Title Raise ,Icon Up ,Action Raise )
*FvwmButtons(Title Kill ,Icon bomb.xpm ,Action Destroy)

*FvwmButtons(1x1,Container(Rows 3,Frame 1))
*FvwmButtons(Title Dopey ,Action \
‘Exec "big_win" xterm -T big_win -geometry 80x50 &‘)
*FvwmButtons(Title Snoopy, Font fixed, Action \
‘Exec "small_win" xterm -T small_win &‘)
*FvwmButtons(Title Smokin’)
*FvwmButtons(End)

*FvwmButtons(Title Xcalc, Icon rcalc.xpm,\
Action ‘Exec "Calculator" xcalc &‘)
*FvwmButtons(Title XMag, Icon magnifying_glass2.xpm,\
Action ‘Exec "xmag" xmag &‘)
*FvwmButtons(Title Mail, Icon mail2.xpm,\
Action ‘Exec "xmh" xmh &‘)
*FvwmButtons(4x1, Swallow "FvwmPager" ‘FvwmPager 0 3‘\
Frame 3)

*FvwmButtons(Swallow(UseOld,NoKill) "xload15" ‘Exec xload\
-title xload15 -nolabel -bg rgb:90/80/90 -update 15 &‘)

最後から一つ前の行はやや巧妙で、これは、FvwmPager モジュー ルを起動し、それを 4 倍幅のボタンの表示として取り 込 み ま す。ページャはボタンの浮き彫りの内側でできるだけ大きくなり ます。

最後の行はさらに奇妙で、UseOldNoKill の組合せになってい る ことに注意してください。これは、起動時に "xload15" とい う名前の既に存在しているウィンドウを取り込もうとし (失敗す れば指定されたコマンドを実行します)、これは FvwmButtons が 終了するときに開放されます。

色の指定 rgb:90/80/90 は、実際には X の独立した色指定の 最 も 正しい方法で、古い形式 #908090 に代えて使うべきです。後 者の指定を設定ファイル内で使った場合、実行され る command の 中の色のハッシュマーク (#) を (バックスラッシュで) 確実 にエスケープしないと、 fvwm はその行の残りをコメントとして 見なしてしまいます。

COPYRIGHTS ( 原文 )

The FvwmButtons program, and the concept for interfacing this module to the Window Manager, are all original work by Robert Nation

Copyright 1993, Robert Nation. No guarantees or warranties or anything are provided or implied in any way whatsoever. Use this program at your own risk. Permission to use this program for any purpose is given, as long as the copyright is kept intact.

Further modifications and patching by Jarl Totland, copyright 1996. The statement above still applies.

著作権 ( 日本語訳 )

FvwmButtons プログラムと、ウィンドウマネージャ と こ の モ ジュー ル の 相 互 のやりとりに関する概念は、すべて Robert Nation のオリジナルな仕事によるものです。

1993 年の Robert Nation による著作物です。いかなる保険も、 いかなる保証も、そしてそれ以外の何ものも、全くどんな方法で も与えられませんし暗示もしません。このプログラムはあなた自 身の責任で使用してください。このプログラムは、この著作権が このまま保持されている間はどんな目的であってもその使用が許 可されます。

さらなる修正とパッチが 1996 年 Jarl Totland による著作物と して与えられました。上の記述はこちらにも適用されます。

作者

Robert Nation. Jarl Totland によるいくらかの拡張。