Browse Source

Archiving: Allow file name interpolation in target headline

Matt Lundin writes:

    I had one more question/request concerning archives. Would
    it perhaps be possible to enable the file name
    substitution (i.e., "%s") after the double semi-colon, so
    that the file name can be used as a headline within the
    archive file? My ideal setup would be to have a single
    archive file for each year's work, with headlines named
    according to the original files of the archived subtrees.

    E.g.,

    ,----
    | * finances.org
    | ** archived item
    | * notes.org
    | ** archived item
    | ** another archived item
    `----

This commit does implement this request.
Carsten Dominik 16 years ago
parent
commit
74a4244db1
4 changed files with 15 additions and 3 deletions
  1. 1 1
      doc/org.texi
  2. 5 0
      lisp/ChangeLog
  3. 2 1
      lisp/org-archive.el
  4. 7 1
      lisp/org.el

+ 1 - 1
doc/org.texi

@@ -1118,7 +1118,7 @@ each specifies the archive location for the text below it.  The first
 such line also applies to any text before its definition.  However,
 using this method is @emph{strongly} deprecated as it is incompatible
 with the outline structure of the document.  The correct method for
-setting multiple archive locations in a buffer is using a property.}:
+setting multiple archive locations in a buffer is using properties.}:
 
 @example
 #+ARCHIVE: %s_done::

+ 5 - 0
lisp/ChangeLog

@@ -1,3 +1,8 @@
+2009-01-11  Carsten Dominik  <carsten.dominik@gmail.com>
+
+	* org-archive.el (org-extract-archive-heading): Allow %s for file
+	name also in achive location heading.
+
 2009-01-10  Carsten Dominik  <carsten.dominik@gmail.com>
 
 	* org-archive.el (org-add-archive-files): Uniquify the list before

+ 2 - 1
lisp/org-archive.el

@@ -151,7 +151,8 @@ if LOCATION is not given, the value of `org-archive-location' is used."
 if LOCATION is not given, the value of `org-archive-location' is used."
   (setq location (or location org-archive-location))
   (if (string-match "\\(.*\\)::\\(.*\\)" location)
-      (match-string 2 location)))
+      (format (match-string 2 location)
+	      (file-name-nondirectory buffer-file-name))))
 
 (defun org-archive-subtree (&optional find-done)
   "Move the current subtree to the archive.

+ 7 - 1
lisp/org.el

@@ -2770,7 +2770,9 @@ Org-mode Agenda.
 
 The archived entries will be filed as subtrees of the specified
 headline.  When the headline is omitted, the subtrees are simply
-filed away at the end of the file, as top-level entries.
+filed away at the end of the file, as top-level entries.  Also in
+the heading you can use %s to represent the file name, this can be
+useful when using the same archive for a number of different files.
 
 Here are a few examples:
 \"%s_archive::\"
@@ -2784,6 +2786,10 @@ Here are a few examples:
 \"~/org/archive.org::\"
 	Archive in file ~/org/archive.org (absolute path), as top-level trees.
 
+\"~/org/archive.org::From %s\"
+	Archive in file ~/org/archive.org (absolute path), und headlines
+        \"From FILENAME\" where file name is the current file name.
+
 \"basement::** Finished Tasks\"
 	Archive in file ./basement (relative path), as level 3 trees
 	below the level 2 heading \"** Finished Tasks\".