macbook上的emacs 24中的次要模式出错
问题描述:
这是我在网上找到的功能,从来没有在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()
答
显示定义次要模式(未注释)的代码。显示绑定次要模式键盘映射中的键的任何代码。您显示的错误与您显示的代码没有直接关系。
特别是,显示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
什么都不会做。
答
到define-minor-mode
的第五个参数预计是一个键盘映射,其中您的示例将传递值-1
。
如果您没有键盘映射,则应将其更改为nil
。
...
;; The minor mode bindings.
nil ;; Not -1
(if (symbol-value sensitive-mode)
...
此外,通过-1
作为init-value
并没有真正意义或者,应该通常也nil
。