2012-01-26 7 views
8

Estoy haciendo mi propio modo menor para emacs. Ahora quiero agregar el botón a la línea de modo. Haga clic en este botón para que aparezca el menú emergente. Los elementos de este menú dependen de las acciones del usuario. Sé que hay una forma de agregar un botón de función a modeline con `minor-mode-alist ', pero no tengo idea de cómo hacer un menú dinámico.¿Agregar botón con menú dinámico a la línea de edición de emacs?

Respuesta

1

He encontrado forma más adecuada: Cuando se define el modo de menor importancia, puede especificar: param más ligero

(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 .... 

entonces puede utilizar 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 ;) 

Este menú se añadirá al menú global -bar y aparecerá si hace clic en automático agregado (porque ha especificado: más ligero param) botón de modo menor en modeline.

6

Ok. Solución fundada :)
Primera:. Definir algunas mapa de teclas:

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

En segundo lugar: la lista con una cuerda propertized anexar a Modeline:

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

Tercero: Ahora puede añadir elementos con

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

... y eliminar con

(define-key my-mode-line-map 
    (vconcat [mode-line down-mouse-1] 
    (list id_of_button_that_u_gave_when_add)) 
    nil) 
Cuestiones relacionadas