Добавить кнопку с динамическим меню на моделин Emacs? - PullRequest
8 голосов
/ 26 января 2012

Я делаю свой собственный второстепенный режим для emacs.Теперь я хочу добавить кнопку в моделин.Нажатие на эту кнопку должно вызвать всплывающее меню.Элементы этого меню зависят от действий пользователя.Я знаю, что есть способ добавить функциональную кнопку в modeline с помощью minor-mode-alist, но я не знаю, как создать динамическое меню.

Ответы [ 2 ]

6 голосов
/ 27 января 2012

Хорошо.Решение основано:

 (define-key my-mode-line-map 
   (vconcat [mode-line down-mouse-1]
     (list some_generated_id_for_future_use))
   (cons name function))

... и удалите с помощью

 (define-key my-mode-line-map 
   (vconcat [mode-line down-mouse-1] 
     (list id_of_button_that_u_gave_when_add))
   nil)
1 голос
/ 25 июня 2012

Я нашел более правильный способ: Когда вы определяете второстепенный режим, вы можете указать: lighter param

(define-minor-mode my-minor-mode
  "docstring"
  nil
  :lighter (:eval (format "%s%.5s" "#" "some code if you want dynamic label"))
  ;or just string :lighter "static string"
  :keymap my-minor-mode-map
... ... ... rest of code ....

тогда вы можете использовать easymenu:

(require 'easymenu)

(easy-menu-define my-minor-mode-menu
  my-minor-mode-map
  "Menu for my-minor-mode"
   '("some text"
      "-")) ;separator

; and then add menu items with easy-menu-add-item and remove with easy-menu-remove-item
; it's nothing hard. Read the docs ;)

Это меню будет добавлено в глобальную строку меню, и оно появится, если вы нажмете кнопку автоматического добавления (потому что вы указали: более светлый параметр) на вспомогательной кнопке моделина.

...