2012-01-26 38 views
8

Tôi đang tạo chế độ nhỏ của riêng mình cho các emacs. Bây giờ tôi muốn thêm nút vào modeline. Nhấp vào nút này phải tạm dừng trình đơn bật lên xuất hiện. Các mục của menu này phụ thuộc vào hành động của người dùng. Tôi biết rằng có một cách để thêm một nút chức năng để mô hình hóa với 'nhỏ-mode-alist', nhưng tôi không có ý tưởng làm thế nào để làm cho menu năng động.Thêm nút với menu động vào mô hình của emacs?

Trả lời

1

tôi thấy cách thích hợp hơn: Khi bạn xác định chế độ nhỏ, bạn có thể chỉ định: param nhẹ

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

sau đó bạn có thể sử dụng 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 ;) 

Menu này sẽ được bổ sung vào thực đơn toàn cầu -bar và nó sẽ bật lên nếu bạn bấm vào tự động thêm vào (nguyên nhân bạn chỉ định: nhẹ hơn param) nút chế độ nhỏ trên modeline.

6

Ok. Giải pháp thành lập :)
Đầu tiên:. Xác định một số sơ đồ bàn phím:

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

Thứ hai: thêm danh sách với chuỗi propertized để modeline:

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

Thứ ba: Bây giờ bạn có thể thêm mục có

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

... và xóa bằng

(define-key my-mode-line-map 
    (vconcat [mode-line down-mouse-1] 
    (list id_of_button_that_u_gave_when_add)) 
    nil) 
Các vấn đề liên quan