emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Sebastian <sebastian_rose@gmx.de>
To: Eraldo Helal <eraldo@eraldo.at>
Cc: Bernt Hansen <bernt@norang.ca>, Org-Mode <emacs-orgmode@gnu.org>,
	Carsten Dominik <carsten.dominik@gmail.com>
Subject: Re: Re: add a whole directory as one item to refile targets
Date: Mon, 12 Oct 2009 18:47:46 +0200	[thread overview]
Message-ID: <1255366066.5500.12.camel@beteigeuze> (raw)
In-Reply-To: <938fae2d0910120648t5147b4d9y3339d3f06bc732e7@mail.gmail.com>

Am Montag, den 12.10.2009, 15:48 +0200 schrieb Eraldo Helal:
> > What is Reference/ supposed to be in this case -- a directory?  Refiling
> > only works to headings (or top level headings) in files in org-mode IIRC.
> Yes it is supposed to be a directory...
> 
> I have org files in many directorys... about like so:
>  reference/emacs/emacs.org
>  reference/eros/eros.org
>  reference/Avalon/Avalon.org
>  reference/Gimp/Gimp.org
>  reference/office/office.org
>  reference/home/home.org
>  reference/poems/poems.org
> ...
> 
> What would be a smart way to get a headline from the file inbox.org
> named "* Erich Fried poems" to poems.org?
> Considering that poems.org is not part of the agenda nor a refile target.
> 
> What I am doing until now is:
>  folding the headline (tab)
>  cutting the headline (C-k)
>  making a split screen (C-x 2)
>  changing buffer (C-x o)
>  opening poems.org (C-x C-f "reference/poems/poems.org")
>  pasting headline (C-y)
>  changing buffer (C-x o)
>  removing split view (C-x 1)
> 
> Poems.org is not part of the agenda because it is reference material
> and not an active file.
> It is also not a refile target because I would have to make every .org
> file in all subdirectories a refile target and sometimes the
> appropriate file does not yet exist, in which case I need to create
> it.
> 
> Any ideas?
> Do I need to further try to make clear what I mean?
> 
> Greetings,
> Eraldo
> 


Since having so many targets for refiling slows down refiling a lot, I
do this here.


I've set `org-refile-targets' like this (custom-set-variables):

 '(org-refile-targets (quote ((org-agenda-files :maxlevel . 3)
      (sr-org-refile-targets :maxlevel . 2))))



In addition, I have this here in my setup:



(defvar sr-org-refile-targets nil 
  "List of refile targets for Org-remember.
   See `org-refile-targets'.")

(defvar sr-org-refile-dir-excludes  "^[#\\.].*$")
(defvar sr-org-refile-file-excludes "^[#\\.].*$")


(defun sr-find-org-refile-targets
    (&optional recurse dirs file-excludes dir-excludes)
  "Fill the variable `sr-org-refile-targets'.
Optional parameters:
  recurse        If `t', scan the directory recusively.
  dirs           A list of directories to scan for *.org files.
  file-excludes  Regular expression. If a filename matches this regular
expression,
                 do not add it to `sr-org-refile-targets'.
  dir-excludes   Regular expression. If a directory name matches this
regular expression,
                 do not add it to `sr-org-refile-targets'."
  (let ((targets (or dirs (list org-directory)))
        (fex (or file-excludes  "^[#\\.].*$"))
        (dex (or dir-excludes  "^[#\\.].*$"))
        path)
    (dolist (dir targets)
      (if (file-directory-p dir)
          (let ((all (directory-files dir nil "^[^#\\.].*$")))
            (dolist (f all)
              (setq path (concat (file-name-as-directory dir) f))
              (cond
               ((file-directory-p path)
                (if (and recurse (not (string-match dex f)))
                      (sr-find-org-refile-targets t (list path) fex
dex)))
               ((and (string-match "^[^#\\.].*\\.org$" f) (not
(string-match fex f)))
                (setq sr-org-refile-targets (append (list path)
sr-org-refile-targets))))))
        (message "Not a directory: %s" path))
      )))



(defun sr-add-to-org-refile-targets ( recurse dirs )
  "Add a directory to org-refile targets recursively."
  (interactive "P\nDdirectory: ")
  (sr-find-org-refile-targets
   (if recurse t nil)
   (list dirs)
   sr-org-refile-file-excludes
   sr-org-refile-dir-excludes)
  (message "org-refile-targets: \n%s" sr-org-refile-targets))






Now I call the function `sr-add-to-org-refile-targets' whenever I need
to add all Org-files in a directory recursively.




Sebastian

  parent reply	other threads:[~2009-10-12 16:47 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-04 22:30 add a whole directory as one item to refile targets Eraldo Helal
2009-10-08  7:02 ` Carsten Dominik
2009-10-08  8:17   ` Syntax coloring not automatic Helge A. Gudmundsen
2009-10-10 21:48   ` add a whole directory as one item to refile targets Eraldo Helal
2009-10-10 22:06     ` Bernt Hansen
2009-10-12 13:48       ` Eraldo Helal
2009-10-12 14:15         ` Carsten Dominik
2009-10-17 13:19           ` Eraldo Helal
2009-10-12 16:47         ` Sebastian [this message]
2009-10-17 10:58           ` Eraldo Helal
2009-10-17 12:59             ` Sebastian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1255366066.5500.12.camel@beteigeuze \
    --to=sebastian_rose@gmx.de \
    --cc=bernt@norang.ca \
    --cc=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=eraldo@eraldo.at \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).