Синтаксис SML не распознается в Emacs, несмотря на то, что установлен sml-mode

Я установил пакет sml-mode (версия 6.9) в Emacs (версия 26.2), но когда я пытаюсь открыть файл.sml, в минибуфере появляется следующая ошибка:File mode specification error: (invalid-read-syntax ?). Таким образом, синтаксис SML не распознается редактором, что также ясно из того факта, что текущий режим отображаетFundamental режим кроме SML.

Вот шаги, которые я сделал для настройки своей среды:

  • Я сначала установил smlnj в usr/local/sml.
  • Я пробовал установить предустановку sml-modeпакет (Mx list-packages). Однако это не сработало.
  • Затем я загрузил содержимое sml-mode-6.9.elиз https://elpa.gnu.org/packages/sml-mode.html на моем компьютере и установил его на Emacs (Mx package-install-file).
  • Список пакетов в Emacs отображает Установленные рядом сsml-mode пакет, но, видимо, не работает.

Использование Mx toggle-debug-on-error дает следующую трассировку стека:

Debugger entered--Lisp error: (invalid-read-syntax "?")
read(#<buffer  *load*>)
eval-buffer(#<buffer  *load*> nil "/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" nil t)  ; Reading at buffer position 9890
load-with-code-conversion("/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" "/home/Roberto/.emacs.d/elpa/sml-mode-6.9/sml-mode.el" nil t)
sml-mode()
set-auto-mode-0(sml-mode nil)
set-auto-mode()
normal-mode(t)
after-find-file(t t)
find-file-noselect-1(#<buffer test.sml> "~/test.sml" nil nil "~/test.sml" nil)
find-file-noselect("~/test.sml" nil nil t)
find-file("~/test.sml" t)
funcall-interactively(find-file "~/test.sml" t)
call-interactively(find-file nil nil)
command-execute(find-file)

2 ответа

Решение

В сообщении об ошибке говорится, что в файле есть ошибка в позиции 9890. Это прямо рядом с лямбда-символом:

  '(("fn" . ?λ)

Поскольку это первый не-ASCII символ в файле, я предполагаю, что файл был загружен с искаженной кодировкой или чем-то еще. Не знаю почемуM-x list-packagesне сработает для вас - я думаю, вы сможете обойти это, отредактировав файл вручную. Сравните с этой версией на Github, чтобы увидеть, какие символы должны там появляться.

Возможно M-x package-list-packages успешно установил sml-mode, но впоследствии не загружается.

Не могли бы вы убедиться, что каталог ~/.emacs.d/elpa/sml-mode-6.9 существует?

Единственная конфигурация, которая у меня есть для sml-mode это то, что добавил установщик пакетов:

(require 'package)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("marmalade" . "https://marmalade-repo.org/packages/")
        ("melpa" . "http://melpa.org/packages/")))
(package-initialize)

...

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 ...
 '(package-selected-packages
   (quote
    (... sml-mode ...))))

Это должно каким-то образом добраться до файла ~/.emacs.d/elpa/sml-mode-6.9/sml-mode-autoloads.el что делает sml-mode загружать при открытии нужных файлов.

Не могли бы вы также убедиться, что sml-mode аналогично упоминается в вашем .emacs файл?

Я использовал Emacs 25 и sml-mode-6.7успешно, не сделав ничего, кроме того, что сделали вы. Если я перейду наsml-mode-6.9эта установка все еще работает. К сожалению, я не могу проверить, работает ли он и с Emacs 26. Я, к сожалению, не могу сказать, есть ли какие-либо расхождения между 25 и 26 в менеджере пакетов, которые могли бы здесь сыграть.

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