ツールバーのカスタマイズ

Last modified: "2019/01/03 23:49:01"

Intro

さわりの部分だけ。

もともと「標準ツールバー」(lisp/cmdbar.l の std-tool-bar) を初期化ファイルにコピーし、 カスタマイズして使っていたのですが、それもナニなので、自分用のツールバーを作成して使うようにしてみました。


Table of contents


ツールバーカスタマイズ用関数

メニューをカスタマイズする関数には、次のようなものがあります。

create-tool-barツールバーを作成します。
define-command-barメニューの [表示]-[ツールバー] の一覧に追加します。
delete-command-barツールバー情報を削除します。
show-tool-barツールバーを表示します。
show-command-barツールバーを表示します。
hide-tool-barツールバーを隠します。
hide-command-barツールバーを隠します。

詳細は、リンク先のリファレンスを参照下さい。


ツールバーの定義

lisp/cmdbar.l の std-tool-bar を参考に、初期化ファイルに自分用のツールバーを定義してみます。 以下は、私のツールバーの定義です。

(defun my-std-tool-bar ()
  (create-tool-bar
   'my-std-tool-bar
   (merge-pathnames "toolbar.bmp" (etc-path))
   '(("バッファ"   21 bufmenu-popup)
     ("新規作成"   24 new-file)
     ("開く"       22 open-file-dialog)
     ("上書き保存" 20 save-buffer-with-time-stamp :modified)
     ("自動保存"   75 toggle-auto-save-buffers (lambda () (when *auto-save-buffers* :check)))
     :sep
     ("印刷"     29 print-selected-buffer-dialog)
     :sep
     ("切り取り"  7 kill-selection-to-clipboard :modify-selection)
     ("コピー"    9 copy-selection-to-clipboard :selection)
     ("貼り付け"  2 paste-from-clipboard :clipboard)
     :sep
     ("元に戻す"  0 undo :undo)
     :sep
     ("検索"      5 search-dialog)
     ("前を検索"  3 search-backward-again ed::tool-bar-update-search)
     ("次を検索"  4 search-forward-again ed::tool-bar-update-search)
     ("grep"     74 grep-dialog)
     :sep
     ("折り返さない" 76
      set-buffer-fold-type-none set-buffer-fold-type-none-update)
     ("ウィンドウ幅で折り返す" 78
      set-buffer-fold-type-window set-buffer-fold-type-window-update)
     :sep
     ("ispell" 15 (lambda () (interactive) (ed::map-selection #'ispell-region)))
     ("辞書" 36 edict-mode (lambda () (when edict-mode :check)))
     ("auto-fill" 34 auto-fill-mode (lambda () (when auto-fill :check)))
     :sep
     ("browser" 45
      (lambda () (interactive)
        (if (bx::browser-open-p)
            (bx:close-browser)
          (bx:navigate-current-buffer)))
      (lambda () (when (bx::browser-open-p) :check)))
     :sep
     ("filer" 28 open-filer)
     :sep
     ("cleanup-window" 6 cleanup-window)
     )))

各項目の記述形式は、("表示文字列" アイコン番号 関数 状態制御) となります。必要に応じ好きなように追加・編集・削除してください。 状態制御は、必須ではありません。状態制御の詳細は、リファレンスを参照ください。

「表示文字列」は、マウスカーソルをボタンの上に合わせたときに表示されるツールチップの文字列です。

「アイコン番号」は、表示するアイコンの指定です。ここでは、 アイコン用のビットマップファイルに etc/toolbar.bmp を指定しているので、 その画像における位置を指定します。 etc/toolbar.bmp を表示してみると、よくわかると思います。

「関数」には、実行する関数を記述します。ここでは ラムダ式 を使うことができるようです。 例えば「ispell」では、セレクションに対してスペルチェックを行なう手続を記述しています。 また、「browser」では、「ブラウザが開いていれば閉じる、さもなくば、バッファをブラウザで表示する」 ようにしています。

同じく、「状態制御」にもラムダ式を使うことができるようです。例えば「辞書」では、 変数 edict-mode の値が t であれば、ボタンがへこんで表示されます。 この機能を使うと、トグルの状態が視覚的に確認できて便利です。

上記の定義中には、いくつか外部ライブラリとかの必要なものがあります。 使わないようでしたら、削除しておいて下さい。

次に、定義したツールバーを「私の(&M)」という名前で登録します。

(define-command-bar 'my-std-tool-bar "私の(&M)")

以上の記述をした後、初期化ファイルの設定を反映させると、メニューの [表示]-[ツールバー] に、「私の(&M)」 という項目が追加されていると思います。

その他にも、罫線モードを良く使うのであれば、こんなのも良いかもしれません。

("罫線" 60 box-drawings-mode (lambda () (when *box-drawings-mode* :check)))
("太線" 16 box-drawings-toggle-line-type
 (lambda () (when (eq *box-drawings-line-type* '*box-drawings-thick-line*) :check)))

※「太線」用のアイコンは、それらしいものがみつかりませんでした。^_^;


ツールバーの削除

 ツールバーを削除する場合は、以下の式を評価して、ツールバー情報を抹消します。

(delete-command-bar 'my-std-tool-bar)

リンク

更新履歴

[2003/06/11]
・「私のツールバー定義」中のtool-bar-update-search を ed::tool-bar-update-search に修正した。