Next: , Previous: , Up: メニューキーアップ   [Contents][Index]


23.18.6 ツールバー

ツールバー(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はそのアイテムを表示する方法とアイテムの振る舞いを示すメニューアイテムキーバインディングです(拡張メニューアイテムを参照)。

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

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

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

:image image

imageは単一イメージ様式(single image specification)か4ベクターイメージ様式(vector of four image specifications)で指定する(イメージを参照)。4ベクターを使用する場合には状況に応じて以下のいずれかが使用される:

item 0

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

item 1

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

item 2

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

item 3

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

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

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

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

一部のツールキットにおいては、イメージとテキストの両方がツールバーに表示されます。イメージの使用だけを強制したければ、非nil:vert-onlyプロパティを使用してください。

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

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

Variable: tool-bar-map

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

(keymap-global-set "<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-maptool-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)

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

ツールバーアイテムを有効または無効に変更する関数があるとしても、その状態を必ずしも視覚的に即座に更新される訳ではありません。ツールバーの再計算を強制するにはforce-mode-line-updateを呼び出してください(モードラインのフォーマットを参照)。


Next: メニューの変更, Previous: メニューバー, Up: メニューキーアップ   [Contents][Index]