From 74750b083958c446b93d9fd0fcd161ccb965aa9d Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Thu, 8 Aug 2013 16:21:53 +0200 Subject: [PATCH 1/2] ox-publish: Fix prefix for some variables * lisp/ox-publish.el (org-publish-sitemap-sort-files, org-publish-sitemap-sort-folders, org-publish-sitemap-ignore-case, org-publish-sitemap-requested, org-publish-sitemap-date-format, org-publish-sitemap-file-entry-format): Set prefix to "org-publish-sitemap" instead of "org-sitemap". (org-publish-compare-directory-files, org-publish-get-base-files-1, org-publish-projects, org-publish-format-file-entry): Use new prefix. --- lisp/ox-publish.el | 64 ++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index d5f4dfec6..f02b95a3b 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -383,19 +383,19 @@ This splices all the components into the list." (push p rtn))) (nreverse (delete-dups (delq nil rtn))))) -(defvar org-sitemap-sort-files) -(defvar org-sitemap-sort-folders) -(defvar org-sitemap-ignore-case) -(defvar org-sitemap-requested) -(defvar org-sitemap-date-format) -(defvar org-sitemap-file-entry-format) +(defvar org-publish-sitemap-sort-files) +(defvar org-publish-sitemap-sort-folders) +(defvar org-publish-sitemap-ignore-case) +(defvar org-publish-sitemap-requested) +(defvar org-publish-sitemap-date-format) +(defvar org-publish-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)) - (when (or org-sitemap-sort-files org-sitemap-sort-folders) + (when (or org-publish-sitemap-sort-files org-publish-sitemap-sort-folders) ;; First we sort files: - (when org-sitemap-sort-files - (case org-sitemap-sort-files + (when org-publish-sitemap-sort-files + (case org-publish-sitemap-sort-files (alphabetically (let* ((adir (file-directory-p a)) (aorg (and (string-match "\\.org$" a) (not adir))) @@ -405,7 +405,7 @@ This splices all the components into the list." (org-publish-find-title a)) a)) (B (if borg (concat (file-name-directory b) (org-publish-find-title b)) b))) - (setq retval (if org-sitemap-ignore-case + (setq retval (if org-publish-sitemap-ignore-case (not (string-lessp (upcase B) (upcase A))) (not (string-lessp B A)))))) ((anti-chronologically chronologically) @@ -414,17 +414,17 @@ This splices all the components into the list." (A (+ (lsh (car adate) 16) (cadr adate))) (B (+ (lsh (car bdate) 16) (cadr bdate)))) (setq retval - (if (eq org-sitemap-sort-files 'chronologically) (<= A B) + (if (eq org-publish-sitemap-sort-files 'chronologically) (<= A B) (>= A B))))))) ;; Directory-wise wins: - (when org-sitemap-sort-folders + (when org-publish-sitemap-sort-folders ;; a is directory, b not: (cond ((and (file-directory-p a) (not (file-directory-p b))) - (setq retval (equal org-sitemap-sort-folders 'first))) + (setq retval (equal org-publish-sitemap-sort-folders 'first))) ;; a is not a directory, but b is: ((and (not (file-directory-p a)) (file-directory-p b)) - (setq retval (equal org-sitemap-sort-folders 'last)))))) + (setq retval (equal org-publish-sitemap-sort-folders 'last)))))) retval)) (defun org-publish-get-base-files-1 @@ -457,7 +457,7 @@ matching the regexp SKIP-DIR when recursing through BASE-DIR." (or (file-directory-p file) (and match (string-match match file)))) (directory-files base-dir t))))) - (if (not org-sitemap-requested) all-files + (if (not org-publish-sitemap-requested) all-files (sort all-files 'org-publish-compare-directory-files))))) (defun org-publish-get-base-files (project &optional exclude-regexp) @@ -472,15 +472,15 @@ matching filenames." (extension (or (plist-get project-plist :base-extension) "org")) ;; sitemap-... variables are dynamically scoped for ;; org-publish-compare-directory-files: - (org-sitemap-requested + (org-publish-sitemap-requested (plist-get project-plist :auto-sitemap)) (sitemap-filename (or (plist-get project-plist :sitemap-filename) "sitemap.org")) - (org-sitemap-sort-folders + (org-publish-sitemap-sort-folders (if (plist-member project-plist :sitemap-sort-folders) (plist-get project-plist :sitemap-sort-folders) org-publish-sitemap-sort-folders)) - (org-sitemap-sort-files + (org-publish-sitemap-sort-files (cond ((plist-member project-plist :sitemap-sort-files) (plist-get project-plist :sitemap-sort-files)) ;; For backward compatibility: @@ -488,18 +488,19 @@ matching filenames." (if (plist-get project-plist :sitemap-alphabetically) 'alphabetically nil)) (t org-publish-sitemap-sort-files))) - (org-sitemap-ignore-case + (org-publish-sitemap-ignore-case (if (plist-member project-plist :sitemap-ignore-case) (plist-get project-plist :sitemap-ignore-case) org-publish-sitemap-sort-ignore-case)) (match (if (eq extension 'any) "^[^\\.]" (concat "^[^\\.].*\\.\\(" extension "\\)$")))) - ;; Make sure `org-sitemap-sort-folders' has an accepted value - (unless (memq org-sitemap-sort-folders '(first last)) - (setq org-sitemap-sort-folders nil)) + ;; Make sure `org-publish-sitemap-sort-folders' has an accepted + ;; value. + (unless (memq org-publish-sitemap-sort-folders '(first last)) + (setq org-publish-sitemap-sort-folders nil)) (setq org-publish-temp-files nil) - (if org-sitemap-requested + (if org-publish-sitemap-requested (pushnew (expand-file-name (concat base-dir sitemap-filename)) org-publish-temp-files)) (org-publish-get-base-files-1 base-dir recurse match @@ -678,10 +679,10 @@ If `:auto-sitemap' is set, publish the sitemap too. If "sitemap.org")) (sitemap-function (or (plist-get project-plist :sitemap-function) 'org-publish-org-sitemap)) - (org-sitemap-date-format + (org-publish-sitemap-date-format (or (plist-get project-plist :sitemap-date-format) org-publish-sitemap-date-format)) - (org-sitemap-file-entry-format + (org-publish-sitemap-file-entry-format (or (plist-get project-plist :sitemap-file-entry-format) org-publish-sitemap-file-entry-format)) (preparation-function @@ -775,7 +776,7 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." ;; This is common to 'flat and 'tree (let ((entry (org-publish-format-file-entry - org-sitemap-file-entry-format file project-plist)) + org-publish-sitemap-file-entry-format file project-plist)) (regexp "\\(.*\\)\\[\\([^][]+\\)\\]\\(.*\\)")) (cond ((string-match-p regexp entry) (string-match regexp entry) @@ -791,11 +792,12 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." (or visiting (kill-buffer sitemap-buffer)))) (defun org-publish-format-file-entry (fmt file project-plist) - (format-spec fmt - `((?t . ,(org-publish-find-title file t)) - (?d . ,(format-time-string org-sitemap-date-format - (org-publish-find-date file))) - (?a . ,(or (plist-get project-plist :author) user-full-name))))) + (format-spec + fmt + `((?t . ,(org-publish-find-title file t)) + (?d . ,(format-time-string org-publish-sitemap-date-format + (org-publish-find-date file))) + (?a . ,(or (plist-get project-plist :author) user-full-name))))) (defun org-publish-find-title (file &optional reset) "Find the title of FILE in project." From c82cb4f75e42bb1d0eadd13f18967a17598b8d65 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Thu, 8 Aug 2013 17:22:08 +0200 Subject: [PATCH 2/2] ox-publish: Correctly return document title * lisp/ox-publish.el (org-publish-find-title): Fix title when no #+TITLE property is provided. * lisp/ox.el (org-export-store-default-title): Remove-function. (org-export--default-title): Remove variable. (org-export-options-alist): Do not use a default value. (org-export--get-buffer-attributes): Store a default title. (org-export-as): Apply function removal. (org-export--get-global-options): Do not set a property with an explicitely nil value. --- lisp/ox-publish.el | 17 ++++++++--------- lisp/ox.el | 31 +++++++++++-------------------- 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index f02b95a3b..463dc5634 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -805,17 +805,16 @@ Default for SITEMAP-FILENAME is 'sitemap.org'." (and (not reset) (org-publish-cache-get-file-property file :title nil t)) (let* ((org-inhibit-startup t) (visiting (find-buffer-visiting file)) - (buffer (or visiting (find-file-noselect file))) - title) + (buffer (or visiting (find-file-noselect file)))) (with-current-buffer buffer (org-mode) - (setq title - (or (org-element-interpret-data - (plist-get (org-export-get-environment) :title)) - (file-name-nondirectory (file-name-sans-extension file))))) - (unless visiting (kill-buffer buffer)) - (org-publish-cache-set-file-property file :title title) - title))) + (let ((title + (let ((property (plist-get (org-export-get-environment) :title))) + (if property (org-element-interpret-data property) + (file-name-nondirectory (file-name-sans-extension file)))))) + (unless visiting (kill-buffer buffer)) + (org-publish-cache-set-file-property file :title title) + title))))) (defun org-publish-find-date (file) "Find the date of FILE in project. diff --git a/lisp/ox.el b/lisp/ox.el index 061b8dca7..642700780 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -117,7 +117,7 @@ (:section-numbers nil "num" org-export-with-section-numbers) (:select-tags "SELECT_TAGS" nil org-export-select-tags split) (:time-stamp-file nil "timestamp" org-export-time-stamp-file) - (:title "TITLE" nil org-export--default-title space) + (:title "TITLE" nil nil space) (:with-archived-trees nil "arch" org-export-with-archived-trees) (:with-author nil "author" org-export-with-author) (:with-clocks nil "c" org-export-with-clocks) @@ -1701,7 +1701,9 @@ Assume buffer is in Org mode. Narrowing, if any, is ignored." ;; Return final value. plist)))) ;; Read options in the current buffer. - (setq plist (funcall get-options buffer-file-name nil)) + (setq plist + (funcall get-options + (and buffer-file-name (list buffer-file-name)) nil)) ;; Parse keywords specified in `org-element-document-properties'. (mapc (lambda (keyword) ;; Find the property associated to the keyword. @@ -1719,19 +1721,11 @@ Assume buffer is in Org mode. Narrowing, if any, is ignored." (defun org-export--get-buffer-attributes () "Return properties related to buffer attributes, as a plist." ;; Store full path of input file name, or nil. For internal use. - (list :input-file (buffer-file-name (buffer-base-buffer)))) - -(defvar org-export--default-title nil) ; Dynamically scoped. -(defun org-export-store-default-title () - "Return default title for current document, as a string. -Title is extracted from associated file name, if any, or buffer's -name." - (setq org-export--default-title - (or (let ((visited-file (buffer-file-name (buffer-base-buffer)))) - (and visited-file + (let ((visited-file (buffer-file-name (buffer-base-buffer)))) + (list :input-file visited-file + :title (if (not visited-file) (buffer-name (buffer-base-buffer)) (file-name-sans-extension - (file-name-nondirectory visited-file)))) - (buffer-name (buffer-base-buffer))))) + (file-name-nondirectory visited-file)))))) (defun org-export--get-global-options (&optional backend) "Return global export options as a plist. @@ -1743,8 +1737,9 @@ process." (all (append (and backend (org-export-backend-options backend)) org-export-options-alist))) (dolist (cell all plist) - (let ((prop (car cell))) - (unless (plist-member plist prop) + (let ((prop (car cell)) + (default-value (nth 3 cell))) + (unless (or (not default-value) (plist-member plist prop)) (setq plist (plist-put plist @@ -2945,10 +2940,6 @@ Return code as a string." (and body-only 'body-only)))) (org-export--get-buffer-attributes))) tree) - ;; Store default title in `org-export--default-title' so that - ;; `org-export-get-environment' can access it from buffer's - ;; copy and then add it properly to communication channel. - (org-export-store-default-title) ;; Update communication channel and get parse tree. Buffer ;; isn't parsed directly. Instead, a temporary copy is ;; created, where include keywords, macros are expanded and