web-dev-qa-db-ja.com

elispで文字列を連結する

パス文字列を次のように連結する必要があるため、.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 vtoday-file-path RET チェックするために、変数が割り当てられていません。

私のコードの何が問題になっていますか?パス文字列を連結する他の方法はありますか?

編集

私は問題が間違った設定が原因であることがわかりました、コードは実際に機能します。私のコードよりも良い答えをありがとう。

43
prosseek

(concat "foo" "bar")ではなく(concatenate 'string "foo" "bar")を使用できます。どちらも機能しますが、もちろん前者の方が短いです。

64
offby1

まず、「_」は使用しないでください。代わりに「-」を使用してください。これを.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"))
27
OTZ

expand-file-nameを使用して、ディレクトリに関連するファイル名を作成します。

(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")))
25
Jürgen Hötzel