4

背景: org-mode では、変数 org-archive-location はデフォルトで "%s_archive::" に設定されているため、ファイル "toto.org" はファイル "toto.org_archive" にアーカイブされます。代わりに「toto.ref」にアーカイブしてほしい。org-mode バージョン 7.4 (git サーバーから) を使用しています。

私はそれが次のように単純だと思ったでしょう

(setq org-archive-location 
      `(replace-regexp-in-string ".org" ".ref" %s)
      )

しかし、これは LISP では不適切であると指摘されました (さらに、機能しませんでした)。私の最終的な解決策は次のとおりです。org-archive-location の最も巧妙な構成に適応できるはずです。

(setq org-archive-location "%s::* ARCHIVES")
(defadvice org-extract-archive-file (after org-to-ref activate)
  (setq ad-return-value
        (replace-regexp-in-string "\\.org" ".ref" ad-return-value)
    )
  )

ご了承ください:

1) 「test.org.gpg」が「test.ref.gpg」に適切に変更されるように、「.org」の末尾に $ を自発的に追加しませんでした。

2)正規表現「\ .org」(「.org」ではなく)を使用する必要があるようです(以下の回答でより長い説明があります)。

4

4 に答える 4

3

コードを実行して値を取得するように、Emacs で変数を定義することはできません。変数には単純な静的値があります。

org-extract-archive-fileからアーカイブの場所を生成する関数 にアドバイスすることで、説明した効果を得ることができますorg-archive-location

(defadvice org-extract-archive-file (after org-to-ref activate)
  (setq ad-return-value
        (replace-regexp-in-string "\\.org" ".ref" ad-return-value)))

これは現在私にとってはうまくいきますが、もちろん組織モードの内部は変更される可能性があり、この解決策は永遠に機能しない可能性があります.

于 2011-02-18T23:48:24.157 に答える
2

quote評価したい式であってはなりません。.正規表現では、任意の文字に一致することにも注意してください。

于 2011-02-18T21:22:46.523 に答える