2014-09-20 27 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

相關問題