Samenvoegen strings in elisp

Ik moet de padtekenreeks als volgt samenvoegen, dus ik heb de volgende regels toegevoegd aan mijn .emacs-bestand:

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

Als ik C-h vtoday-file-pathRETdoe om te controleren, is er geen variabele toegewezen.

Wat is er mis met mijn code? Is er een andere manier om de padtekenreeks samen te voegen?

BEWERKEN

Ik ontdekte dat het probleem werd veroorzaakt door een verkeerde instelling, de code werkt echt. Bedankt voor de antwoorden die beter zijn dan mijn code.


Antwoord 1, autoriteit 100%

Je kunt (concat "foo" "bar")gebruiken in plaats van (concatenate 'string "foo" "bar"). Beide werken, maar de eerste is natuurlijk korter.


Antwoord 2, autoriteit 38%

Gebruik expand-file-nameom bestandsnamen te maken die gerelateerd zijn aan een directory:

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

Antwoord 3, autoriteit 36%

Allereerst, gebruik geen “_”; gebruik in plaats daarvan ‘-‘.
Voeg dit toe aan je .emacs en herstart emacs (of evalueer de S-exp in een buffer) om de effecten te zien:

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

Other episodes