Ответ 1
Вы можете использовать (concat "foo" "bar")
, а не (concatenate 'string "foo" "bar")
. Обе работы, но, конечно, первая короче.
Мне нужно конкатенировать строку пути следующим образом, поэтому я добавил следующие строки в мой файл .emacs
:
(setq org_base_path "~/smcho/time/")
(setq org-default-notes-file-path (concatenate 'string org_base_path "notes.org"))
(setq todo-file-path (concatenate 'string org_base_path "gtd.org"))
(setq journal-file-path (concatenate 'string org_base_path "journal.org"))
(setq today-file-path (concatenate 'string org_base_path "2010.org"))
Когда я проверяю C-h v today-file-path
RET, он не имеет назначенной переменной.
Что случилось с моим кодом? Есть ли другой способ конкатенации строки пути?
Я обнаружил, что проблема была вызвана неправильной настройкой, код действительно работает. Спасибо за ответы, которые лучше моего кода.
Вы можете использовать (concat "foo" "bar")
, а не (concatenate 'string "foo" "bar")
. Обе работы, но, конечно, первая короче.
Прежде всего, не используйте "_"; Вместо этого используйте "-". Вставьте это в свои .emacs и перезапустите emacs (или оцените S-exp в буфере), чтобы увидеть эффекты:
(setq org-base-path (expand-file-name "~/smcho/time"))
(setq org-default-notes-file-path (format "%s/%s" org-base-path "notes.org")
todo-file-path (format "%s/%s" org-base-path "gtd.org")
journal-file-path (format "%s/%s" org-base-path "journal.org")
today-file-path (format "%s/%s" org-base-path "2010.org"))
Используйте имя-имя файла для создания имен файлов относительно каталога:
(let ((default-directory "~/smcho/time/"))
(setq org-default-notes-file-path (expand-file-name "notes.org"))
(setq todo-file-path (expand-file-name "gtd.org"))
(setq journal-file-path (expand-file-name "journal.org"))
(setq today-file-path (expand-file-name "2010.org")))