Emacs lisp: оценка списка строк

Я новичок в elisp, но я пытаюсь немного оживить мой.emacs.

Я пытаюсь определить некоторые пути, но возникают проблемы с созданием списка путей (и более точной настройкой списка для YaSnippet).

Когда я оцениваю список, я получаю список имен символов (а не значений символов, как этого хочет yassnippet).

Я получил работающий код, но чувствую, что есть лучший способ сделать это?

Вот рабочий код:

;; some paths
(setq my-snippets-path "~/.emacs.d/snippets")
(setq default-snippets-path "~/.emacs.d/site-lisp/yasnippet/snippets")

;; set the yas/root-directory to a list of the paths
(setq yas/root-directory `(,my-snippets-path ,default-snippets-path))

;; load the directories
(mapc 'yas/load-directory yas/root-directory)

2 ответа

Решение

Если вы оцениваете список строк, результат зависит от значения элементов списка. Лучший способ проверить это - запустить ielm repl (Mx ielm) и ввести:

ELISP> '("abc" "def" "ghi")
("abc" "def" "ghi")

Список строк в кавычках соответствует значению списка. Если вы сохраните значение списка в переменной, а затем оцените переменную, ELisp пожалуется, что функция abc неизвестна.

ELISP> (setq my-list '("abc" "def" "ghi"))
("abc" "def" "ghi")

ELISP> (eval my-list)
*** Eval error ***  Invalid function: "abc"

Для конфигурации каталога yasnippet вы должны просто установить вместо него yas-snippet-dir, например

(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)

(setq yas-snippet-dirs
      '("~/.emacs.d/snippets"            ;; personal snippets
        "/path/to/yasnippet/snippets"    ;; the default collection
        "/path/to/other/snippets"        ;; add any other folder with a snippet collection
        ))

(yas-global-mode 1)

Редактировать:
Использование yas/root-directory устарело. Из документации yasnippet.el

`yas-snippet-dirs'

The directory where user-created snippets are to be
stored. Can also be a list of directories. In that case,
when used for bulk (re)loading of snippets (at startup or
via `yas-reload-all'), directories appearing earlier in
the list shadow other dir's snippets. Also, the first
directory is taken as the default for storing the user's
new snippets.

The deprecated `yas/root-directory' aliases this variable
for backward-compatibility.

Я думаю ты хочешь

(setq yas/root-directory (list my-snippets-path default-snippets-path))
Другие вопросы по тегам