diff options
author | David Arroyo Menendez <davidam9@riseup.net> | 2013-11-16 20:12:58 +0100 |
---|---|---|
committer | David Arroyo Menendez <davidam9@riseup.net> | 2013-11-16 20:12:58 +0100 |
commit | 2de63285fedd9f5d64cfc3b4a369216fc297a3fe (patch) | |
tree | ce6c062df902d12f5f1ae91e69cc29dc65a52b09 | |
parent | 19f55fbe27e2091d45f60fca0aff67173d4a340f (diff) | |
parent | fc95ee2768549dfd1f8fd3d6e3a77161cefc1f56 (diff) | |
download | org-mode-2de63285fedd9f5d64cfc3b4a369216fc297a3fe.tar.gz |
Merge branch 'master' of orgmode.org:org-mode
-rw-r--r-- | contrib/lisp/org-colview-xemacs.el | 4 | ||||
-rw-r--r-- | lisp/ob-C.el | 2 | ||||
-rw-r--r-- | lisp/ob-clojure.el | 2 | ||||
-rw-r--r-- | lisp/ob-python.el | 6 | ||||
-rw-r--r-- | lisp/ob-tangle.el | 2 | ||||
-rw-r--r-- | lisp/org-agenda.el | 2 | ||||
-rw-r--r-- | lisp/org-archive.el | 1 | ||||
-rw-r--r-- | lisp/org-clock.el | 3 | ||||
-rw-r--r-- | lisp/org-colview.el | 5 | ||||
-rw-r--r-- | lisp/org-docview.el | 8 | ||||
-rw-r--r-- | lisp/org-element.el | 235 | ||||
-rw-r--r-- | lisp/org-id.el | 4 | ||||
-rw-r--r-- | lisp/org-macs.el | 8 | ||||
-rw-r--r-- | lisp/org-table.el | 3 | ||||
-rw-r--r-- | lisp/org.el | 63 | ||||
-rw-r--r-- | lisp/ox-html.el | 3 | ||||
-rw-r--r-- | lisp/ox-odt.el | 3 | ||||
-rw-r--r-- | lisp/ox-org.el | 68 | ||||
-rw-r--r-- | lisp/ox.el | 10 | ||||
-rw-r--r-- | testing/examples/babel.org | 8 | ||||
-rw-r--r-- | testing/lisp/test-org-element.el | 57 | ||||
-rw-r--r-- | testing/lisp/test-ox.el | 41 |
22 files changed, 291 insertions, 247 deletions
diff --git a/contrib/lisp/org-colview-xemacs.el b/contrib/lisp/org-colview-xemacs.el index 63c0238..f9b35d3 100644 --- a/contrib/lisp/org-colview-xemacs.el +++ b/contrib/lisp/org-colview-xemacs.el @@ -477,6 +477,7 @@ This is the compiled version of the format.") (defvar org-colview-initial-truncate-line-value nil "Remember the value of `truncate-lines' across colview.") +;;;###autoload (defun org-columns-remove-overlays () "Remove all currently active column overlays." (interactive) @@ -820,6 +821,7 @@ around it." (let ((value (get-char-property (point) 'org-columns-value))) (org-open-link-from-string value arg))) +;;;###autoload (defun org-columns-get-format-and-top-level () (let (fmt) (when (condition-case nil (org-back-to-heading) (error nil)) @@ -1091,6 +1093,7 @@ Don't set this, this is meant for dynamic scoping.") (org-overlay-display ov (format fmt val)))))) org-columns-overlays)))) +;;;###autoload (defun org-columns-compute (property) "Sum the values of property PROPERTY hierarchically, for the entire buffer." (interactive) @@ -1187,6 +1190,7 @@ Don't set this, this is meant for dynamic scoping.") (setq sum (+ (string-to-number (pop l)) (/ sum 60)))) sum))) +;;;###autoload (defun org-columns-number-to-string (n fmt &optional printf) "Convert a computed column number to a string value, according to FMT." (cond diff --git a/lisp/ob-C.el b/lisp/ob-C.el index ecc08c8..bac2920 100644 --- a/lisp/ob-C.el +++ b/lisp/ob-C.el @@ -32,6 +32,8 @@ ;;; Code: (require 'ob) (require 'cc-mode) +(eval-when-compile + (require 'cl)) (declare-function org-entry-get "org" (pom property &optional inherit literal-nil)) diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index d797a3f..e18fa76 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -45,6 +45,8 @@ ;;; Code: (require 'ob) +(eval-when-compile + (require 'cl)) (declare-function cider-current-ns "ext:cider-interaction" ()) (declare-function nrepl-send-string-sync "ext:nrepl-client" (input &optional ns session)) diff --git a/lisp/ob-python.el b/lisp/ob-python.el index fc7b9e2..2f91b53 100644 --- a/lisp/ob-python.el +++ b/lisp/ob-python.el @@ -47,15 +47,13 @@ :group 'org-babel :type 'string) -(defcustom org-babel-python-mode 'python +(defcustom org-babel-python-mode + (if (or (featurep 'xemacs) (featurep 'python-mode)) 'python-mode 'python) "Preferred python mode for use in running python interactively. This will typically be either 'python or 'python-mode." :group 'org-babel :version "24.4" :package-version '(Org . "8.0") - :set (lambda (var val) - (set-default var (if (or (featurep 'xemacs) (featurep 'python-mode)) - 'python-mode 'python))) :type 'symbol) (defvar org-src-preserve-indentation) diff --git a/lisp/ob-tangle.el b/lisp/ob-tangle.el index 808f12b..7b06c39 100644 --- a/lisp/ob-tangle.el +++ b/lisp/ob-tangle.el @@ -27,8 +27,6 @@ ;;; Code: (require 'org-src) -(eval-when-compile - (require 'cl)) (declare-function org-edit-special "org" (&optional arg)) (declare-function org-link-escape "org" (text &optional table)) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 027ab7a..1936df1 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -69,6 +69,7 @@ (declare-function calendar-persian-date-string "cal-persia" (&optional date)) (declare-function calendar-check-holidays "holidays" (date)) +(declare-function org-columns-remove-overlays "org-colview" ()) (declare-function org-datetree-find-date-create "org-datetree" (date &optional keep-restriction)) (declare-function org-columns-quit "org-colview" ()) @@ -5452,6 +5453,7 @@ This function is invoked if `org-agenda-todo-ignore-deadlines', (>= days n) (<= days n)))) +;;;###autoload (defun org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item (&optional end) "Do we have a reason to ignore this TODO entry because it has a time stamp?" diff --git a/lisp/org-archive.el b/lisp/org-archive.el index d5bdff1..3dc52c1 100644 --- a/lisp/org-archive.el +++ b/lisp/org-archive.el @@ -135,6 +135,7 @@ information." (match-string 1)) (t org-archive-location)))))) +;;;###autoload (defun org-add-archive-files (files) "Splice the archive files into the list of files. This implies visiting all these files and finding out what the diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 88213e3..c0a8254 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -1873,6 +1873,7 @@ will be easy to remove." (overlay-put ov 'end-glyph (make-glyph tx))) (push ov org-clock-overlays))) +;;;###autoload (defun org-clock-remove-overlays (&optional beg end noremove) "Remove the occur highlights from the buffer. BEG and END are ignored. If NOREMOVE is nil, remove this function @@ -2145,6 +2146,7 @@ If you can combine both, the month starting day will have priority." ((= n 3) "3rd") ((= n 4) "4th"))) +;;;###autoload (defun org-clocktable-shift (dir n) "Try to shift the :block date of the clocktable at point. Point must be in the #+BEGIN: line of a clocktable, or this function @@ -2754,6 +2756,7 @@ This function is made for clock tables." (defvar org-clock-loaded nil "Was the clock file loaded?") +;;;###autoload (defun org-clock-update-time-maybe () "If this is a CLOCK line, update it and return t. Otherwise, return nil." diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 523b421..361560d 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -323,6 +323,7 @@ for the duration of the command.") (defvar org-colview-initial-truncate-line-value nil "Remember the value of `truncate-lines' across colview.") +;;;###autoload (defun org-columns-remove-overlays () "Remove all currently active column overlays." (interactive) @@ -670,6 +671,7 @@ around it." (let ((value (get-char-property (point) 'org-columns-value))) (org-open-link-from-string value arg))) +;;;###autoload (defun org-columns-get-format-and-top-level () (let ((fmt (org-columns-get-format))) (org-columns-goto-top-level) @@ -951,6 +953,8 @@ display, or in the #+COLUMNS line of the current buffer." (defvar org-inlinetask-min-level (if (featurep 'org-inlinetask) org-inlinetask-min-level 15)) + +;;;###autoload (defun org-columns-compute (property) "Sum the values of property PROPERTY hierarchically, for the entire buffer." (interactive) @@ -1054,6 +1058,7 @@ display, or in the #+COLUMNS line of the current buffer." (setq sum (+ (string-to-number (pop l)) (/ sum 60)))) sum))) +;;;###autoload (defun org-columns-number-to-string (n fmt &optional printf) "Convert a computed column number to a string value, according to FMT." (cond diff --git a/lisp/org-docview.el b/lisp/org-docview.el index 72ccc46..8e61c8a 100644 --- a/lisp/org-docview.el +++ b/lisp/org-docview.el @@ -44,12 +44,10 @@ (require 'org) +(require 'doc-view) -(declare-function doc-view-goto-page "ext:doc-view" (page)) -(declare-function image-mode-window-get "ext:image-mode" - (prop &optional winprops)) - -(org-autoload "doc-view" '(doc-view-goto-page)) +(declare-function doc-view-goto-page "doc-view" (page)) +(declare-function image-mode-window-get "image-mode" (prop &optional winprops)) (org-add-link-type "docview" 'org-docview-open 'org-docview-export) (add-hook 'org-store-link-functions 'org-docview-store-link) diff --git a/lisp/org-element.el b/lisp/org-element.el index 5e252ea..57e26ff 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -3550,100 +3550,97 @@ Assume point is at the beginning of the timestamp." (defun org-element-timestamp-interpreter (timestamp contents) "Interpret TIMESTAMP object as Org syntax. CONTENTS is nil." - ;; Use `:raw-value' if specified. - (or (org-element-property :raw-value timestamp) - ;; Otherwise, build timestamp string. - (let* ((repeat-string - (concat - (case (org-element-property :repeater-type timestamp) - (cumulate "+") (catch-up "++") (restart ".+")) - (let ((val (org-element-property :repeater-value timestamp))) - (and val (number-to-string val))) - (case (org-element-property :repeater-unit timestamp) - (hour "h") (day "d") (week "w") (month "m") (year "y")))) - (warning-string - (concat - (case (org-element-property :warning-type timestamp) - (first "--") - (all "-")) - (let ((val (org-element-property :warning-value timestamp))) - (and val (number-to-string val))) - (case (org-element-property :warning-unit timestamp) - (hour "h") (day "d") (week "w") (month "m") (year "y")))) - (build-ts-string - ;; Build an Org timestamp string from TIME. ACTIVEP is - ;; non-nil when time stamp is active. If WITH-TIME-P is - ;; non-nil, add a time part. HOUR-END and MINUTE-END - ;; specify a time range in the timestamp. REPEAT-STRING - ;; is the repeater string, if any. - (lambda (time activep &optional with-time-p hour-end minute-end) - (let ((ts (format-time-string - (funcall (if with-time-p 'cdr 'car) - org-time-stamp-formats) - time))) - (when (and hour-end minute-end) - (string-match "[012]?[0-9]:[0-5][0-9]" ts) - (setq ts - (replace-match - (format "\\&-%02d:%02d" hour-end minute-end) - nil nil ts))) - (unless activep (setq ts (format "[%s]" (substring ts 1 -1)))) - (dolist (s (list repeat-string warning-string)) - (when (org-string-nw-p s) - (setq ts (concat (substring ts 0 -1) - " " - s - (substring ts -1))))) - ;; Return value. - ts))) - (type (org-element-property :type timestamp))) - (case type - ((active inactive) - (let* ((minute-start (org-element-property :minute-start timestamp)) - (minute-end (org-element-property :minute-end timestamp)) - (hour-start (org-element-property :hour-start timestamp)) - (hour-end (org-element-property :hour-end timestamp)) - (time-range-p (and hour-start hour-end minute-start minute-end - (or (/= hour-start hour-end) - (/= minute-start minute-end))))) - (funcall - build-ts-string - (encode-time 0 - (or minute-start 0) - (or hour-start 0) - (org-element-property :day-start timestamp) - (org-element-property :month-start timestamp) - (org-element-property :year-start timestamp)) - (eq type 'active) - (and hour-start minute-start) - (and time-range-p hour-end) - (and time-range-p minute-end)))) - ((active-range inactive-range) - (let ((minute-start (org-element-property :minute-start timestamp)) - (minute-end (org-element-property :minute-end timestamp)) - (hour-start (org-element-property :hour-start timestamp)) - (hour-end (org-element-property :hour-end timestamp))) - (concat - (funcall - build-ts-string (encode-time - 0 - (or minute-start 0) - (or hour-start 0) - (org-element-property :day-start timestamp) - (org-element-property :month-start timestamp) - (org-element-property :year-start timestamp)) - (eq type 'active-range) - (and hour-start minute-start)) - "--" - (funcall build-ts-string - (encode-time 0 - (or minute-end 0) - (or hour-end 0) - (org-element-property :day-end timestamp) - (org-element-property :month-end timestamp) - (org-element-property :year-end timestamp)) - (eq type 'active-range) - (and hour-end minute-end))))))))) + (let* ((repeat-string + (concat + (case (org-element-property :repeater-type timestamp) + (cumulate "+") (catch-up "++") (restart ".+")) + (let ((val (org-element-property :repeater-value timestamp))) + (and val (number-to-string val))) + (case (org-element-property :repeater-unit timestamp) + (hour "h") (day "d") (week "w") (month "m") (year "y")))) + (warning-string + (concat + (case (org-element-property :warning-type timestamp) + (first "--") + (all "-")) + (let ((val (org-element-property :warning-value timestamp))) + (and val (number-to-string val))) + (case (org-element-property :warning-unit timestamp) + (hour "h") (day "d") (week "w") (month "m") (year "y")))) + (build-ts-string + ;; Build an Org timestamp string from TIME. ACTIVEP is + ;; non-nil when time stamp is active. If WITH-TIME-P is + ;; non-nil, add a time part. HOUR-END and MINUTE-END + ;; specify a time range in the timestamp. REPEAT-STRING is + ;; the repeater string, if any. + (lambda (time activep &optional with-time-p hour-end minute-end) + (let ((ts (format-time-string + (funcall (if with-time-p 'cdr 'car) + org-time-stamp-formats) + time))) + (when (and hour-end minute-end) + (string-match "[012]?[0-9]:[0-5][0-9]" ts) + (setq ts + (replace-match + (format "\\&-%02d:%02d" hour-end minute-end) + nil nil ts))) + (unless activep (setq ts (format "[%s]" (substring ts 1 -1)))) + (dolist (s (list repeat-string warning-string)) + (when (org-string-nw-p s) + (setq ts (concat (substring ts 0 -1) + " " + s + (substring ts -1))))) + ;; Return value. + ts))) + (type (org-element-property :type timestamp))) + (case type + ((active inactive) + (let* ((minute-start (org-element-property :minute-start timestamp)) + (minute-end (org-element-property :minute-end timestamp)) + (hour-start (org-element-property :hour-start timestamp)) + (hour-end (org-element-property :hour-end timestamp)) + (time-range-p (and hour-start hour-end minute-start minute-end + (or (/= hour-start hour-end) + (/= minute-start minute-end))))) + (funcall + build-ts-string + (encode-time 0 + (or minute-start 0) + (or hour-start 0) + (org-element-property :day-start timestamp) + (org-element-property :month-start timestamp) + (org-element-property :year-start timestamp)) + (eq type 'active) + (and hour-start minute-start) + (and time-range-p hour-end) + (and time-range-p minute-end)))) + ((active-range inactive-range) + (let ((minute-start (org-element-property :minute-start timestamp)) + (minute-end (org-element-property :minute-end timestamp)) + (hour-start (org-element-property :hour-start timestamp)) + (hour-end (org-element-property :hour-end timestamp))) + (concat + (funcall + build-ts-string (encode-time + 0 + (or minute-start 0) + (or hour-start 0) + (org-element-property :day-start timestamp) + (org-element-property :month-start timestamp) + (org-element-property :year-start timestamp)) + (eq type 'active-range) + (and hour-start minute-start)) + "--" + (funcall build-ts-string + (encode-time 0 + (or minute-end 0) + (or hour-end 0) + (org-element-property :day-end timestamp) + (org-element-property :month-end timestamp) + (org-element-property :year-end timestamp)) + (eq type 'active-range) + (and hour-end minute-end)))))))) (defun org-element-timestamp-successor () "Search for the next timestamp object. @@ -4810,7 +4807,7 @@ the value to store. Nothing will be stored if (unless org-element--cache (org-element-cache-reset)) (puthash pos data org-element--cache))) -(defsubst org-element--shift-positions (element offset) +(defsubst org-element--cache-shift-positions (element offset) "Shift ELEMENT properties relative to buffer positions by OFFSET. Properties containing buffer positions are `:begin', `:end', `:contents-begin', `:contents-end' and `:structure'. They are @@ -4819,12 +4816,12 @@ modified by side-effect. Return modified element." ;; Shift :structure property for the first plain list only: it is ;; the only one that really matters and it prevents from shifting ;; it more than once. - (when (eq (car element) 'plain-list) - (let ((structure (plist-get properties :structure))) - (when (<= (plist-get properties :begin) (caar structure)) - (dolist (item structure) - (incf (car item) offset) - (incf (nth 6 item) offset))))) + (when (and (eq (org-element-type element) 'plain-list) + (not (eq (org-element-type (plist-get properties :parent)) + 'item))) + (dolist (item (plist-get properties :structure)) + (incf (car item) offset) + (incf (nth 6 item) offset))) (plist-put properties :begin (+ (plist-get properties :begin) offset)) (plist-put properties :end (+ (plist-get properties :end) offset)) (dolist (key '(:contents-begin :contents-end :post-affiliated)) @@ -4996,14 +4993,14 @@ removed from the cache." (let* ((conflictp (consp (caar value))) (value-to-shift (if conflictp (cdr value) value))) ;; Shift element part. - (org-element--shift-positions (car value-to-shift) offset) + (org-element--cache-shift-positions (car value-to-shift) offset) ;; Shift objects part. (dolist (object-data (cdr value-to-shift)) (incf (car object-data) offset) (dolist (successor (nth 1 object-data)) (incf (cdr successor) offset)) (dolist (object (cddr object-data)) - (org-element--shift-positions object offset))) + (org-element--cache-shift-positions object offset))) ;; Shift key-value pair. (let* ((new-key (+ key offset)) (new-value (gethash new-key org-element--cache))) @@ -5038,22 +5035,22 @@ removed from the cache." ;; Preserve any element ending before BEG. If it ;; overlaps the BEG-END area, remove it. (t - (when (let ((element (car value))) - (or (>= (org-element-property :end element) beg) - ;; Special case: footnote definitions and - ;; plain lists can end with blank lines. - ;; Modifying those can also alter last - ;; element inside. We must therefore - ;; remove these elements from cache. - (let ((parent - (org-element-property :parent element))) - (and (memq (org-element-type parent) - '(footnote-definition plain-list)) - (>= (org-element-property :end parent) beg) - (= (org-element-property :contents-end - parent) - (org-element-property :end element)))))) - (remhash key org-element--cache))))) + (let ((element (car value))) + (if (>= (org-element-property :end element) beg) + (remhash key org-element--cache) + ;; Special case: footnote definitions and plain + ;; lists can end with blank lines. Modifying + ;; those can also alter last element inside. We + ;; must therefore remove them from cache. + (let ((parent (org-element-property :parent element))) + (when (and parent (eq (org-element-type parent) 'item)) + (setq parent (org-element-property :parent parent))) + (when (and (memq (org-element-type parent) + '(footnote-definition plain-list)) + (>= (org-element-property :end parent) beg) + (= (org-element-property :contents-end parent) + (org-element-property :end element))) + (remhash key org-element--cache)))))))) org-element--cache) ;; Signal cache as up-to-date. (org-element--cache-cancel-changes)))))) diff --git a/lisp/org-id.el b/lisp/org-id.el index f1fa05b..37f6e70 100644 --- a/lisp/org-id.el +++ b/lisp/org-id.el @@ -233,6 +233,7 @@ With optional argument FORCE, force the creation of a new ID." (org-entry-put (point) "ID" nil)) (org-id-get (point) 'create)) +;;;###autoload (defun org-id-copy () "Copy the ID of the entry at point to the kill ring. Create an ID if necessary." @@ -258,6 +259,7 @@ In any case, the ID of the entry is returned." (org-id-add-location id (buffer-file-name (buffer-base-buffer))) id))))) +;;;###autoload (defun org-id-get-with-outline-path-completion (&optional targets) "Use `outline-path-completion' to retrieve the ID of an entry. TARGETS may be a setting for `org-refile-targets' to define @@ -274,6 +276,7 @@ If necessary, the ID is created." (prog1 (org-id-get pom 'create) (move-marker pom nil)))) +;;;###autoload (defun org-id-get-with-outline-drilling (&optional targets) "Use an outline-cycling interface to retrieve the ID of an entry. This only finds entries in the current buffer, using `org-get-location'. @@ -320,6 +323,7 @@ With optional argument MARKERP, return the position as a new marker." ;; Creating new IDs +;;;###autoload (defun org-id-new (&optional prefix) "Create a new globally unique ID. diff --git a/lisp/org-macs.el b/lisp/org-macs.el index 0083d29..4afbace 100644 --- a/lisp/org-macs.el +++ b/lisp/org-macs.el @@ -283,14 +283,6 @@ we turn off invisibility temporarily. Use this in a `let' form." (<= (match-beginning n) pos) (>= (match-end n) pos))) -(defun org-autoload (file functions) - "Establish autoload for all FUNCTIONS in FILE, if not bound already." - (let ((d (format "Documentation will be available after `%s.el' is loaded." - file)) - f) - (while (setq f (pop functions)) - (or (fboundp f) (autoload f file d t))))) - (defun org-match-line (re) "Looking-at at the beginning of the current line." (save-excursion diff --git a/lisp/org-table.el b/lisp/org-table.el index 7024178..0407c9d 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -921,6 +921,7 @@ When nil, simply write \"#ERROR\" in corrupted fields.") (setq org-table-may-need-update nil) )) +;;;###autoload (defun org-table-begin (&optional table-type) "Find the beginning of the table and return its position. With argument TABLE-TYPE, go to the beginning of a table.el-type table." @@ -934,6 +935,7 @@ With argument TABLE-TYPE, go to the beginning of a table.el-type table." (beginning-of-line 2) (point)))) +;;;###autoload (defun org-table-end (&optional table-type) "Find the end of the table and return its position. With argument TABLE-TYPE, go to the end of a table.el-type table." @@ -1205,6 +1207,7 @@ Return t when the line exists, nil if it does not exist." (< (setq cnt (1+ cnt)) N))) (= cnt N))) +;;;###autoload (defun org-table-blank-field () "Blank the current table field or active region." (interactive) diff --git a/lisp/org.el b/lisp/org.el index 802dc20..a3c1958 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -115,24 +115,33 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function org-inlinetask-outline-regexp "org-inlinetask" ()) (declare-function org-inlinetask-toggle-visibility "org-inlinetask" ()) (declare-function org-pop-to-buffer-same-window "org-compat" (&optional buffer-or-name norecord label)) +(declare-function org-clocktable-shift "org-clock" (dir n)) (declare-function org-clock-get-last-clock-out-time "org-clock" ()) +(declare-function org-clock-update-time-maybe "org-clock" ()) +(declare-function org-clock-remove-overlays "org-clock" (&optional beg end noremove)) (declare-function org-clock-timestamps-up "org-clock" (&optional n)) (declare-function org-clock-timestamps-down "org-clock" (&optional n)) (declare-function org-clock-sum-current-item "org-clock" (&optional tstart)) +(declare-function org-babel-tangle-file "ob-tangle" (file &optional target-file lang)) (declare-function orgtbl-mode "org-table" (&optional arg)) (declare-function org-clock-out "org-clock" (&optional switch-to-state fail-quietly at-time)) (declare-function org-beamer-mode "ox-beamer" ()) +(declare-function org-table-blank-field "org-table" ()) (declare-function org-table-edit-field "org-table" (arg)) +(declare-function org-table-insert-row "org-table" (&optional arg)) (declare-function org-table-justify-field-maybe "org-table" (&optional new)) (declare-function org-table-set-constants "org-table" ()) (declare-function org-table-calc-current-TBLFM "org-table" (&optional arg)) (declare-function org-id-get-create "org-id" (&optional force)) +(declare-function org-add-archive-files "org-archive" (files)) (declare-function org-id-find-id-file "org-id" (id)) (declare-function org-tags-view "org-agenda" (&optional todo-only match)) (declare-function org-agenda-list "org-agenda" (&optional arg start-day span)) (declare-function org-agenda-redo "org-agenda" (&optional all)) (declare-function org-table-align "org-table" ()) +(declare-function org-table-begin "org-table" (&optional table-type)) +(declare-function org-table-end "org-table" (&optional table-type)) (declare-function org-table-paste-rectangle "org-table" ()) (declare-function org-table-maybe-eval-formula "org-table" ()) (declare-function org-table-maybe-recalculate-line "org-table" ()) @@ -161,6 +170,10 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function org-element-restriction "org-element" (element)) (declare-function org-element-type "org-element" (element)) +(defsubst org-uniquify (list) + "Non-destructively remove duplicate elements from LIST." + (let ((res (copy-sequence list))) (delete-dups res))) + ;; load languages based on value of `org-babel-load-languages' (defvar org-babel-load-languages) @@ -1721,17 +1734,15 @@ In tables, the special behavior of RET has precedence." :group 'org-link-follow :type 'boolean) -(defcustom org-mouse-1-follows-link 450 +(defcustom org-mouse-1-follows-link + (if (boundp 'mouse-1-click-follows-link) mouse-1-click-follows-link t) "Non-nil means mouse-1 on a link will follow the link. A longer mouse click will still set point. Does not work on XEmacs. Needs to be set before org.el is loaded." :group 'org-link-follow :version "24.4" :package-version '(Org . "8.3") - :set (lambda (var val) - (set-default var (if (boundp 'mouse-1-click-follows-link) - mouse-1-click-follows-link t))) - :type '(choice + :type '(choice (const :tag "A double click follows the link" 'double) (const :tag "Unconditionally follow the link with mouse-1" t) (integer :tag "mouse-1 click does not follow the link if longer than N ms" 450))) @@ -4244,12 +4255,6 @@ Normal means, no org-mode-specific context." "Detect the first line outside a table when searching from within it. This works for both table types.") -;; Autoload the functions in org-table.el that are needed by functions here. - -(eval-and-compile - (org-autoload "org-table" - '(org-table-begin org-table-blank-field org-table-end))) - (defconst org-TBLFM-regexp "^[ \t]*#\\+TBLFM: " "Detect a #+TBLFM line.") @@ -4330,12 +4335,6 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables." (re-search-forward org-table-any-border-regexp nil 1)))) (unless quietly (message "Mapping tables: done"))) -;; Declare and autoload functions from org-agenda.el - -(eval-and-compile - (org-autoload "org-agenda" - '(org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item))) - (declare-function org-clock-save-markers-for-cut-and-paste "org-clock" (beg end)) (declare-function org-clock-update-mode-line "org-clock" ()) (declare-function org-resolve-clocks "org-clock" @@ -4361,11 +4360,6 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables." Return nil if no clock is running." (marker-buffer org-clock-marker)) -(eval-and-compile - (org-autoload "org-clock" '(org-clock-remove-overlays - org-clock-update-time-maybe - org-clocktable-shift))) - (defun org-check-running-clock () "Check if the current buffer contains the running clock. If yes, offer to stop it and to save the buffer with the changes." @@ -4565,33 +4559,18 @@ Otherwise, these types are allowed: (defalias 'org-advertized-archive-subtree 'org-archive-subtree) -(eval-and-compile - (org-autoload "org-archive" - '(org-add-archive-files))) - -;; Autoload Column View Code +;; Declare Column View Code (declare-function org-columns-number-to-string "org-colview" (n fmt &optional printf)) (declare-function org-columns-get-format-and-top-level "org-colview" ()) (declare-function org-columns-compute "org-colview" (property)) -(org-autoload (if (featurep 'xemacs) "org-colview-xemacs" "org-colview") - '(org-columns-number-to-string - org-columns-get-format-and-top-level - org-columns-compute - org-columns-remove-overlays)) - -;; Autoload ID code +;; Declare ID code (declare-function org-id-store-link "org-id") (declare-function org-id-locations-load "org-id") (declare-function org-id-locations-save "org-id") (defvar org-id-track-globally) -(org-autoload "org-id" - '(org-id-new - org-id-copy - org-id-get-with-outline-path-completion - org-id-get-with-outline-drilling)) ;;; Variables for pre-computed regular expressions, all buffer local @@ -12858,7 +12837,7 @@ This function is run automatically after each state change to a DONE state." (org-log-done nil) (org-todo-log-states nil) re type n what ts time to-state) - (when (and repeat (not (zerop (string-to-number repeat)))) + (when (and repeat (not (zerop (string-to-number (substring repeat 1))))) (if (eq org-log-repeat t) (setq org-log-repeat 'state)) (setq to-state (or (org-entry-get nil "REPEAT_TO_STATE") org-todo-repeat-to-state)) @@ -21816,10 +21795,6 @@ for the search purpose." "Return the reverse of STRING." (apply 'string (reverse (string-to-list string)))) -(defsubst org-uniquify (list) - "Non-destructively remove duplicate elements from LIST." - (let ((res (copy-sequence list))) (delete-dups res))) - (defun org-uniquify-alist (alist) "Merge elements of ALIST with the same key. diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 6d44f07..9f35a46 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -674,7 +674,7 @@ The function should return the string to be exported." ;;;; LaTeX -(defcustom org-html-with-latex t +(defcustom org-html-with-latex org-export-with-latex "Non-nil means process LaTeX math snippets. When set, the exporter will process LaTeX environments and @@ -695,7 +695,6 @@ t Synonym for `mathjax'." :group 'org-export-html :version "24.4" :package-version '(Org . "8.0") - :set (lambda (var val) (set-default var org-export-with-latex)) :type '(choice (const :tag "Do not process math in any way" nil) (const :tag "Use dvipng to make images" dvipng) diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el index 1b3bddf..e848ff6 100644 --- a/lisp/ox-odt.el +++ b/lisp/ox-odt.el @@ -705,7 +705,7 @@ The function should return the string to be exported." ;;;; LaTeX -(defcustom org-odt-with-latex t +(defcustom org-odt-with-latex org-export-with-latex "Non-nil means process LaTeX math snippets. When set, the exporter will process LaTeX environments and @@ -726,7 +726,6 @@ t Synonym for `mathjax'." :group 'org-export-odt :version "24.4" :package-version '(Org . "8.0") - :set (lambda (var val) (set-default var org-export-with-latex)) :type '(choice (const :tag "Do not process math in any way" nil) (const :tag "Use dvipng to make images" dvipng) diff --git a/lisp/ox-org.el b/lisp/ox-org.el index cecad56..32262e2 100644 --- a/lisp/ox-org.el +++ b/lisp/ox-org.el @@ -87,6 +87,7 @@ setting of `org-html-htmlize-output-type' is 'css." (line-break . org-org-identity) (link . org-org-identity) (node-property . org-org-identity) + (template . org-org-template) (paragraph . org-org-identity) (plain-list . org-org-identity) (planning . org-org-identity) @@ -140,16 +141,54 @@ CONTENTS is its contents, as a string or nil. INFO is ignored." "Transcode KEYWORD element back into Org syntax. CONTENTS is nil. INFO is ignored. This function ignores keywords targeted at other export back-ends." - (unless (member (org-element-property :key keyword) - (mapcar - (lambda (block-cons) - (and (eq (cdr block-cons) 'org-element-export-block-parser) - (car block-cons))) - org-element-block-name-alist)) - (org-element-keyword-interpreter keyword nil))) + (let ((key (org-element-property :key keyword))) + (unless (or (member key + (mapcar + (lambda (block-cons) + (and (eq (cdr block-cons) + 'org-element-export-block-parser) + (car block-cons))) + org-element-block-name-alist)) + (member key + '("AUTHOR" "CREATOR" "DATE" "DESCRIPTION" "EMAIL" + "KEYWORDS" "TITLE"))) + (org-element-keyword-interpreter keyword nil)))) + +(defun org-org-template (contents info) + "Return Org document template with document keywords. +CONTENTS is the transcoded contents string. INFO is a plist used +as a communication channel." + (concat + (and (plist-get info :time-stamp-file) + (format-time-string "# Created %Y-%m-%d %a %H:%M\n")) + (format "#+TITLE: %s\n" (org-export-data (plist-get info :title) info)) + (and (plist-get info :with-date) + (let ((date (org-export-data (org-export-get-date info) info))) + (and (org-string-nw-p date) + (format "#+DATE: %s\n" date)))) + (and (plist-get info :with-author) + (let ((author (org-export-data (plist-get info :author) info))) + (and (org-string-nw-p author) + (format "#+AUTHOR: %s\n" author)))) + (and (plist-get info :with-email) + (let ((email (org-export-data (plist-get info :email) info))) + (and (org-string-nw-p email) + (format "#+EMAIL: %s\n" email)))) + (and (eq (plist-get info :with-creator) t) + (org-string-nw-p (plist-get info :creator)) + (format "#+CREATOR: %s\n" (plist-get info :creator))) + (and (org-string-nw-p (plist-get info :keywords)) + (format "#+KEYWORDS: %s\n" (plist-get info :keywords))) + (and (org-string-nw-p (plist-get info :description)) + (format "#+DESCRIPTION: %s\n" (plist-get info :description))) + contents + (and (eq (plist-get info :with-creator) 'comment) + (org-string-nw-p (plist-get info :creator)) + (format "\n# %s\n" (plist-get info :creator))))) ;;;###autoload -(defun org-org-export-as-org (&optional async subtreep visible-only ext-plist) +(defun org-org-export-as-org + (&optional async subtreep visible-only body-only ext-plist) "Export current buffer to an Org buffer. If narrowing is active in the current buffer, only export its @@ -168,6 +207,9 @@ first. When optional argument VISIBLE-ONLY is non-nil, don't export contents of hidden elements. +When optional argument BODY-ONLY is non-nil, strip document +keywords from output. + EXT-PLIST, when provided, is a property list with external parameters overriding Org default settings, but still inferior to file-local settings. @@ -177,10 +219,11 @@ be displayed when `org-export-show-temporary-export-buffer' is non-nil." (interactive) (org-export-to-buffer 'org "*Org ORG Export*" - async subtreep visible-only nil ext-plist (lambda () (org-mode)))) + async subtreep visible-only body-only ext-plist (lambda () (org-mode)))) ;;;###autoload -(defun org-org-export-to-org (&optional async subtreep visible-only ext-plist) +(defun org-org-export-to-org + (&optional async subtreep visible-only body-only ext-plist) "Export current buffer to an org file. If narrowing is active in the current buffer, only export its @@ -199,6 +242,9 @@ first. When optional argument VISIBLE-ONLY is non-nil, don't export contents of hidden elements. +When optional argument BODY-ONLY is non-nil, strip document +keywords from output. + EXT-PLIST, when provided, is a property list with external parameters overriding Org default settings, but still inferior to file-local settings. @@ -207,7 +253,7 @@ Return output file name." (interactive) (let ((outfile (org-export-output-file-name ".org" subtreep))) (org-export-to-file 'org outfile - async subtreep visible-only nil ext-plist))) + async subtreep visible-only body-only ext-plist))) ;;;###autoload (defun org-org-publish-to-org (plist filename pub-dir) @@ -90,6 +90,11 @@ (defvar org-table-number-regexp) +(defsubst org-export-get-parent (blob) + "Return BLOB parent or nil. +BLOB is the element or object considered." + (org-element-property :parent blob)) + ;;; Internal Variables ;; @@ -5156,11 +5161,6 @@ Return the new string." ;; `org-export-get-genealogy' returns the full genealogy of a given ;; element or object, from closest parent to full parse tree. -(defsubst org-export-get-parent (blob) - "Return BLOB parent or nil. -BLOB is the element or object considered." - (org-element-property :parent blob)) - (defun org-export-get-genealogy (blob) "Return full genealogy relative to a given element or object. diff --git a/testing/examples/babel.org b/testing/examples/babel.org index b1f1702..449824f 100644 --- a/testing/examples/babel.org +++ b/testing/examples/babel.org @@ -413,6 +413,9 @@ Note: Just export of a property can be done with a macro: {{{property(a)}}}. **** function definition +comments for ":var": +- The "or" is to deal with a property not present. +- The t is to get property inheritance. #+NAME: src_block_location_shell #+HEADER: :var a=(or (org-entry-get org-babel-current-src-block-location "a" t) "0") #+HEADER: :var b=(or (org-entry-get org-babel-current-src-block-location "b" t) "0") @@ -433,6 +436,11 @@ Note: Just export of a property can be done with a macro: {{{property(a)}}}. #+HEADER: :var e='nil #+BEGIN_SRC emacs-lisp :exports results (setq + ;; - The first `or' together with ":var <var>='nil" is to check for + ;; a value bound from an optional call argument, in the examples + ;; here: c=5, e=6 + ;; - The second `or' is to deal with a property not present + ;; - The t is to get property inheritance a (or a (string-to-number (or (org-entry-get org-babel-current-src-block-location "a" t) "0"))) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index ad98199..45a0bfa 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -2211,16 +2211,17 @@ Outside list" "Test clock interpreter." ;; Running clock. (should - (equal (let ((org-clock-string "CLOCK:")) - (org-test-parse-and-interpret "CLOCK: [2012-01-01 sun. 00:01]")) - "CLOCK: [2012-01-01 sun. 00:01]\n")) + (string-match + "CLOCK: \\[2012-01-01 .* 00:01\\]" + (let ((org-clock-string "CLOCK:")) + (org-test-parse-and-interpret "CLOCK: [2012-01-01 sun. 00:01]")))) ;; Closed clock. (should - (equal + (string-match + "CLOCK: \\[2012-01-01 .* 00:01\\]--\\[2012-01-01 .* 00:02\\] => 0:01" (let ((org-clock-string "CLOCK:")) (org-test-parse-and-interpret " -CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01")) - "CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01\n"))) +CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01"))))) (ert-deftest test-org-element/comment-interpreter () "Test comment interpreter." @@ -2320,12 +2321,12 @@ CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01")) (org-deadline-string "DEADLINE:") (org-scheduled-string "SCHEDULED:")) (should - (equal + (string-match + "\\* Headline +DEADLINE: <2012-03-29 .*?> SCHEDULED: <2012-03-29 .*?> CLOSED: \\[2012-03-29 .*?\\]" (org-test-parse-and-interpret "* Headline -DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]") - "* Headline -DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) +DEADLINE: <2012-03-29 thu.> SCHEDULED: <2012-03-29 thu.> CLOSED: [2012-03-29 thu.]"))))) (ert-deftest test-org-element/property-drawer-interpreter () "Test property drawer interpreter." @@ -2395,8 +2396,9 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) (ert-deftest test-org-element/timestamp-interpreter () "Test timestamp interpreter." ;; Active. - (should (equal (org-test-parse-and-interpret "<2012-03-29 thu. 16:40>") - "<2012-03-29 thu. 16:40>\n")) + (should + (string-match "<2012-03-29 .* 16:40>" + (org-test-parse-and-interpret "<2012-03-29 thu. 16:40>"))) (should (string-match "<2012-03-29 .* 16:40>" (org-element-timestamp-interpreter @@ -2404,8 +2406,9 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) (:type active :year-start 2012 :month-start 3 :day-start 29 :hour-start 16 :minute-start 40)) nil))) ;; Inactive. - (should (equal (org-test-parse-and-interpret "[2012-03-29 thu. 16:40]") - "[2012-03-29 thu. 16:40]\n")) + (should + (string-match "\\[2012-03-29 .* 16:40\\]" + (org-test-parse-and-interpret "[2012-03-29 thu. 16:40]"))) (should (string-match "\\[2012-03-29 .* 16:40\\]" @@ -2414,9 +2417,10 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) (:type inactive :year-start 2012 :month-start 3 :day-start 29 :hour-start 16 :minute-start 40)) nil))) ;; Active range. - (should (equal (org-test-parse-and-interpret - "<2012-03-29 thu. 16:40>--<2012-03-29 thu. 16:41>") - "<2012-03-29 thu. 16:40>--<2012-03-29 thu. 16:41>\n")) + (should + (string-match "<2012-03-29 .* 16:40>--<2012-03-29 .* 16:41>" + (org-test-parse-and-interpret + "<2012-03-29 thu. 16:40>--<2012-03-29 thu. 16:41>"))) (should (string-match "<2012-03-29 .* 16:40>--<2012-03-29 .* 16:41>" @@ -2426,9 +2430,10 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) :hour-start 16 :minute-start 40 :year-end 2012 :month-end 3 :day-end 29 :hour-end 16 :minute-end 41)) nil))) ;; Inactive range. - (should (equal (org-test-parse-and-interpret - "[2012-03-29 thu. 16:40]--[2012-03-29 thu. 16:41]") - "[2012-03-29 thu. 16:40]--[2012-03-29 thu. 16:41]\n")) + (should + (string-match "\\[2012-03-29 .* 16:40\\]--\\[2012-03-29 .* 16:41\\]" + (org-test-parse-and-interpret + "[2012-03-29 thu. 16:40]--[2012-03-29 thu. 16:41]"))) (should (string-match "\\[2012-03-29 .* 16:40\\]--\\[2012-03-29 .* 16:41\\]" @@ -2441,8 +2446,9 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) (should (equal (org-test-parse-and-interpret "<%%diary-float t 4 2>") "<%%diary-float t 4 2>\n")) ;; Timestamp with repeater interval, with delay, with both. - (should (equal (org-test-parse-and-interpret "<2012-03-29 thu. +1y>") - "<2012-03-29 thu. +1y>\n")) + (should + (string-match "<2012-03-29 .* \\+1y>" + (org-test-parse-and-interpret "<2012-03-29 thu. +1y>"))) (should (string-match "<2012-03-29 .* \\+1y>" @@ -2469,9 +2475,10 @@ DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01> CLOSED: [2012-01-01]\n")))) :repeater-type cumulate :repeater-value 1 :repeater-unit year)) nil))) ;; Timestamp range with repeater interval - (should (equal (org-test-parse-and-interpret - "<2012-03-29 Thu +1y>--<2012-03-30 Thu +1y>") - "<2012-03-29 Thu +1y>--<2012-03-30 Thu +1y>\n")) + (should + (string-match "<2012-03-29 .* \\+1y>--<2012-03-30 .* \\+1y>" + (org-test-parse-and-interpret + "<2012-03-29 Thu +1y>--<2012-03-30 Thu +1y>"))) (should (string-match "<2012-03-29 .* \\+1y>--<2012-03-30 .* \\+1y>" diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index b375f9c..c9b2eed 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -400,11 +400,11 @@ Paragraph" nil nil nil '(:with-archived-trees t)))))) ;; Clocks. (should - (equal "CLOCK: [2012-04-29 sun. 10:45]\n" - (let ((org-clock-string "CLOCK:")) - (org-test-with-temp-text "CLOCK: [2012-04-29 sun. 10:45]" - (org-export-as (org-test-default-backend) - nil nil nil '(:with-clocks t)))))) + (string-match "CLOCK: \\[2012-04-29 .* 10:45\\]" + (let ((org-clock-string "CLOCK:")) + (org-test-with-temp-text "CLOCK: [2012-04-29 sun. 10:45]" + (org-export-as (org-test-default-backend) + nil nil nil '(:with-clocks t)))))) (should (equal "" (let ((org-clock-string "CLOCK:")) @@ -464,11 +464,12 @@ Paragraph" nil nil nil '(:with-inlinetasks nil))))))) ;; Plannings. (should - (equal "CLOSED: [2012-04-29 sun. 10:45]\n" - (let ((org-closed-string "CLOSED:")) - (org-test-with-temp-text "CLOSED: [2012-04-29 sun. 10:45]" - (org-export-as (org-test-default-backend) - nil nil nil '(:with-planning t)))))) + (string-match + "CLOSED: \\[2012-04-29 .* 10:45\\]" + (let ((org-closed-string "CLOSED:")) + (org-test-with-temp-text "CLOSED: [2012-04-29 sun. 10:45]" + (org-export-as (org-test-default-backend) + nil nil nil '(:with-planning t)))))) (should (equal "" (let ((org-closed-string "CLOSED:")) @@ -505,8 +506,8 @@ Paragraph" "Test `org-export-with-timestamps' specifications." ;; t value. (should - (equal - "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>\n" + (string-match + "\\[2012-04-29 .*? 10:45\\]<2012-04-29 .*? 10:45>" (org-test-with-temp-text "[2012-04-29 sun. 10:45]<2012-04-29 sun. 10:45>" (org-export-as (org-test-default-backend) nil nil nil '(:with-timestamps t))))) @@ -519,24 +520,24 @@ Paragraph" nil nil nil '(:with-timestamps nil))))) ;; `active' value. (should - (equal - "<2012-03-29 Thu>\n\nParagraph <2012-03-29 Thu>[2012-03-29 Thu]" + (string-match + "<2012-03-29 .*?>\n\nParagraph <2012-03-29 .*?>\\[2012-03-29 .*?\\]" (org-test-with-temp-text "<2012-03-29 Thu>[2012-03-29 Thu] Paragraph <2012-03-29 Thu>[2012-03-29 Thu]" - (org-trim (org-export-as (org-test-default-backend) - nil nil nil '(:with-timestamps active)))))) + (org-export-as (org-test-default-backend) + nil nil nil '(:with-timestamps active))))) ;; `inactive' value. (should - (equal - "[2012-03-29 Thu]\n\nParagraph <2012-03-29 Thu>[2012-03-29 Thu]" + (string-match + "\\[2012-03-29 .*?\\]\n\nParagraph <2012-03-29 .*?>\\[2012-03-29 .*?\\]" (org-test-with-temp-text "<2012-03-29 Thu>[2012-03-29 Thu] Paragraph <2012-03-29 Thu>[2012-03-29 Thu]" - (org-trim (org-export-as (org-test-default-backend) - nil nil nil '(:with-timestamps inactive))))))) + (org-export-as (org-test-default-backend) + nil nil nil '(:with-timestamps inactive)))))) (ert-deftest test-org-export/comment-tree () "Test if export process ignores commented trees." |