2012-01-26 16 views
8

मैं emacs के लिए अपना खुद का मामूली मोड बना रहा हूँ। अब मैं मॉडलिन में बटन जोड़ना चाहता हूं। पॉप-अप मेनू दिखाई देने के लिए इस बटन पर क्लिक करना चाहिए। इस मेनू के आइटम उपयोगकर्ता के कार्यों पर निर्भर करते हैं। मुझे पता है कि 'मामूली-मोड-एलीस्ट' के साथ मॉडेलिन में फ़ंक्शन बटन जोड़ने का कोई तरीका है, लेकिन मुझे नहीं पता कि डायनामिक मेनू कैसे बनाएं।emacs के मॉडलिन में गतिशील मेनू के साथ बटन जोड़ें?

उत्तर

1

मैं और अधिक उचित रास्ता मिल गया: जब आप मामूली मोड परिभाषित करते हैं, आपके द्वारा निर्दिष्ट कर सकते हैं: हल्का परम

(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 ;) 

यह मेनू वैश्विक मेनू में जोड़ दिया जाएगा -बार और यदि आप स्वत: जोड़े पर क्लिक करते हैं तो पॉप अप हो जाएगा (कारण आपने निर्दिष्ट किया है: लाइटर पैरामीटर) मॉडलिन पर मामूली मोड बटन।

6

ठीक है। समाधान की स्थापना की :)
पहले:।

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

दूसरा:: modeline को propertized तार के साथ सूची संलग्न: कुछ कीमैप को परिभाषित

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

तीसरा: अब आप के साथ आइटम जोड़ सकते हैं

(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) 
के साथ हटाएं