From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Lundin Subject: Re: Seeking advice on structuring my org-mode file Date: Wed, 22 May 2013 17:10:17 -0500 Message-ID: <87y5b68y46.fsf@fastmail.fm> References: <20130522204329.6532e03c@aga-netbook> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([208.118.235.92]:52587) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfHEq-0008Ta-5G for emacs-orgmode@gnu.org; Wed, 22 May 2013 18:10:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UfHEk-0005gw-QZ for emacs-orgmode@gnu.org; Wed, 22 May 2013 18:10:28 -0400 Received: from out2-smtp.messagingengine.com ([66.111.4.26]:55650) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfHEk-0005go-In for emacs-orgmode@gnu.org; Wed, 22 May 2013 18:10:22 -0400 In-Reply-To: <20130522204329.6532e03c@aga-netbook> (Marcin Borkowski's message of "Wed, 22 May 2013 20:43:29 +0200") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Marcin Borkowski Cc: Org-mode mailing list Marcin Borkowski writes: > I have an Org-mode file with notes concerning a large project connected > with teaching at my university. One of the headlines is dedicated to > one particular course, where I am part of a group developing a concept > of this course. So, one subheadline is devoted to that. Yet another > (subsub)headline is a list if my proposals of things that should be > covered during that course, and now it needs 3 more levels down. > Summing it up: I have 5 levels of headlines and now I need a sixth > one. So, my question is: what are good practices of other Org-moders? > Do you push such a monster to an external file and just include a link > to it? If a file grows to large, I simply create a new one. In this instance, I would recommend creating a separate file for each course. Below you'll find a very hackish helper function that I use to generate a new file from a headline. It leaves a link to the new file in the original location. Best, Matt --8<---------------cut here---------------start------------->8--- (defun my-org-file-from-headline (file) (interactive (list (completing-read "File: " (mapcar 'file-name-nondirectory (file-expand-wildcards "~/org/*.org")) nil nil))) (unless (string-match "\\.org$" file) (error "Not an org file")) (save-excursion (beginning-of-line) (unless (org-at-heading-p) (error "Not on a headline"))) (let* ((exists (file-exists-p file)) (ftags (append (list (file-name-sans-extension file)) (mapcar 'substring-no-properties org-file-tags))) (headline (nth 4 (org-heading-components))) (org-archive-reversed-order t) (org-archive-location (concat file "::")) (org-archive-save-context-info nil)) (org-archive-subtree) (save-excursion (insert "* [[file:" file "][" file "]] - " headline "\n")) (find-file file) (goto-char (point-min)) (save-excursion (if (re-search-forward "#\\+FILETAGS:\\(.*\\)$" nil t) (progn (save-match-data (setq ftags (mapconcat 'identity (org-uniquify (append ftags (split-string (substring-no-properties (match-string 1))))) " "))) (replace-match (concat "#+FILETAGS: " ftags))) (insert "#+FILETAGS: " (mapconcat 'identity ftags " ") "\n")) (goto-char (point-min)) (unless (re-search-forward "#\\+CATEGORY:\\(.*\\)$" nil t) (insert "#+CATEGORY: " (file-name-sans-extension file) "\n")) (goto-char (point-min)) (when (re-search-forward "^Archived entries from file.+\n" nil t) (replace-match "")))) (write-file file)) --8<---------------cut here---------------end--------------->8---