2014-02-12 55 views
2

我在設置markdown-command時遇到問題。我得到的符號作爲變量是無效的。我原本是在定製裏面設置的,並且一切正常。我想清理我的init.el,並且寧願將所有內容都保存在自定義之外並手動設置。Emacs:在自定義部分之外設置變量的問題

任何人都可以提供這方面的見解嗎?最近的東西,我看到在這裏:https://stackoverflow.com/questions/12058717/confusing-about-the-emacs-custom-system

謝謝。

;;General Settings 
    (global-auto-revert-mode t) ;;Refresh Buffers on File Change. 
    (setq-default indent-tabs-mode nil) ;;Use spaces instead of tabs. 
    (desktop-save-mode 1) ;;Save session 
    (show-paren-mode 1) ;;Show matching parenthesis 

    ;;Custom Load Paths 
    (add-to-list 'custom-theme-load-path "~/.emacs.d/themes/") ;;Look here for additional themes. 
    (add-to-list 'load-path "~/.emacs.d/modes/") ;;Look here for additional modes. 


    ;;Load Specific Them 
    (load-theme 'solarized-dark t) 

    ;;Marmalade Package Manager 
    (require 'package) 
    (add-to-list 'package-archives 
     '("marmalade" . 
      "http://marmalade-repo.org/packages/")) 
    (package-initialize) 

    ;;OSX Specific Settings 
    ;;Add /usr/local/bin and /opt/local/bin to execution path 
    (if (eq system-type 'darwin) 
     (setq exec-path 
       (append 
       '("/usr/local/bin" 
       "/opt/local/bin") 
       exec-path))) 


    ;;Markdown Specific Settings 
    (autoload 'markdown-mode "markdown-mode" 
     "Major mode for editing Markdown files" t) 
    (add-to-list 'auto-mode-alist '("\\.text\\'" . markdown-mode)) 
    (add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode)) 
    (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) 
    (if (eq system-type 'darwin) 
     (setq-default 'markdown-command '("/usr/local/bin/pandoc")) 
     (setq-default 'markdown-command '("/usr/bin/multimarkdown"))) 

(custom-set-variables 
;; custom-set-variables was added by Custom. 
;; If you edit it by hand, you could mess it up, so be careful. 
;; Your init file should contain only one such instance. 
;; If there is more than one, they won't work right. 
) 

(custom-set-faces 
;; custom-set-faces was added by Custom. 
;; If you edit it by hand, you could mess it up, so be careful. 
;; Your init file should contain only one such instance. 
;; If there is more than one, they won't work right. 
) 

按照建議我嘗試

(eval-after-load "markdown-mode" 
(if (eq system-type 'darwin) 
(setq markdown-command '("/usr/local/bin/pandoc")) 
(setq markdown-command '("/usr/bin/multimarkdown")))) 

然後我意識到我的錯誤。我沒有做過什麼建議。

(eval-after-load "markdown-mode" 
    (if (eq system-type 'darwin) 
    '(setq markdown-command ("/usr/local/bin/pandoc")) 
    '(setq markdown-command ("/usr/bin/multimarkdown")))) 

也如上所述eval-after-load "markdown-mode"是不需要的。

+0

使用'(setq-default markdown-command ...)'而不是'(setq-default'markdown-command ..)',它不需要引用'''。 – artscan

回答

0

這是不是一個偉大的想法,一般來說:

我本來定製的內部設置,並一切工作。我想清理我的init.el,並且寧願將所有內容都保存在自定義之外並手動設置。

是的,保持自定義您的初始化文件。但那不是意味着您需要放棄使用自定義。用它來做它的好處。並通過定義選項custom-file將其限制在自己的文件中。

對於您當前的問題,您需要而不是需要eval-after-load或任何其他代碼,以您希望的方式定義此選項。您只需要執行M-x customize-option RET markdown-command RET並在更新之後保存該值---在自定義中。

這是正確方式來定製用戶選項。

+0

很高興知道。我剛開始學習Emacs的最佳實踐。 感謝您的提示。 – Snowrider

2

代碼失敗,因爲變量markdown-commandmarkdown-mode中定義,並且尚未加載降價模式。您可以通過將此項添加到您的init文件中來安排在加載markdown-mode時設置該變量。

(eval-after-load "markdown-mode" 
    '(setq markdown-command '("/usr/bin/markdown"))) 

˚Feval-after-loadRET

Arrange that if FILE is loaded, FORM will be run immediately afterwards. 
If FILE is already loaded, evaluate FORM right now. 

UPDATE

如果你只希望保留自定義選項,你的init文件,你可以添加跟在你的init文件

0123之後
(setq custom-file "~/your-custom-file") 
(load custom-file) 
+0

仍然有相同的問題,使用你的建議: 我把變化的原始代碼 – Snowrider

+0

@Snowrider:你忘了'(如果...)'之前的報價(')。 – Drew

+0

我最終得到了它的工作原理並更新了原文。感謝幫助的人們,特別是關於把自定義放在自己的文件中的提示。 – Snowrider

1

的算法來保存你的設置是這樣的:如果變量是可定製的(尋找You can customize this variable.線在*Help*緩衝器底部的變量),你把

(custom-set-variables 
'(markdown-command '("/usr/local/bin/pandoc")) 
'(indent-tabs-mode nil)) 

到您的.emacs,否則您使用setq

當使用您的自定義的軟件包實際加載時,它會根據您的custom-set-variables調用正確設置變量。

+0

或者只需點擊'你可以自定義這個變量'鏈接,好吧,自定義它(並保存更改)。根本不需要擺弄「自定義集變量」。 – Drew

+1

@德魯:我不認爲我的英語(或任何其他語言)的命令是足以表達我對'定製'的厭惡。無可否認,這是多年以來,我不僅僅粗略地看待它,而且我懷疑任何實質性的改變都會變得更好。 – sds

+0

呃,奧凱。隨你。 ;-) – Drew