2012-08-08 57 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