2015-12-04 43 views
0

這是我在網上找到的功能,從來沒有在linux的問題,但在emacs 24中的MacBook上運行時,我得到下面的錯誤。任何幫助,將不勝感激。macbook上的emacs 24中的次要模式出錯

;; (define-minor-mode sensitive-mode 
;; "For sensitive files like password lists. 
;; It disables backup creation and auto saving. 

;; With no argument, this command toggles the mode. 
;; Non-null prefix argument turns on the mode. 
;; Null prefix argument turns off the mode." 
;; ;; The initial value. 
;; -1 
;; ;; The indicator for the mode line. 
;; " Sensitive" 
;; ;; The minor mode bindings. 
;; -1 
;; (if (symbol-value sensitive-mode) 
;;  (progn 
;; ;; disable backups 
;; (set (make-local-variable 'backup-inhibited) 1) 
;; ;; disable auto-save 
;; (if auto-save-default 
;;  (auto-save-mode -1))) 
;;  ;resort to default value of backup-inhibited 
;;  (kill-local-variable 'backup-inhibited) 
;;  ;resort to default auto save setting 
;;  (if auto-save-default 
;; (auto-save-mode 1)))) 
;; (setq auto-mode-alist 
;; (append '(("\\.gpg$" . sensitive-mode)) 
;;    auto-mode-alist)) 

錯誤是:

Debugger entered--Lisp error: (error "Invalid keymap -1") 
2 signal(error ("Invalid keymap -1")) 
3 error("Invalid keymap %S" -1) 
4 (cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "Invalid keymap %S" m))) 
5 (let ((m -1)) (cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "Invalid keymap %S" m)))) 
6 (defvar sensitive-mode-map (let ((m -1)) (cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "$ 
7 (progn (progn :autoload-end (defvar sensitive-mode -1 "Non-nil if Sensitive mode is enabled.\nUse the command `sens$ 
8 eval-buffer(#<buffer *load*-983931> nil "/Users/bigtyme/Dropbox/SyncedPrograms/emacs/initFiles/setup.el" nil t) ;$ 
9 load-with-code-conversion("/Users/bigtyme/Dropbox/SyncedPrograms/emacs/initFiles/setup.el" "/Users/bigtyme/Dropbox/$ 
10 load("/Users/bigtyme/Dropbox/SyncedPrograms/emacs/initFiles/setup.el" nil nil t) 
11 load-file("~/Dropbox/SyncedPrograms/emacs/initFiles/setup.el") 
12 eval-buffer(#<buffer *load*> nil "/Users/bigtyme/.emacs" nil t) ; Reading at buffer position 2000 
13 load-with-code-conversion("/Users/bigtyme/.emacs" "/Users/bigtyme/.emacs" t t) 
14 load("~/.emacs" t t) 
15 #[0 "^H\205\262^@  \306=\203^Q^@\307^H\310Q\202;^@ \311=\204^^^@\307^H\312Q\202;^@\313\307\314\315#\203*^@\316\2$ 
16 command-line() 
17 normal-top-level() 

回答

0

顯示定義次要模式(未註釋)的代碼。顯示綁定次要模式鍵盤映射中的鍵的任何代碼。您顯示的錯誤與您顯示的代碼沒有直接關係。

特別是,顯示defvar,它定義了鍵盤映射sensitive-mode-map。這是defvar sexp,似乎是問題。

這是由defvar使用的代碼,顯然:

(let ((m -1)) 
    (cond ((keymapp m) m) 
     ((listp m) (easy-mmode-define-keymap m)) 
     (t (error "Invalid keymap %S" m))) 

而清楚的m-1結合意味着,第三cond子句進行評價。這在任何Emacs平臺上都不可行,IMO除非你的初始化文件或其他代碼實際設置了那個之前的keymap的值。在那種情況下,defvar什麼都不會做。

1

define-minor-mode的第五個參數預計是一個鍵盤映射,其中您的示例將傳遞值-1

如果您沒有鍵盤映射,則應將其更改爲nil

... 
;; The minor mode bindings. 
nil         ;; Not -1 
(if (symbol-value sensitive-mode) 
... 

此外,通過-1作爲init-value並沒有真正意義或者,應該通常也nil

相關問題