(defun [メニュー名] () (setq [変数] (define-popup-menu [メニューの中身] )) (insert-popup-menu *app-menu* (get-menu-position *app-menu* 'ed::[表示位置]) [変数] "[メニュー名(&[キー])")) (add-hook '*init-app-menus-hook* #'[メニュー名])
add-hook
の部分)。半角英数。insert-popup-menu
の部分)。これも半角英数。window
とすると「ウィンドウ(W)」の左隣に作られます。(:item [タグ] [メニュー名(&[キー])] '[関数 [表示設定]])
メニュー項目です。
nil
でいいのかも。:modified
:undo
:redo
:selection
:rectangle
:clipboard
:check
:disable
なお、ここで関数を指定することもできます。例えば、
(defun check-init (&optional prog) (or (and (get-buffer-file-name *buffer-bar-context-menu-buffer*) (if prog (file-exist-p prog) t)) :disable))
という関数を作っておいて、[表示設定]
のところで'check-init
と書くと、バッファにファイルが読み込まれていなかったら灰色表示になります(要するに「バッファにファイルがなかったら:disableとする」という関数)。
(:popup [タグ] [メニュー名(&[キー])] [メニューの中身])
メニューを階層化するときの、グループの親に当たるもの(何て言うんだろう)を作成します。:item
と違って関数とかがありませんが、その他は:item
と同じです。また、[メニューの中身]
も上の方で書いてるものと同じで、要するに:item
、:popup
、:sep
が含まれます。
(:sep [タグ]) (:separator [タグ])
セパレータです。[タグ]
は省略できます。その場合は、(:sep)
ではなく:sep
と書いても構いません。
(add-hook '*init-app-menus-hook* #'(lambda () (let (([追加する場所] (get-menu *app-menu* 'ed::[追加する場所]))) [メニューの中身] )))
新規に作成する場合とは書式が違っています。
(defun browserex-menu () (setq *browserex-menu-item* (define-popup-menu (:item nil "編集バッファにフォーカス(&E)" 'bx:browserex-set-focus-editor) (:item nil "ブラウザにフォーカス(&B)" 'bx:browserex-set-focus-browser) :sep (:popup nil "表示切り替え(&V)" (:item nil "ブラウザ窓の表示(&O)" 'bx:navigate-current-buffer) (:item nil "ブラウザ窓を閉じる(&C)" 'bx:close-browser) (:item nil "ブラウザ窓の位置(&P)" 'bx:rotate-browser) ) :sep (:item nil "戻る(&,)" 'bx:go-back-browser) (:item nil "進む(&.)" 'bx:go-forward-browser) )) (insert-popup-menu *app-menu* (get-menu-position *app-menu* 'ed::window) *browserex-menu-item* "Browserex(&B)")) (add-hook '*init-app-menus-hook* #'browserex-menu)
browserex.l用のメニューを作ってみました。これでこんな感じのメニューになります。
Browserex(B) ・編集バッファにフォーカス(E) ・ブラウザにフォーカス(B) ----------------------------- ・表示切り替え(V) ・ブラウザ窓の表示(O) ・ブラウザ窓を閉じる(C) ・ブラウザ窓の位置(P) ----------------------------- ・戻る(,) ・進む(.)