2014-09-20 30 views
0

我想在emacs中做一个切换功能。我试过如果陈述。它不会工作。你可以帮帮我吗。其实我只是试图让一个函数来两个主题之间切换这就是为什么我试图做到这一点emacs lisp做一个切换函数,全局变量也许?

(defun switch() 
(interactive) 

(when (= a 1) 
    (message "true") 
    (setq a 2)) 

(when (= a 2) 
    (message "false") 
    (setq a 1)) 
) 

回答

2

您可以使用

(define-minor-mode foo-mode 
    "Doc." 
    :global t 
    (if foo-mode 
     <onething> 
    <another>)) 
+1

(限定小调模式暗模式 “暗和较暗主题之间切换”:全球吨 (如果暗模式 (负载主题“的Manoj暗吨) (负载主题”袋熊吨))) 这给了我一个变量绑定深度超过max-specpdl-size 错误 – photonist 2014-09-25 18:35:53

+0

确实,这会碰到defcustom和load-theme之间的问题交互,因为load-theme最终会重新设置所有Custom vars(和“上面的暗模式是Custom var)。你应该把这个报告为一个bug(通过'M-x report-emacs-bug')。 – Stefan 2014-09-25 21:22:07

1
(defvar a 1 "Initial setting for the `a` global variable.") 

(defun my-switch() 
"Doc-string for `my-switch` function." 
(interactive) 
    (cond 
    ((= a 1) 
     (message "true") 
     (setq a 2)) 
    ((= a 2) 
     (message "false") 
     (setq a 1)))) 
1

其他答案的一个变种,在不暴露一个变量a到世界其他地区:

(lexical-let (a) 
    (defun my/toggle() 
    (setq a (not a)) 
    (message (or (and a "true") 
      "false")))) 

当然中在使用lexical bindings的文件中,3210可以替换为let

相关问题