From 0aa74caefc71f2653376e577014e7bb6f583ed8f Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Mon, 16 Jun 2008 17:23:03 +0200 Subject: [PATCH] Improve sitemap publishing with org-publish. Patch from Sebastian Rose. --- lisp/ChangeLog | 3 +++ lisp/org-publish.el | 29 ++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c9f55d110..66a4d5f0d 100755 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2008-06-16 Carsten Dominik + * org-publish.el (org-publish-org-index): Make a properly indented + list. + * org.el (org-calendar-agenda-action-key): New option. (org-get-cursor-date): New function. (org-mark-entry-for-agenda-action): New command. diff --git a/lisp/org-publish.el b/lisp/org-publish.el index 9380f959e..cc9a76afb 100644 --- a/lisp/org-publish.el +++ b/lisp/org-publish.el @@ -595,8 +595,10 @@ Default for INDEX-FILENAME is 'index.org'." (let* ((project-plist (cdr project)) (dir (file-name-as-directory (plist-get project-plist :base-directory))) + (localdir (file-name-directory dir)) + (indent-str (make-string 2 ?\ )) (exclude-regexp (plist-get project-plist :exclude)) - (files (org-publish-get-base-files project exclude-regexp)) + (files (nreverse (org-publish-get-base-files project exclude-regexp))) (index-filename (concat dir (or index-filename "index.org"))) (index-title (or (plist-get project-plist :index-title) (concat "Index for project " (car project)))) @@ -609,12 +611,29 @@ Default for INDEX-FILENAME is 'index.org'." (with-temp-buffer (insert (concat index-title "\n\n")) (while (setq file (pop files)) - (let ((fn (substring (expand-file-name file) - (length (expand-file-name dir))))) + (let ((fn (file-name-nondirectory file)) + (link (file-relative-name file dir)) + (oldlocal localdir)) ;; index shouldn't index itself (unless (string= fn ifn) - (insert (concat " + [[file:" fn "][" - (org-publish-find-title (concat dir fn)) + (setq localdir (concat (file-name-as-directory dir) + (file-name-directory link))) + (unless (string= localdir oldlocal) + (if (string= localdir dir) + (setq indent-str (make-string 2 ?\ )) + (let ((subdirs + (split-string + (directory-file-name + (file-name-directory + (file-relative-name localdir dir))) "/")) + (subdir "")) + (setq indent-str (make-string 2 ?\ )) + (dolist (d subdirs) + (setq subdir (concat subdir d "/")) + (insert (concat indent-str " + [[file:" subdir "][" d "/]]\n")) + (setq indent-str (make-string (+ (length indent-str) 2) ?\ )))))) + (insert (concat indent-str " + [[file:" link "][" + (file-name-sans-extension fn) "]]\n"))))) (write-file index-filename) (kill-buffer (current-buffer)))))