2015-12-04 10 views
0

Это была функция, которую я где-то нашел в сети и никогда не испытывал проблем с linux, но при запуске на macbook в emacs 24 я получаю ошибку ниже. Любая помощь будет оценена по достоинству.Ошибка с второстепенным режимом в emacs 24 на macbook

;; (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 --- БЕСПЛАТНО, если ваш файл инициализации или какой-либо другой код действительно устанавливают значение этой раскладки клавиатуры до того, как оценивается defvar. В этом случае defvar ничего не сделает.

1

Ожидается, что пятым параметром является define-minor-mode, где ваш пример передает значение -1.

Вы должны изменить его на nil, если у вас нет раскладки.

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

Кроме того, проходя -1 как init-value не имеет смысла либо, что должно вообще быть nil.