2012-01-26 8 views
8

Tworzę własny tryb pomocniczy dla emacsa. Teraz chcę dodać przycisk do modeliny. Kliknij ten przycisk, aby uzyskać wyskakujące menu. Pozycje tego menu zależą od działań użytkownika. Wiem, że istnieje sposób na dodanie przycisku funkcyjnego do modeliny z "minor-mode-alist", ale nie mam pojęcia, jak zrobić menu dynamiczne.Dodaj przycisk z dynamicznym menu do modeliny emacsa?

Odpowiedz

1

Znalazłam bardziej właściwy sposób: Podczas definiowania trybu niewielki, można określić: lżejszy 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 .... 

następnie można użyć 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 ;) 

To menu zostanie dodana do globalnego menu -bar i wyświetli się, jeśli klikniesz na auto dodany (bo to określiłeś: jaśniejszy parametr), przycisk trybu minorowego na modeline.

6

Ok. założony rozwiązanie :)
pierwsze:. zdefiniować jakąś mapę klawiszy:

(defconst my-mode-line-map 
    (let ((map (make-sparse-keymap))) 
    (define-key map [mode-line down-mouse-1] 
     (make-sparse-keymap)) 
    map)) 

drugie: listę propertized ciąg dołączania do Modeline:

(setq global-mode-string 
    (append global-mode-string 
    (list 
     (propertize string-name 
     'local-map my-mode-line-map 
     'mouse-face 'mode-line-highlight)))) 

trzecie: Teraz można dodać elementy z

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

... i usunąć przy pomocy

(define-key my-mode-line-map 
    (vconcat [mode-line down-mouse-1] 
    (list id_of_button_that_u_gave_when_add)) 
    nil) 
Powiązane problemy