0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-12 23:10:07 +00:00

Added hooks in org-publish.el.

There are now two hooks:
`org-publish-before-export-hook'
`org-publish-after-export-hook'.

`org-publish-org-to' deal with killing buffers (instead of
`org-publish-file')
This commit is contained in:
Bastien Guerry 2008-03-10 09:34:06 +00:00
parent 7da7810202
commit 2c6dce973b

View file

@ -276,6 +276,20 @@ files."
:group 'org-publish :group 'org-publish
:type 'directory) :type 'directory)
(defcustom org-publish-before-export-hook nil
"Hook run before export on the Org file.
If the functions in this hook modify the original Org buffer, the
modified buffer will be used for export, but the buffer will be
restored and saved back to its initial state after export."
:group 'org-publish
:type 'hook)
(defcustom org-publish-after-export-hook nil
"Hook run after export on the exported buffer.
If functions in this hook modify the buffer, it will be saved."
:group 'org-publish
:type 'hook)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Timestamp-related functions ;;; Timestamp-related functions
@ -331,7 +345,8 @@ Each element of this alist is of the form:
(defun org-publish-initialize-files-alist (&optional refresh) (defun org-publish-initialize-files-alist (&optional refresh)
"Set `org-publish-files-alist' if it is not set. "Set `org-publish-files-alist' if it is not set.
Also set it if the optional argument REFRESH is non-nil." Also set it if the optional argument REFRESH is non-nil."
(when (or (not org-publish-files-alist) refresh) (interactive "P")
(when (or refresh (not org-publish-files-alist))
(setq org-publish-files-alist (setq org-publish-files-alist
(org-publish-get-files org-publish-project-alist)))) (org-publish-get-files org-publish-project-alist))))
@ -437,7 +452,6 @@ matching filenames."
org-publish-files-alist)))) org-publish-files-alist))))
(assoc project-name org-publish-project-alist))) (assoc project-name org-publish-project-alist)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Pluggable publishing back-end functions ;;; Pluggable publishing back-end functions
@ -450,10 +464,27 @@ PUB-DIR is the publishing directory."
(unless (file-exists-p pub-dir) (unless (file-exists-p pub-dir)
(make-directory pub-dir t)) (make-directory pub-dir t))
(find-file filename) (find-file filename)
(let ((init-buf (current-buffer))
(init-point (point))
(init-buf-string (buffer-string)) export-buf)
;; run hooks before exporting
(run-hooks 'org-publish-before-export-hook)
;; export the possibly modified buffer
(setq export-buf
(funcall (intern (concat "org-export-as-" format)) (funcall (intern (concat "org-export-as-" format))
(plist-get plist :headline-levels) (plist-get plist :headline-levels)
nil plist nil nil pub-dir) nil plist nil nil pub-dir))
(kill-buffer (current-buffer))) (set-buffer export-buf)
;; run hooks after export and save export
(and (run-hooks 'org-publish-after-export-hook)
(if (buffer-modified-p) (save-buffer)))
;; maybe restore buffer's content
(set-buffer init-buf)
(when (buffer-modified-p init-buf)
(erase-buffer)
(insert init-buf-string)
(save-buffer)
(goto-char init-point))))
(defun org-publish-org-to-latex (plist filename pub-dir) (defun org-publish-org-to-latex (plist filename pub-dir)
"Publish an org file to LaTeX. "Publish an org file to LaTeX.
@ -503,12 +534,8 @@ FILENAME is the filename of the file to be published."
(mapc (lambda (f) (mapc (lambda (f)
(funcall f project-plist filename tmp-pub-dir)) (funcall f project-plist filename tmp-pub-dir))
publishing-function) publishing-function)
(let ((last-buffer (current-buffer))) (funcall publishing-function project-plist filename tmp-pub-dir)))
(funcall publishing-function project-plist filename tmp-pub-dir) (org-publish-update-timestamp filename)))
;; kill export buffers when publishing
(if (not (eq last-buffer (current-buffer)))
(kill-buffer (current-buffer)))))
(org-publish-update-timestamp filename))))
(defun org-publish-projects (projects) (defun org-publish-projects (projects)
"Publish all files belonging to the PROJECTS alist. "Publish all files belonging to the PROJECTS alist.
@ -549,7 +576,8 @@ Default for INDEX-FILENAME is 'index.org'."
(with-temp-buffer (with-temp-buffer
(while (setq file (pop files)) (while (setq file (pop files))
(let ((fn (file-name-nondirectory file))) (let ((fn (file-name-nondirectory file)))
(unless (string= fn ifn) ;; index shouldn't index itself ;; index shouldn't index itself
(unless (string= fn ifn)
(insert (concat " + [[file:" fn "][" (insert (concat " + [[file:" fn "]["
(file-name-sans-extension fn) (file-name-sans-extension fn)
"]]\n"))))) "]]\n")))))