emacs lisp要做一个toggle函数,也许是全局变量?

时间:2014-09-20 22:44:09

标签: emacs elisp

我正在尝试在emacs中创建切换功能。我试过if声明。它不会工作。你可以帮帮我吗。我实际上试图在两个主题之间切换功能,这就是为什么我要尝试这样做

(defun switch()
(interactive)

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用

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

答案 1 :(得分: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)) ) )

答案 2 :(得分:1)

其他答案的变体,没有将变量a暴露给世界其他地方:

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

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