2012-08-08 99 views
3

在emacs中的邪惡模式之上,我寫了一個擴展模式,它允許我在單個按鍵中插入數學和希臘語unicode字符。然而,代碼如下所示(數百行):Emacs lisp,簡潔的鍵盤映射

(define-key evil-unicode-state-map "a" "α") 
(define-key evil-unicode-state-map "b" "β") 
(define-key evil-unicode-state-map "g" "γ") 

我想知道是否有切割出所有的樣板的首選方式? 理想我想能寫出像下面這樣:

(setq evil-unicode-state-map 
    {"a" "α" 
    "b" "β" 
    "g" "γ"}) 

回答

7

一種方式做到這一點是:

(setq my-evil-unicode-state-map 
    '(("a" . "α") 
    ("b" . "β") 
    ("g" . "γ"))) 

(dolist (key-def my-evil-unicode-state-map) 
    (let ((key (car key-def)) (def (cdr key-def))) 
    (define-key evil-unicode-state-map key def))) 

編輯:(反映Ivan Andrus的評論)

如果my-evil-unicode-state-map不在別處使用,

(dolist (key-def 
     '(("a" . "α") 
      ("b" . "β") 
      ("g" . "γ")))) 
    (define-key evil-unicode-state-map (car key-def) (cdr key-def))) 
+1

你也可以'let'-bind' my-evil-unicode-state-map',這樣你就沒有額外的全局變量了。 – 2012-08-08 07:07:13

+0

@IvanAndrus謝謝你,你是對的。我只是希望它與問題中提供的模板儘可能相似。 – dkim 2012-08-08 07:45:15