emacs - elisp easy-menu positioning -



emacs - elisp easy-menu positioning -

this position emacs user defined menu @ place in menu bar.

here different options have used. none optimal

[from first principles]

;; define top level menue item "openflow" , position after "tools" (define-key-after global-map [menu-bar openflow] (cons "openflow" (make-sparse-keymap "openflow")) 'tools) ;; caution: menus defined in reverse order. end comes first!! (define-key global-map [menu-bar openflow openflow-download-mp] '("download openflow mp image target" . openflow-download-mp-image-to-target)) (define-key global-map [menu-bar openflow telnet-to-target] '("telnet target" . (lambda () (interactive) (telnet target)))) (define-key global-map [menu-bar openflow separator4] '("---")) ;; reading upwards: debugging etc starts here ;; here need add together new subheading first (define-key global-map [menu-bar openflow cleanups] (cons "cleanups" (make-sparse-keymap "cleanups"))) (define-key global-map [menu-bar openflow cleanups lp-emake-clean] '("lp emake_wrapper clean" . (lambda () (interactive) (openflow-emake-wrapper my-openflow-lp-build-path "clean")))) ;; etc etc etc...

[weaknesses]

very messy.. confusing esp. reverse order + submenu defs in forwards order :-)

easy mode automatic

if same thing in easy mode ..

(easy-menu-define openflow2 global-map "openflow2" '("openflow2" ["download openflow mp image target" openflow-download-mp-image-to-target t] ["telnet target" (telnet target)] "-----" ("cleanups" ["lp emake_wrapper clean" (openflow-emake-wrapper my-openflow-lp-build-path "clean")] )))

[weaknesses]

very intuitive, automatic, eliminates lamda functions etc etc etc.

however, adds in first position before "file" -- looks bad. there no way "define-key-after"

[hybrid model]

the "hybrid model" (define-key-after sparse-keymap , easy-menu-add-item) complicated messy

(define-key-after global-map [menu-bar openflow3] (cons "openflow3" (make-sparse-keymap "openflow3")) 'tools) (easy-menu-add-item nil '("openflow3") ["download openflow mp image target" openflow-download-mp-image-to-target]) (easy-menu-add-item nil '("openflow3") ["telnet target" (telnet target)]) (easy-menu-add-item nil '("openflow3") "-----") (define-key-after global-map [menu-bar openflow3 cleanups3] (cons "cleanups3" (make-sparse-keymap "cleanups3")) '("-----")) (easy-menu-add-item nil '("cleanups3") ["lp emake_wrapper clean" (openflow-emake-wrapper my-openflow-lp-build-path "clean")])

here cannot nested menus

please please tell newbie doing wrong?

what mean "nested menu"? if mean submenu reply same thing did top-level menu: utilize define-key bind key cons car submenu name , cdr menu keymap.

here illustration dired+.el. defines submenu of dired menu-bar menu mark, on variable diredp-menu-bar-mark-menu.

the menu keymap submenu value of variable diredp-mark-tags-menu, menu keymap parent menu (the menu-bar menu) value of variable diredp-menu-bar-mark-menu.

;; menu-bar `mark' menu. (defvar diredp-menu-bar-mark-menu (make-sparse-keymap "mark")) (define-key dired-mode-map [menu-bar mark] (cons "mark" diredp-menu-bar-mark-menu)) ;; `mark' > `tagged' submenu. (defvar diredp-mark-tags-menu (make-sparse-keymap "tagged") "`tags' submenu dired menu-bar `mark' menu.") (define-key diredp-menu-bar-mark-menu [mark-tags] (cons "tagged" diredp-mark-tags-menu)) (define-key diredp-mark-tags-menu [diredp-unmark-files-tagged-none] '(menu-item "unmark not tagged any..." diredp-unmark-files-tagged-none :help "unmark files not tagged *any* of tags enter"))

consult elisp manual, node defining menus, more info.

if want utilize easy-menu define submenu (as in comment, below), take @ library facemenu+.el. (for popup menu, not menu-bar menu, thought same).

for example:

(easy-menu-add-item facemenu-menu () (easy-menu-create-menu ; (menu-name menu-items) "syntax highlighting (font lock)" '(["in buffers" global-font-lock-mode :style toggle :selected global-font-lock-mode :active t] ["in current buffer" font-lock-mode :style toggle :selected font-lock-mode :active t] "--" ["more in current buffer" font-lock-fontify-more (nth 2 (if (boundp 'flm-font-lock-fontify-level) flm-font-lock-fontify-level font-lock-fontify-level))] ["less in current buffer" font-lock-fontify-less (nth 1 (if (boundp 'flm-font-lock-fontify-level) flm-font-lock-fontify-level font-lock-fontify-level))] "--" ["cycle keywords (icicles)" icicle-next-font-lock-keywords-repeat :active (and (boundp 'icicle-mode) icicle-mode (fboundp 'icicle-next-font-lock-keywords-repeat))] ["+ take keywords (icicles)" icicle-font-lock-keyword :active (and (boundp 'icicle-mode) icicle-mode (fboundp 'icicle-font-lock-keyword))])) "syntax highlighting (font lock)")

emacs elisp

Comments

Popular posts from this blog

assembly - What is the addressing mode for ld, add, and rjmp instructions? -

vowpalwabbit - Interpreting Vowpal Wabbit results: Why are some lines appended by "h"? -

Is there a way to convert an HTML page styled with Bootstrap CSS into email-compatible html? -