Проблема в Emacs lua-mode: (интерактивно-вызываемая функция void-p) - PullRequest
2 голосов
/ 27 июля 2011

Я пытаюсь установить lua-mode (версия 20110428) для emacs 21.4.1 и у меня проблемы.В моем файле .emacs у меня есть:

(add-to-list 'load-path "~/.emacs.d/lua-mode/")
...
(setq auto-mode-alist (cons '("\\.lua$" . lua-mode) auto-mode-alist))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)

Я использовал инструкции по установке отсюда: http://lua -mode.luaforge.net / Кроме того, в моем .emacs.d / dir У меня есть lua-mode /, который содержит lua-mode.el.Все эти файлы имеют правильные права доступа.

За исключением случаев, когда я использую emacs для открытия нового файла "test.lua", я получаю следующее сообщение в чистом буфере:

"Режим файлаошибка спецификации: (void-function named-interactively-p) "

Я использую RHEL5.Я посмотрел онлайн, но не нашел большой помощи.У кого-нибудь есть предложения?Я не знаю ни одного LISP (поэтому сложно отладить lua-mode.el), и кроме нескольких горячих клавиш, я не очень разбираюсь в emacs.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 27 июля 2011

Вы используете версию Emacs, у которой нет версии функции "named-interactively-p", которая принимает 1 аргумент (более ранние версии функции не принимали аргумент).Вы можете обойти это, поместив этот обходной путь (размещенный здесь: http://paste.lisp.org/display/115598/raw) в вашем файле инициализации Emacs:

(condition-case nil (called-interactively-p 'interactive)
  (error
   ; Save reference to called-interactively-p in
   ; inglorion-system-called-interactively-p
   (fset 'inglorion-system-called-interactively-p
         (symbol-function 'called-interactively-p))
   ; Define called-interactively-p so that it discards
   ; its arguments and calls inglorion-system-called-interactively-p
   (fset 'called-interactively-p
         (lambda (&rest args)
           (inglorion-system-called-interactively-p)))))

Однако, когда я сделал это и попытался протестировать с Emacs 22, я столкнулся сдругие ошибки также из-за отсутствия определенных функций, поэтому вам, возможно, придется обновить свою версию Emacs, если вы хотите использовать lua-mode.

В Emacs 23 и 24 появляется сообщение "lua-mode.el"работать (я не программист lua, поэтому я не мог проверить это должным образом) с существующими файлами lua, но не работает, когда вы пытаетесь создать новый файл lua. Это фактически ошибка в коде "lua-mode.el", которыйпроисходит, когда вы пытаетесь открыть новый файл lua (это не происходит, если вы пытаетесь открыть существующий файл lua). Проблема в том, что вызов «remove-text-properties» в строке # 1218 (в «lua-Функция unmark-multiline-literals ") вызывает функцию" remove-text-properties "с начальным значением" 1 "и конечным значением" 0 "(это" 0 ", потому что размер буфера равен" 0 "дляновый файл. Вы можете исправить это, изменив line # 1218 с:

    (remove-text-properties (or begin 1) (or end (buffer-size)) '(syntax-table ()))

до:

    (remove-text-properties (or begin 1)
                            (or end
                                (if (> (buffer-size) 0)
                                    (buffer-size)
                                  (or begin 1)))
                            '(syntax-table ()))

Вы должны сообщить разработчику lua-mode.el об ошибке и, возможно, также запросить поддержку более ранних версий Emacs.версии.

2 голосов
/ 14 сентября 2011

Мне довелось поддерживать Луа-Мод. Мне посчастливилось наткнуться на вашу проблему при серфинге в интернете, и проблема была решена после того, как кто-то щедро предоставил резервную копию реализации функции called-interactively-p.

Между тем, я должен признать, что я хорошо знал, что логика called-interactively была изменена где-то до emacs23, но я не потрудился изменить ее, пока кто-то не подал бы ее как ошибку. Это всего лишь оптимизация усилий, поскольку в Emacs в последнее время произошли многочисленные внутренние изменения API, и их упреждающее исправление просто не укладывается в мое расписание.

Суть в том, что:

  1. В ближайшем будущем я предоставлю резервную копию call-interactively-p в lua-mode, которая выйдет в следующем выпуске.
  2. И я хотел бы призвать вас регистрировать такие неисправности, как сообщения об ошибках здесь . Я читаю их регулярно, и ваши сообщения, а также ваши собственные хаки приветствуются в апстриме.

Ура, immerrr.

1 голос
/ 27 июля 2011

Я думаю, что в Emacs 21.4 просто не существует функции `named-interactively-p '.

Но на самом деле, я думаю, вы говорите о XEmacs, а не GNU Emacs.Обратите внимание, что это 2 разных проекта.

Вам следует обновить XEmacs до 21,5 бета или лучше (YMMV), возможно, используйте GNU Emacs 23.

0 голосов
/ 27 июля 2011

У меня тоже была эта проблема. Я смог исправить это, изменив его так:

(add-to-list 'auto-mode-alist '("\\.lua\\'" . lua-mode))

Я не могу утверждать, что знаю, почему это имеет значение: я экстраполировал какую-то другую логику для загрузки режима javascript, который использовал аналогичный синтаксис для описания расширения файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...