Это моя первая в истории программа elisp.Я пытаюсь сделать своего рода панель инструментов для отображения при запуске Emacs.Я следую за кодом со страницы запуска elisp startup.el :
(defun dashboard ()
"Display a custom dashboard on startup"
(let ((dash-buffer (get-buffer-create "*dashboard*")))
(with-current-buffer dash-buffer
(let ((inhibit-read-only t))
(erase-buffer)
(fancy-splash-insert
:face 'variable-pitch "Recent Files:"
:face 'variable-pitch "\n")
(dolist (recent recentf-list)
(defconst file-text
`((:link ((with-output-to-string (princ recent)),
(lambda (_button) (browse-url "https://www.gnu.org/software/emacs/"))
))))
(apply #'fancy-splash-insert (car file-text))
(insert "\n")))
(display-buffer dash-buffer))))
Я хочу в конечном итоге отобразить недавно использованные файлы, поэтому я перехожу по списку с помощью (dolist (recent recentf-list)
,поэтому recent
в теории содержит недавно использованный файл.Я хотел бы сделать ссылку из переменной recent
.Да, я понимаю, что ссылка на gnu.org - это не совсем то, чего я хочу, но я еще не дошел до ссылки.Я думаю, что что-то с find-file - то, что я хочу там, но я вернусь к этому позже.В любом случае, как я ни стараюсь, единственное, что я могу сделать, - это жестко закодированная строка:
- работает
`((:link ("foo",
- не работает
`((:link (recent,
`((:link ((format "%s" recent),
`((:link ((with-output-to-string (princ recent)),
Я перепробовал все, что мог придумать, чтобы заставить эту вещь взять переменную, и это побеждает меня ... какие-либо идеи?
Я получаю ошибки, подобные следующим:
fancy-splash-insert: Wrong type argument: char-or-string-p, (with-output-to-string (princ recent))