Next: , Previous: , Up: Menu Keymaps   [Contents][Index]


21.17.6 Tool bars

ツールバー(tool bar)とは、フレームの最上部、メニューバー直下にある、クリック可能なアイコンの行のことです。Tool Bars in The GNU Emacs Manualを参照してください。Emacsは通常、グラフィカルなディスプレイ上でツールバーを表示します。

各フレームでは、ツールバーに何行分の高さを割り当てるかを、フレームパラメーターtool-bar-linesが制御します。値0は、ツールバーを抑制します。値が非0で、auto-resize-tool-barsが非nilの場合、指定されたコンテンツを維持するのに必要な分、ツールバーは拡大縮小されます。値がgrow-onlyの場合、ツールバーは自動的に拡大されますが、自動的に縮小はされません。

ツールバーのコンテンツは、(メニューバーが制御されるのと似た方法により)tool-barと呼ばれる偽りの“ファンクションキー”に割り当てられたメニューキーマップにより制御されます。したがって、以下のようにdefine-keyを使用して、ツールバーアイテムを定義します。

(define-key global-map [tool-bar key] item)

ここでkeyは、そのアイテムを他のアイテムと区別する偽“ファンクションキー”で、itemはそのアイテムを表示する方法とアイテムの振る舞いを示すメニューアイテムキーバインディングです(Extended Menu Itemsを参照)。

メニューキーマップの通常のプロパティ:visible:enable:button:filterはツールバーバインディングでも役に立ち、いずれのプロパティも通常通りの意味をもちます。アイテム内のreal-bindingは、キーマップではなくコマンドでなければなりません。別の言い方をすると、これはツールバーアイコンをプレフィクスキーとして定義するようには機能しないということです。

:helpプロパティは、そのアイテム上にマウスがある間表示する、“help-echo”文字列を指定します。これは、テキストプロパティhelp-echoと同じ方法で表示されます(Help displayを参照)。

これらに加えて、:imageプロパティも使用するべきでしょう。これは、ツールバー内にイメージを表示するには、このプロパティを使用します。

:image image

imagesは単一イメージ様式(single image specification)、または4ベクターイメージ様式(vector of four image specifications)で指定する。4ベクターを使用する場合、状況に応じてそれらのうち1つが使用される:

item 0

アイテムが有効かつ選択されているとき使用される。

item 1

アイテムが有効かつ未選択のとき使用される。

item 2

アイテムが無効かつ選択されているとき使用される。

item 3

アイテムが無効かつ未選択のとき使用される。

GTK+およびNSバージョンのEmacsは、無効、および/または未選択のイメージをitem0から自動的に計算するので、item1からitem3は無視されます。

imageが単一イメージ様式の場合、Emacsはそのイメージにエッジ検出アルゴリズム(edge-detection algorithm)を適用することにより、ツールバーの無効な状態のボタンを描画します。

:rtlプロパティには、右から左に記述する言語のためのイメージ候補を指定します。現在のところ、これをサポートするのはGTK+バージョンのEmacsだけです。

メニューバーと同様、ツールバーはセパレーター(Menu Separatorsを参照)を表示できます。ツールバーのセパレーターは水平ラインではなく垂直ラインであり、1つのスタイルだけがサポートされます。これらは、ツールバーキーマップ内では(menu-item "--")エントリーで表されます。ツールバーのセパレーターでは、:visibleのようなプロパティはサポートされません。GTK+とNextstepのツールバーでは、セパレーターはネイティブに描画されます。それ以外では、セパレーターは垂直ラインイメージを使用して描画されます。

デフォルトツールバーは、コマンドシンボルのmode-classプロパティにspecialをもつメジャーモードにたいしては、編集に特化したアイテムは表示されないよう定義されています(Major Mode Conventionsを参照)。メジャーモードは、ローカルマップ内でバインディング[tool-bar foo]によって、グローバルバーにアイテムを追加するかもしれません。デフォルトツールバーの多くを適宜流用するのができないかもしれないため、デフォルトツールバーを完全に置き換えることは、いくつかのメジャーモードにとっては意味があります。デフォルトバインディングでtool-bar-mapを通じてインダイレクトすることにより、これを簡単に行うことができます。

Variable: tool-bar-map

デフォルトでは、グローバルマップは[tool-bar]を以下のようにバインドする:

