=(diary-date 12 1 2005)= or =(diary-date 1 12 2005)= or =(diary-date
2005 12 1)=, depending on the settings. This has been the source of
much confusion. Org mode users can resort to special versions of
-these functions, namely ~org-date~, ~org-anniversary~, ~org-cyclic, and
+these functions, namely ~org-date~, ~org-anniversary~, ~org-cyclic~, and
~org-block~. These work just like the corresponding ~diary-~
functions, but with stable ISO order of arguments (year, month, day)
wherever applicable, independent of the value of
# Here, we list the *most important* changes and changes that _likely_
# require user action for most Org mode users.
# Sorted from most important to least important.
+*** Arbitrary shell commands may no longer run when turning on Org mode
+
+This is for security reasons, to avoid running malicious commands.
*** =python-mode.el (MELPA)= support in =ob-python.el= is removed
% Reference Card for Org Mode
-\def\orgversionnumber{9.7.4}
+\def\orgversionnumber{9.7.5}
\def\versionyear{2024} % latest update
\input emacsver.tex
by `org-babel-comint-async-filter'."
(org-babel-comint-async-register
session (current-buffer)
- "^\\(?:[>.+] \\)*\\[1\\] \"ob_comint_async_R_\\(.+?\\)_\\(.+\\)\"$"
+ "^\\(?:[>.+] \\)*\\[1\\] \"ob_comint_async_R_\\(start\\|end\\|file\\)_\\(.+\\)\"$"
'org-babel-chomp
'ob-session-async-R-value-callback)
(cl-case result-type
(goto-char body-start)
(insert body))))
-(defun org-babel-merge-params (&rest plists)
- "Combine all parameter association lists in PLISTS.
-Later elements of PLISTS override the values of previous elements.
+(defun org-babel-merge-params (&rest alists)
+ "Combine all parameter association lists in ALISTS.
+Later elements of ALISTS override the values of previous elements.
This takes into account some special considerations for certain
parameters when merging lists."
(let* ((results-exclusive-groups
;; Some keywords accept multiple values. We need to treat
;; them specially.
vars results exports)
- (dolist (plist plists)
- (dolist (pair plist)
+ (dolist (alist alists)
+ (dolist (pair alist)
(pcase pair
(`(:var . ,value)
(let ((name (cond
by `org-babel-comint-async-filter'."
(org-babel-comint-async-register
session (current-buffer)
- "ob_comint_async_python_\\(.+\\)_\\(.+\\)"
+ "ob_comint_async_python_\\(start\\|end\\|file\\)_\\(.+\\)"
'org-babel-chomp 'org-babel-python-async-value-callback)
(pcase result-type
(`output
name))
(funcall (if (fboundp 'defvar-1) #'defvar-1 #'set) ;Emacs-29
(intern (concat "org-babel-default-header-args:" name))
- nil)
+ org-babel-default-header-args:shell)
(funcall (if (fboundp 'defvar-1) #'defvar-1 #'set) ;Emacs-29
(intern (concat "org-babel-header-args:" name))
- nil)))
+ org-babel-header-args:shell)))
(defcustom org-babel-shell-names
'("sh" "bash" "zsh" "fish" "csh" "ash" "dash" "ksh" "mksh" "posh")
(org-babel-comint-async-register
session
(current-buffer)
- "ob_comint_async_shell_\\(.+\\)_\\(.+\\)"
+ "ob_comint_async_shell_\\(start\\|end\\|file\\)_\\(.+\\)"
'ob-shell-async-chunk-callback
nil)
(org-babel-comint-async-delete-dangling-and-eval
;; Insert affiliated keywords before the table.
(when content-lines
(while (string-match-p "\\`[ \t]*#\\+" (car content-lines))
- (insert (pop content-lines) "\n")))
+ (insert (string-trim-left (pop content-lines)) "\n")))
(save-excursion
;; Insert table at point.
(insert
(let ((case-fold-search t))
(dolist (line content-lines)
(when (string-match-p "\\`[ \t]*#\\+TBLFM:" line)
- (insert "\n" line)
+ (insert "\n" (string-trim-left line))
(unless recalc (setq recalc t))))))
(when recalc (org-table-recalculate 'all t))
(org-table-align)
"Dynamically computed value.
The value can be obtained by calling FUNCTION with containing syntax
-node as first argument and ARGS list as remainting arguments.
+node as first argument and ARGS list as remaining arguments.
If the function throws `:org-element-deferred-retry' signal, assume
that the syntax node has been modified by side effect and retry
;; to current setup.
(defconst org-element-archive-tag "ARCHIVE"
- "Tag marking a substree as archived.")
+ "Tag marking a subtree as archived.")
(defconst org-element-citation-key-re
(rx "@" (group (one-or-more (any word "-.:?!`'/*@+|(){}<>&_^$#%~"))))
(rx line-start (0+ (any ?\s ?\t))
":" (1+ (any ?- ?_ word)) ":"
(0+ (any ?\s ?\t)) line-end)
- "Regexp matching opening or closing line of a drawer.
-Drawer's name is located in match group 1.")
+ "Regexp matching opening or closing line of a drawer.")
(defconst org-element-dynamic-block-open-re
(rx line-start (0+ (any ?\s ?\t))
;;
;; In general, the checks below should be as efficient as
;; possible, especially early in the `cond' form. (The
- ;; early checks will contribute to al subsequent parsers as
+ ;; early checks will contribute to all subsequent parsers as
;; well).
(cond
;; Item.
(defmacro org-element--cache-log-message (format-string &rest args)
"Add a new log message for org-element-cache.
-FORMAT-STRING and ARGS are the same arguments as in `foramt'."
+FORMAT-STRING and ARGS are the same arguments as in `format'."
`(when (or org-element--cache-diagnostics
(eq org-element--cache-self-verify 'backtrace))
(let* ((format-string (concat (format "org-element-cache diagnostics(%s): "
;; children starting at the same pos.
(not (org-element-type-p hashed '(section org-data table))))
hashed
- ;; No appriate HASHED. Search the cache.
+ ;; No appropriate HASHED. Search the cache.
(while node
(let* ((element (avl-tree--node-data node))
(begin (org-element-begin element)))
limit-count))
(cache-walk-abort))
;; Make sure that we have a cached
- ;; element at the new STAR.
+ ;; element at the new START.
(when start (element-match-at-point)))
;; Check if the buffer or cache has been modified.
(unless (org-with-base-buffer nil
(fboundp 'file-attribute-inode-number))
(file-attribute-inode-number
(file-attributes file))))
- (setq hash (secure-hash 'md5 associated))
+ (setq hash
+ ;; `secure-hash' may trigger interactive dialog when it
+ ;; cannot determine the coding system automatically.
+ ;; Force coding system that works reliably for any text
+ ;; to avoid it. The has will be consistent anyway, as
+ ;; long as we use the same coding system.
+ (let ((coding-system-for-write 'emacs-internal))
+ (secure-hash 'md5 associated)))
(puthash associated
(list (buffer-modified-tick associated)
file inode hash)
#'completing-read))
(extra (if org-refile-use-outline-path "/" ""))
(cbnex (concat (buffer-name) extra))
- (filename (and cfn (expand-file-name cfn)))
+ (filename (and cfn (file-truename cfn)))
(tbl (mapcar
(lambda (x)
(if (and (not (member org-refile-use-outline-path
'(file full-file-path title)))
- (not (equal filename (nth 1 x))))
+ (not (equal filename (file-truename (nth 1 x)))))
(cons (concat (car x) extra " ("
(file-name-nondirectory (nth 1 x)) ")")
(cdr x))
(defun org-release ()
"The release version of Org.
Inserted by installing Org mode or when a release is made."
- (let ((org-release "9.7.4"))
+ (let ((org-release "9.7.5"))
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.7.4-7-g165319"))
+ (let ((org-git-version "release_9.7.5-9-ga091ca"))
org-git-version))
\f
(provide 'org-version)
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "26.1"))
-;; Version: 9.7.4
+;; Version: 9.7.5
;; This file is part of GNU Emacs.
;;
;; Fake Org mode: `org-element-at-point'
;; doesn't need full set-up.
(let ((major-mode 'org-mode))
+ (setq-local tab-width 8)
(setq alist
(org--collect-keywords-1
keywords unique directory