I have installed the package sml-mode (version 6.9) in Emacs (version 26.2) but when I try to open a .sml file I get the following error in the minibuffer: File mode specification error: (invalid-read-syntax ?). As such, SML syntax is not recognised by the editor, which is also clear for the fact that the current mode displays the Fundamental mode other than SML.
These are the steps I did to set up my environment:
- I have first installed smlnj in
usr/local/sml. - I have tried to install the preset
sml-modepackage (M-x list-packages). However this did not work out. - I then downloaded the content of
sml-mode-6.9.elfrom https://elpa.gnu.org/packages/sml-mode.html in my machine and have installed it on Emacs (M-x package-install-file). - The list of packages in Emacs displays Installed next to the
sml-modepackage, but apparently doesn't work.
Using M-x toggle-debug-on-error gives the following stack trace:
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)
The error message says that there is an error at position 9890 in the file. That is right next to a lambda character:
As this is the first non-ASCII character in the file, I guess the file was downloaded with a garbled encoding or something. Not sure why
M-x list-packageswouldn't work for you - I guess you'd be able to work around this by editing the file manually. Compare to this version on Github to see which characters are supposed to appear there.