Конкатенация строк в elisp - PullRequest
       7

Конкатенация строк в elisp

35 голосов
/ 17 сентября 2010

Мне нужно объединить строку пути следующим образом, поэтому я добавил следующие строки в мой файл .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 , переменной не назначается.

Что не так с моим кодом? Есть ли другой способ объединить строку пути?

EDIT

Я обнаружил, что проблема была вызвана неправильной настройкой, код на самом деле работает. Спасибо за ответы, которые лучше, чем мой код.

Ответы [ 3 ]

57 голосов
/ 17 сентября 2010

Вы можете использовать (concat "foo" "bar") вместо (concatenate 'string "foo" "bar").Оба работают, но, конечно, первый короче.

24 голосов
/ 17 сентября 2010

Прежде всего, не используйте "_"; вместо этого используйте «-». Вставьте это в ваш .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"))
19 голосов
/ 17 сентября 2010

Используйте имя-файла-расширения для построения имен файлов относительно каталога:

(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")))
...