(global-set-key [tool-bar]
                `(menu-item ,(purecopy "tool bar") ignore
                            :filter tool-bar-make-keymap))

関数tool-bar-make-keymapは、変数tool-bar-mapの値より、順に実際のツールバーマップをダイナミックに継承する。したがって、通常はそのマップを変更することにより、デフォルト(グローバル)ツールバーを調整すべきである。Infoモードのようないくつかのメジャーモードは、tool-bar-mapをバッファーローカルにして、それに異なるキーマップをセットすることにより、グローバルツールバーを完全に置き換える。

以下のような、ツールバーアイテムを定義するのに便利な関数があります。

Function: tool-bar-add-item icon def key &rest props

この関数は、tool-bar-mapを変更することにより、ツールバーにアイテムを追加する。使用するイメージはiconにより定義され、これはfind-imageに配置されたXPM、XBM、PBMのイメージファイルの拡張子を除いたファイル名(basename)である。たとえばカラーディスプレイ上では、値に‘"exit"’を与えるとexit.xpmexit.pbmexit.xbmの順に検索されるだろう。モノクロディスプレイでは、検索は‘.pbm’、‘.xbm’、‘.xpm’の順になる。使用するバインディングはコマンドdefで、keyはプレフィクスキーマップ内の偽ファンクションキーである。残りの引数propsは、メニューアイテム仕様に追加する、追加のプロパティリスト要素である。

あるローカルマップ内にアイテムを定義するためには、この関数呼び出しの周囲のlettool-bar-mapをバインドする:

(defvar foo-tool-bar-map
  (let ((tool-bar-map (make-sparse-keymap)))
    (tool-bar-add-item …)
    …
    tool-bar-map))
Function: tool-bar-add-item-from-menu command icon &optional map &rest props

この関数は、既存のメニューバインディングと矛盾しないツールバーアイテムの定義に有用である。commandのバインディングはmap(デフォルトはglobal-map)内よりルックアップ(lookup: 照合)され、iconにたいするイメージ仕様はtool-bar-add-itemと同じ方法で見つけ出される。結果のバインディングはtool-bar-mapに配されるので、この関数の使用はグローバルツールバーアイテムに限定される。

mapには、[menu-bar]にバインドされた適切なキーマップが含まれていなければならない。残りの引数propsは、メニューアイテム仕様に追加する、追加のプロパティリスト要素である。

Function: tool-bar-local-item-from-menu command icon in-map &optional from-map &rest props

この関数は、非グローバルツールバーアイテムの作成に使用される。in-mapに定義を作成するローカルマップを指定する以外は、tool-bar-add-item-from-menuと同じように使用する。引数from-mapは、tool-bar-add-item-from-menumapと同様である。

Variable: auto-resize-tool-bars

この変数が非nilの場合、定義されたすべてのツールバーアイテムを表示するために、ツールバーは自動的にリサイズ — ただし、そのフレーム高さの1/4を超えてリサイズされることはない。

値がgrow-onlyの場合、ツールバーは自動的に拡張されるが、自動的に縮小はされない。ツールバーを縮小するために、ユーザーはC-lをエンターしてフレームを再描画する必要がある。

GTK、またはNextstepとともにEmacsがビルドされた場合、ツールバーが表示できるのは1行だけであり、この変数は効果がない。

Variable: auto-raise-tool-bar-buttons

この変数が非nilの場合、ツールバーアイテムの上をマウスが通過したとき、浮き上がった形式(raised form)で表示される。

Variable: tool-bar-button-margin

この変数は、ツールバーアイテムの周囲に追加する余白(extra margin)を指定する。値はピクセル数を整数で指定し、デフォルトは4である。

Variable: tool-bar-button-relief

この変数は、ツールバーアイテムの影(shadow)を指定する。値はピクセル数を整数で指定し、デフォルトは1である。

Variable: tool-bar-border

この変数は、ツールバーエリアの下に描画するボーダー高さを指定する。値が整数の場合は、高さのピクセル数である。値がinternal-border-width(デフォルト)かborder-widthのいずれの場合、ツールバーのボーダー高さは、そのフレームの対応するパラメーターとなる。

シフト、メタ等の修飾キーを押下した状態でのツールバーアイテムのクリックにたいして、特別な意味を付与できます。偽りのファンクションキーを通じて、元のアイテムに関連する追加アイテムをセットアップすることにより、これを行うことができます。より具体的には、追加アイテムは、元のアイテムの命名に使用されたのと同じ偽ファンクションキーの修飾されたバージョンを使用するべきです。

つまり、元のアイテムが以下のように定義されている場合、

(define-key global-map [tool-bar shell]
  '(menu-item "Shell" shell
              :image (image :type xpm :file "shell.xpm")))

シフト修飾とともに同じツールバーイメージをクリックしたときは、以下のような方法で定義することができます:

(define-key global-map [tool-bar S-shell] 'some-command)

ファンクションキーにたいして修飾を追加する方法についての詳細な情報は、Function Keysを参照してください。