#+begin_src emacs-lisp
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
- (let (org-log-done org-log-states) ; turn off logging
+ (let (org-log-done org-todo-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
"Remove all headlines in the current buffer.
BACKEND is the export back-end being used, as a symbol."
(org-map-entries
- (lambda () (delete-region (point) (line-beginning-position 2)))))
+ (lambda ()
+ (delete-region (point) (line-beginning-position 2))
+ ;; We need to tell `org-map-entries' to not skip over heading at
+ ;; point. Otherwise, it would continue from _next_ heading. See
+ ;; the docstring of `org-map-entries' for details.
+ (setq org-map-continue-from (point)))))
(add-hook 'org-export-before-parsing-hook #'my-headline-removal)
#+end_src
% Reference Card for Org Mode
-\def\orgversionnumber{9.6.6}
+\def\orgversionnumber{9.6.7}
\def\versionyear{2023} % latest update
\input emacsver.tex
(type
(pcase basetype
(`integerp '("int" "%d"))
- (`floatp '("double" "%f"))
+ (`floatp '("double" "%s")) ;; %f rounds, use %s to print the float literally
(`stringp
(list
(if (eq org-babel-c-variant 'd) "string" "const char*")
(cdr (assq :tangle params)))))
bare))))))
+(defvar org-outline-regexp) ; defined in lisp/org.el
(defun org-babel-tangle-single-block (block-counter &optional only-this-block)
"Collect the tangled source for current block.
Return the list of block attributes needed by
(buffer-substring
(max (condition-case nil
(save-excursion
- (org-back-to-heading t) ; Sets match data
- (match-end 0))
+ (org-back-to-heading t)
+ (re-search-forward org-outline-regexp))
(error (point-min)))
(save-excursion
(if (re-search-backward
;; it to real beginning then despite
;; START being larger.
(setq start nil)
- (move-start-to-next-match nil)
+ (let ((data nil)) ; data may not be valid. ignore it.
+ (move-start-to-next-match nil))
;; The new element may now start before
;; or at already processed position.
;; Make sure that we continue from an
"Face used for drawers."
:group 'org-faces)
-(defface org-property-value nil
+(defface org-property-value '((t :inherit default))
"Face used for the value of a property."
:group 'org-faces)
;; different buffer. This can happen, for example, when
;; org-capture copies local variables into *Capture* buffer.
(setq buffers (list (current-buffer)))
- (dolist (buf (cons (or (buffer-base-buffer) (current-buffer))
- (buffer-local-value 'org-fold-core--indirect-buffers (or (buffer-base-buffer) (current-buffer)))))
- (if (buffer-live-p buf)
- (push buf buffers)
- (dolist (spec (org-fold-core-folding-spec-list))
- (when (and (not (org-fold-core-get-folding-spec-property spec :global))
- (gethash (cons buf spec) org-fold-core--property-symbol-cache))
- ;; Make sure that dead-properties variable can be passed
- ;; as argument to `remove-text-properties'.
- (push t dead-properties)
- (push (gethash (cons buf spec) org-fold-core--property-symbol-cache)
- dead-properties))))))
+ (let ((all-buffers (buffer-local-value
+ 'org-fold-core--indirect-buffers
+ (or (buffer-base-buffer) (current-buffer)))))
+ (dolist (buf (cons (or (buffer-base-buffer) (current-buffer))
+ (buffer-local-value 'org-fold-core--indirect-buffers (or (buffer-base-buffer) (current-buffer)))))
+ (if (buffer-live-p buf)
+ (push buf buffers)
+ (dolist (spec (org-fold-core-folding-spec-list))
+ (when (and (not (org-fold-core-get-folding-spec-property spec :global))
+ (gethash (cons buf spec) org-fold-core--property-symbol-cache))
+ ;; Make sure that dead-properties variable can be passed
+ ;; as argument to `remove-text-properties'.
+ (push t dead-properties)
+ (push (gethash (cons buf spec) org-fold-core--property-symbol-cache)
+ dead-properties)))))
+ (when dead-properties
+ (with-current-buffer (or (buffer-base-buffer) (current-buffer))
+ (setq-local org-fold-core--indirect-buffers
+ (seq-filter #'buffer-live-p all-buffers))))))
(dolist (buf buffers)
(with-current-buffer buf
- (with-silent-modifications
- (save-restriction
- (widen)
- (remove-text-properties
- (point-min) (point-max)
- dead-properties)))
+ (when dead-properties
+ (with-silent-modifications
+ (save-restriction
+ (widen)
+ (remove-text-properties
+ (point-min) (point-max)
+ dead-properties))))
,@body))))
;; This is the core function used to fold text in buffers. We use
If the folded region is folded with a spec with non-nil :fragile
property, unfold the region if the :fragile function returns non-nil."
;; If no insertions or deletions in buffer, skip all the checks.
- (unless (or (eq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick))
- org-fold-core--ignore-modifications
+ (unless (or org-fold-core--ignore-modifications
+ (eq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick))
(memql 'ignore-modification-checks org-fold-core--optimise-for-huge-buffers))
;; Store the new buffer modification state.
(setq org-fold-core--last-buffer-chars-modified-tick (buffer-chars-modified-tick))
(save-match-data
;; Handle changes in all the indirect buffers and in the base
;; buffer. Work around Emacs bug#46982.
- (when (eq org-fold-core-style 'text-properties)
- (org-fold-core-cycle-over-indirect-buffers
- ;; Re-hide text inserted in the middle/front/back of a folded
- ;; region.
- (unless (equal from to) ; Ignore deletions.
+ ;; Re-hide text inserted in the middle/front/back of a folded
+ ;; region.
+ (unless (equal from to) ; Ignore deletions.
+ (when (eq org-fold-core-style 'text-properties)
+ (org-fold-core-cycle-over-indirect-buffers
(dolist (spec (org-fold-core-folding-spec-list))
;; Reveal fully invisible text inserted in the middle
;; of visible portion of the buffer. This is needed,
(setq re (concat "%-?[0-9.]*" (substring (car e) 1)))
(when (and (cdr e) (string-match re (cdr e)))
(let ((sref (substring (cdr e) (match-beginning 0) (match-end 0)))
- (safe "SREF"))
+ (safe (copy-sequence "SREF")))
(add-text-properties 0 3 (list 'sref sref) safe)
(setcdr e (replace-match safe t t (cdr e)))))
(while (string-match re string)
(interactive)
(org-back-to-heading)
(let ((minlevel 1000)
- (replace-text (concat (match-string 0) "* ")))
+ (replace-text (concat (make-string (org-current-level) ?*) "* ")))
(beginning-of-line 2)
(save-excursion
(while (not (or (eobp) (looking-at org-outline-regexp)))
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
- (let ((org-release "9.6.6"))
+ (let ((org-release "9.6.7"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.6.6"))
+ (let ((org-git-version "release_9.6.7-5-gd1d0c3"))
org-git-version))
\f
(provide 'org-version)
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "26.1"))
-;; Version: 9.6.6
+;; Version: 9.6.7
;; This file is part of GNU Emacs.
;;
If this is called at a normal headline, the level is the number
of stars. Use `org-reduced-level' to remove the effect of
-`org-odd-levels'. Unlike to `org-current-level', this function
+`org-odd-levels-only'. Unlike `org-current-level', this function
takes into consideration inlinetasks."
(org-with-wide-buffer
(end-of-line)
"Return the level of the current entry, or nil if before the first headline.
The level is the number of stars at the beginning of the
headline. Use `org-reduced-level' to remove the effect of
-`org-odd-levels'. Unlike to `org-outline-level', this function
+`org-odd-levels-only'. Unlike `org-outline-level', this function
ignores inlinetasks."
(let ((level (org-with-limited-levels (org-outline-level))))
(and (> level 0) level)))
(defun org-summary-todo (n-done n-not-done)
\"Switch entry to DONE when all subentries are done, to TODO otherwise.\"
- (let (org-log-done org-log-states) ; turn off logging
+ (let (org-log-done org-todo-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) \"DONE\" \"TODO\"))))")
(defvar org-todo-statistics-hook nil
2. Its description consists in a single link of the previous
type. In this case, that link must be a well-formed plain
- or angle link, i.e., it must have an explicit \"file\" type.
+ or angle link, i.e., it must have an explicit \"file\" or
+ \"attachment\" type.
Equip each image with the key-map `image-map'.
;; "file:" links. Also check link abbreviations since
;; some might expand to "file" links.
(file-types-re
- (format "\\[\\[\\(?:file%s:\\|attachment:\\|[./~]\\)\\|\\]\\[\\(<?file:\\)"
+ (format "\\[\\[\\(?:file%s:\\|attachment:\\|[./~]\\)\\|\\]\\[\\(<?\\(?:file\\|attachment\\):\\)"
(if (not link-abbrevs) ""
(concat "\\|" (regexp-opt link-abbrevs))))))
(while (re-search-forward file-types-re end t)
;; description.
(= (org-element-property :contents-end link)
(match-end 0))
- (match-string 2)))))))
+ (progn
+ (setq linktype (match-string 1))
+ (match-string 2))))))))
(when (and path (string-match-p file-extension-re path))
(let ((file (if (equal "attachment" linktype)
(progn
(if backward? (goto-char (point-min)) (outline-next-heading))
(org-back-to-heading invisible-ok)
(unless backward? (end-of-line)) ;do not match current headline
- (let ((level (- (match-end 0) (match-beginning 0) 1))
+ (let ((level (org-current-level))
(f (if backward? #'re-search-backward #'re-search-forward))
(count (if arg (abs arg) 1))
(result (point)))
parameters overriding Org default settings, but still inferior to
file-local settings.
-When optional argument PUB-DIR is set, use it as the publishing
-directory.
-
Return INFO file's name."
(interactive)
(let ((outfile (org-export-output-file-name ".texi" subtreep))