Ошибка с второстепенным режимом в Emacs 24 на MacBook

Это была функция, которую я где-то нашел в Интернете, и у меня никогда не было проблем в Linux, но при запуске на 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()

2 ответа

5-й параметр define-minor-mode ожидается, что это будет таблица ключей, где ваш пример передает значение -1,

Вы должны изменить это на nil если у вас нет карты ключей.

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

Также, проходя -1 как init-value на самом деле не имеет смысла, это также должно быть nil,

Покажите код, который определяет второстепенный режим (без комментариев). Покажите любой код, который связывает ключи в раскладке вспомогательного режима. Отображаемая ошибка не имеет прямого отношения к отображаемому вами коду.

В частности, показать defvar который определяет раскладку sensitive-mode-map, Это то, что defvar Кажется, что проблема в сексе.

Это код, используемый defvar, по-видимому:

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

И ясно, что связывание m в -1 означает, что 3-й cond пункт оценивается. Это никогда не могло бы работать на любой платформе Emacs, IMO - если ваш файл инициализации или какой-либо другой код на самом деле не установили значение этой раскладки клавиатуры до этого defvar оценивается. В этом случае defvar не будет ничего делать

Другие вопросы по тегам