Next: Modifying Menus, Previous: Menu Bar, Up: Menu Keymaps [Contents][Index]
ツールバー(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つが使用される:
アイテムが有効かつ選択されているとき使用される。
アイテムが有効かつ未選択のとき使用される。
アイテムが無効かつ選択されているとき使用される。
アイテムが無効かつ未選択のとき使用される。
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
を通じてインダイレクトすることにより、これを簡単に行うことができます。
デフォルトでは、グローバルマップは[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
をバッファーローカルにして、それに異なるキーマップをセットすることにより、グローバルツールバーを完全に置き換える。
以下のような、ツールバーアイテムを定義するのに便利な関数があります。
この関数は、tool-bar-map
を変更することにより、ツールバーにアイテムを追加する。使用するイメージはiconにより定義され、これはfind-image
に配置されたXPM、XBM、PBMのイメージファイルの拡張子を除いたファイル名(basename)である。たとえばカラーディスプレイ上では、値に‘"exit"’を与えるとexit.xpm、exit.pbm、exit.xbmの順に検索されるだろう。モノクロディスプレイでは、検索は‘.pbm’、‘.xbm’、‘.xpm’の順になる。使用するバインディングはコマンドdefで、keyはプレフィクスキーマップ内の偽ファンクションキーである。残りの引数propsは、メニューアイテム仕様に追加する、追加のプロパティリスト要素である。
あるローカルマップ内にアイテムを定義するためには、この関数呼び出しの周囲のlet
でtool-bar-map
をバインドする:
(defvar foo-tool-bar-map (let ((tool-bar-map (make-sparse-keymap))) (tool-bar-add-item …) … tool-bar-map))
この関数は、既存のメニューバインディングと矛盾しないツールバーアイテムの定義に有用である。commandのバインディングはmap(デフォルトはglobal-map
)内よりルックアップ(lookup:
照合)され、iconにたいするイメージ仕様はtool-bar-add-item
と同じ方法で見つけ出される。結果のバインディングはtool-bar-map
に配されるので、この関数の使用はグローバルツールバーアイテムに限定される。
mapには、[menu-bar]
にバインドされた適切なキーマップが含まれていなければならない。残りの引数propsは、メニューアイテム仕様に追加する、追加のプロパティリスト要素である。
この関数は、非グローバルツールバーアイテムの作成に使用される。in-mapに定義を作成するローカルマップを指定する以外は、tool-bar-add-item-from-menu
と同じように使用する。引数from-mapは、tool-bar-add-item-from-menu
のmapと同様である。
この変数が非nil
の場合、定義されたすべてのツールバーアイテムを表示するために、ツールバーは自動的にリサイズ —
ただし、そのフレーム高さの1/4を超えてリサイズされることはない。
値がgrow-only
の場合、ツールバーは自動的に拡張されるが、自動的に縮小はされない。ツールバーを縮小するために、ユーザーはC-lをエンターしてフレームを再描画する必要がある。
GTK、またはNextstepとともにEmacsがビルドされた場合、ツールバーが表示できるのは1行だけであり、この変数は効果がない。
この変数が非nil
の場合、ツールバーアイテムの上をマウスが通過したとき、浮き上がった形式(raised form)で表示される。
この変数は、ツールバーアイテムの周囲に追加する余白(extra margin)を指定する。値はピクセル数を整数で指定し、デフォルトは4である。
この変数は、ツールバーアイテムの影(shadow)を指定する。値はピクセル数を整数で指定し、デフォルトは1である。
この変数は、ツールバーエリアの下に描画するボーダー高さを指定する。値が整数の場合は、高さのピクセル数である。値が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を参照してください。