From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manuel Giraud Subject: Re: [Patch 2/2] org-publish Date: Wed, 09 Feb 2011 13:23:54 +0100 Message-ID: <87bp2lcs6d.fsf@univ-nantes.fr> References: <87ipzd7qfn.fsf@univ-nantes.fr> <87zkq68nlp.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=49439 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pn9BS-0005Is-88 for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 07:30:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pn9BQ-0005wU-Ni for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 07:30:10 -0500 Received: from smtp-tls1.univ-nantes.fr ([193.52.101.145]:57221 helo=smtp-tls.univ-nantes.fr) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pn9BQ-0005va-6X for emacs-orgmode@gnu.org; Wed, 09 Feb 2011 07:30:08 -0500 In-Reply-To: <87zkq68nlp.fsf@gnu.org> (Bastien's message of "Tue, 08 Feb 2011 18:04:02 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Bastien Cc: emacs-orgmode Bastien writes: > I'd welcome a reworked version of this idea! Hi Bastien, Thanks for accepting my previous patch. Here's a new version of this last patch that support formated sitemap entry. --8<---------------cut here---------------start------------->8--- commit 660ece15eca316075da6529560bf66565934b713 Author: Manuel Giraud Date: Tue Nov 23 16:20:15 2010 +0100 formated sitemap Modified lisp/org-publish.el diff --git a/lisp/org-publish.el b/lisp/org-publish.el index 47b80db..98e09f3 100644 --- a/lisp/org-publish.el +++ b/lisp/org-publish.el @@ -267,6 +267,22 @@ You can overwrite this default per project in your :group 'org-publish :type 'boolean) +(defcustom org-publish-sitemap-date-format "%Y-%m-%d" + "Format for `format-time-string' which is used to print a date +in the sitemap." + :group 'org-publish + :type 'string) + +(defcustom org-publish-sitemap-file-entry-format "%T" + "How a sitemap file entry is formated. +You could use brackets to delimit on what part the link will be. + +%T is the title. +%A is the author. +%D is the date formated using `org-publish-sitemap-date-format'." + :group 'org-publish + :type 'string) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Timestamp-related functions @@ -370,6 +386,8 @@ This splices all the components into the list." (defvar sitemap-sort-folders) (defvar sitemap-ignore-case) (defvar sitemap-requested) +(defvar sitemap-date-format) +(defvar sitemap-file-entry-format) (defun org-publish-compare-directory-files (a b) "Predicate for `sort', that sorts folders and files for sitemap." (let ((retval t)) @@ -392,8 +410,10 @@ This splices all the components into the list." (not (string-lessp B A)))))) ((or (equal sitemap-sort-files 'chronologically) (equal sitemap-sort-files 'anti-chronologically)) - (let ((A (org-publish-find-date a)) - (B (org-publish-find-date b))) + (let* ((adate (org-publish-find-date a)) + (bdate (org-publish-find-date b)) + (A (+ (lsh (car adate) 16) (cadr adate))) + (B (+ (lsh (car bdate) 16) (cadr bdate)))) (setq retval (if (equal sitemap-sort-files 'chronologically) (<= A B) (>= A B))))))) @@ -701,6 +721,10 @@ If :makeindex is set, also produce a file theindex.org." "sitemap.org")) (sitemap-function (or (plist-get project-plist :sitemap-function) 'org-publish-org-sitemap)) + (sitemap-date-format (or (plist-get project-plist :sitemap-date-format) + org-publish-sitemap-date-format)) + (sitemap-file-entry-format (or (plist-get project-plist :sitemap-file-entry-format) + org-publish-sitemap-file-entry-format)) (preparation-function (plist-get project-plist :preparation-function)) (completion-function (plist-get project-plist :completion-function)) (files (org-publish-get-base-files project exclude-regexp)) file) @@ -776,12 +800,32 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." (setq indent-str (make-string (+ (length indent-str) 2) ?\ ))))))) ;; This is common to 'flat and 'tree - (insert (concat indent-str " + [[file:" link "][" - (org-publish-find-title file) - "]]\n"))))) + (let ((entry + (org-publish-format-file-entry sitemap-file-entry-format + file project-plist)) + (regexp "\\(.*\\)\\[\\([^][]+\\)\\]\\(.*\\)")) + (cond ((string-match-p regexp entry) + (string-match regexp entry) + (insert (concat indent-str " + " (match-string 1 entry) + "[[file:" link "][" + (match-string 2 entry) + "]]" (match-string 3 entry) "\n"))) + (t + (insert (concat indent-str " + [[file:" link "][" + entry + "]]\n")))))))) (save-buffer)) (or visiting (kill-buffer sitemap-buffer)))) +(defun org-publish-format-file-entry (fmt file project-plist) + (org-replace-escapes fmt + (list (cons "%T" (org-publish-find-title file)) + (cons "%D" (format-time-string + sitemap-date-format + (org-publish-find-date file))) + (cons "%A" (or (plist-get project-plist :author) + user-full-name))))) + (defun org-publish-find-title (file) "Find the title of FILE in project." (or @@ -806,7 +850,9 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." (defun org-publish-find-date (file) "Find the date of FILE in project. If FILE provides a #+date keyword use it else use the file -system's modification time." +system's modification time. + +It returns time in `current-time' format." (let ((visiting (find-buffer-visiting file))) (save-excursion (switch-to-buffer (or visiting (find-file file))) @@ -815,10 +861,9 @@ system's modification time." (unless visiting (kill-buffer (current-buffer))) (if date - (let ((dt (org-time-string-to-time date))) - (+ (lsh (car dt) 16) (cadr dt))) + (org-time-string-to-time date) (when (file-exists-p file) - (org-publish-cache-ctime-of-src file))))))) + (nth 5 (file-attributes file)))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Interactive publishing functions --8<---------------cut here---------------end--------------->8--- Best regards, -- Manuel Giraud