lang/nim: fix invalid argument errors

The nimsuggest plugin tries to build a unique path for temporary files
for its flycheck checker. This path contains /tmp/emacs-nim-mode/A/B,
where A is the frame ID and B is the full path to the file being checked.

However, the original `nimsuggest--get-dirty-dir' incorrectly extracts
the frame ID from the string representation of `selected-frame' if
frame-title-format has been modified (which Doom has). The result is the
title of the frame, which can contain illegal path characters in
Windows, which in turn causes invalid argument errors when
`nimsuggest--make-tempdir' tries to use it.

This should really be reported upstream!
This commit is contained in:
Henrik Lissner 2018-08-30 22:35:25 +02:00
parent a7b87fe3de
commit bfe7b9f1c4
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -10,6 +10,17 @@ nimsuggest isn't installed."
(nimsuggest-mode)))
(add-hook 'nim-mode-hook #'+nim|init-nimsuggest-mode)
(defun doom*nimsuggest--get-dirty-dir ()
"The original `nimsuggest--get-dirty-dir' incorrectly extracts the frame
number from the string representation of `selected-frame', which can contain
characters that are illegal on Windows, causing invalid argument errors when
`nimsuggest--make-tempdir' tries to use it."
(let* ((frame-str (format "%s" (selected-frame)))
(frame-num-str (if (string-match " \\(0x[0-9a-z]+\\)>$" frame-str)
(match-string 1 frame-str))))
(file-name-as-directory (concat nimsuggest-dirty-directory frame-num-str))))
(advice-add #'nimsuggest--get-dirty-dir :override #'doom*nimsuggest--get-dirty-dir)
(map! :map nim-mode-map
:localleader
:n "b" #'nim-compile))