[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 3e02029642: Update to Org 9.6-49-g47d129
From: |
Kyle Meyer |
Subject: |
emacs-29 3e02029642: Update to Org 9.6-49-g47d129 |
Date: |
Sat, 17 Dec 2022 17:36:02 -0500 (EST) |
branch: emacs-29
commit 3e02029642c2c4c329c95d1a1381ab4a83a606b5
Author: Kyle Meyer <kyle@kyleam.com>
Commit: Kyle Meyer <kyle@kyleam.com>
Update to Org 9.6-49-g47d129
---
doc/misc/org.org | 13 ++-
lisp/org/ob-R.el | 4 +-
lisp/org/ob-octave.el | 2 +-
lisp/org/org-element.el | 1 +
lisp/org/org-persist.el | 252 +++++++++++++++++++++++++-----------------------
lisp/org/org-version.el | 2 +-
lisp/org/org.el | 12 ++-
lisp/org/ox.el | 31 +++---
8 files changed, 173 insertions(+), 144 deletions(-)
diff --git a/doc/misc/org.org b/doc/misc/org.org
index 0b926e3cee..c6b8e73fd1 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -20021,11 +20021,16 @@ changes.
| =nofnadjust= | Do not renumber and sort automatically. |
#+vindex: org-hide-block-startup
- To hide blocks on startup, use these keywords. The
- corresponding variable is ~org-hide-block-startup~.
+ #+vindex: org-hide-drawer-startup
+ To hide blocks or drawers on startup, use these keywords. The
+ corresponding variables are ~org-hide-block-startup~ and
+ ~org-hide-drawer-startup~.
+
+ | =hideblocks= | Hide all begin/end blocks on startup. |
+ | =nohideblocks= | Do not hide blocks on startup. |
+ | =hidedrawers= | Hide all begin/end blocks on startup. |
+ | =nohidedrawers= | Do not hide blocks on startup. |
- | =hideblocks= | Hide all begin/end blocks on startup. |
- | =nohideblocks= | Do not hide blocks on startup. |
#+vindex: org-pretty-entities
The display of entities as UTF-8 characters is governed by the
diff --git a/lisp/org/ob-R.el b/lisp/org/ob-R.el
index f68b5b44e4..b7f96a179a 100644
--- a/lisp/org/ob-R.el
+++ b/lisp/org/ob-R.el
@@ -241,11 +241,11 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-R-assign-elisp (name value colnames-p rownames-p)
"Construct R code assigning the elisp VALUE to a variable named NAME."
(if (listp value)
- (let* ((lengths (mapcar 'length (cl-remove-if-not 'sequencep value)))
+ (let* ((lengths (mapcar 'length (cl-remove-if-not 'listp value)))
(max (if lengths (apply 'max lengths) 0))
(min (if lengths (apply 'min lengths) 0)))
;; Ensure VALUE has an orgtbl structure (depth of at least 2).
- (unless (listp (car value)) (setq value (list value)))
+ (unless (listp (car value)) (setq value (mapcar 'list value)))
(let ((file (orgtbl-to-tsv value '(:fmt org-babel-R-quote-tsv-field)))
(header (if (or (eq (nth 1 value) 'hline) colnames-p)
"TRUE" "FALSE"))
diff --git a/lisp/org/ob-octave.el b/lisp/org/ob-octave.el
index b0a7767ec3..8953b67513 100644
--- a/lisp/org/ob-octave.el
+++ b/lisp/org/ob-octave.el
@@ -91,7 +91,7 @@ end")
(list
"set (0, \"defaultfigurevisible\", \"off\");"
full-body
- (format "print -dpng %s" gfx-file))
+ (format "print -dpng %S\nans=%S" gfx-file
gfx-file))
"\n")
full-body)
result-type matlabp)))
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index 1f36775a7b..71c242ea65 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -5295,6 +5295,7 @@ indentation removed from its contents."
;; `org-element--cache-diagnostics-ring-size',
`org-element--cache-map-statistics',
;; `org-element--cache-map-statistics-threshold'.
+;;;###autoload
(defvar org-element-use-cache t
"Non-nil when Org parser should cache its results.")
diff --git a/lisp/org/org-persist.el b/lisp/org/org-persist.el
index 9645dea7d9..6ccf357784 100644
--- a/lisp/org/org-persist.el
+++ b/lisp/org/org-persist.el
@@ -222,8 +222,11 @@ function will be called with a single argument -
collection."
(defconst org-persist-index-file "index"
"File name used to store the data index.")
-(defvar org-persist-disable-when-emacs-Q t
- "Disable persistence when Emacs is called with -Q command line arg.")
+(defvar org-persist--disable-when-emacs-Q t
+ "Disable persistence when Emacs is called with -Q command line arg.
+When non-nil, this sets `org-persist-directory' to temporary directory.
+
+This variable must be set before loading org-persist library.")
(defvar org-persist-before-write-hook nil
"Abnormal hook ran before saving data.
@@ -662,12 +665,13 @@ COLLECTION is the plist holding data collection."
(file-copy (org-file-name-concat
org-persist-directory
(format "%s-%s.%s" persist-file (md5 path) ext))))
- (unless (file-exists-p (file-name-directory file-copy))
- (make-directory (file-name-directory file-copy) t))
- (if (org--should-fetch-remote-resource-p path)
- (url-copy-file path file-copy 'overwrite)
- (error "The remote resource %S is considered unsafe, and will not be
downloaded."
- path))
+ (unless (file-exists-p file-copy)
+ (unless (file-exists-p (file-name-directory file-copy))
+ (make-directory (file-name-directory file-copy) t))
+ (if (org--should-fetch-remote-resource-p path)
+ (url-copy-file path file-copy 'overwrite)
+ (error "The remote resource %S is considered unsafe, and will not
be downloaded."
+ path)))
(format "%s-%s.%s" persist-file (md5 path) ext)))))
(defun org-persist-write:index (container _)
@@ -771,43 +775,39 @@ ASSOCIATED can be a plist, a buffer, or a string.
A buffer is treated as (:buffer ASSOCIATED).
A string is treated as (:file ASSOCIATED).
When LOAD? is non-nil, load the data instead of reading."
+ (unless org-persist--index (org-persist--load-index))
(setq associated (org-persist--normalize-associated associated))
(setq container (org-persist--normalize-container container))
- (unless (and org-persist-disable-when-emacs-Q
- ;; FIXME: This is relying on undocumented fact that
- ;; Emacs sets `user-init-file' to nil when loaded with
- ;; "-Q" argument.
- (not user-init-file))
- (let* ((collection (org-persist--find-index `(:container ,container
:associated ,associated)))
- (persist-file
- (when collection
- (org-file-name-concat
- org-persist-directory
- (plist-get collection :persist-file))))
- (data nil))
- (when (and collection
- (file-exists-p persist-file)
- (or (not (plist-get collection :expiry)) ; current session
- (not (org-persist--gc-expired-p
- (plist-get collection :expiry) collection)))
- (or (not hash-must-match)
- (and (plist-get associated :hash)
- (equal (plist-get associated :hash)
- (plist-get (plist-get collection :associated)
:hash)))))
- (unless (seq-find (lambda (v)
- (run-hook-with-args-until-success
'org-persist-before-read-hook v associated))
- (plist-get collection :container))
- (setq data (or (gethash persist-file org-persist--write-cache)
- (org-persist--read-elisp-file persist-file)))
- (when data
- (cl-loop for container in (plist-get collection :container)
- with result = nil
- do
- (if load?
- (push (org-persist-load:generic container (alist-get
container data nil nil #'equal) collection) result)
- (push (org-persist-read:generic container (alist-get
container data nil nil #'equal) collection) result))
- (run-hook-with-args 'org-persist-after-read-hook
container associated)
- finally return (if (= 1 (length result)) (car result)
result))))))))
+ (let* ((collection (org-persist--find-index `(:container ,container
:associated ,associated)))
+ (persist-file
+ (when collection
+ (org-file-name-concat
+ org-persist-directory
+ (plist-get collection :persist-file))))
+ (data nil))
+ (when (and collection
+ (file-exists-p persist-file)
+ (or (not (plist-get collection :expiry)) ; current session
+ (not (org-persist--gc-expired-p
+ (plist-get collection :expiry) collection)))
+ (or (not hash-must-match)
+ (and (plist-get associated :hash)
+ (equal (plist-get associated :hash)
+ (plist-get (plist-get collection :associated)
:hash)))))
+ (unless (seq-find (lambda (v)
+ (run-hook-with-args-until-success
'org-persist-before-read-hook v associated))
+ (plist-get collection :container))
+ (setq data (or (gethash persist-file org-persist--write-cache)
+ (org-persist--read-elisp-file persist-file)))
+ (when data
+ (cl-loop for container in (plist-get collection :container)
+ with result = nil
+ do
+ (if load?
+ (push (org-persist-load:generic container (alist-get
container data nil nil #'equal) collection) result)
+ (push (org-persist-read:generic container (alist-get
container data nil nil #'equal) collection) result))
+ (run-hook-with-args 'org-persist-after-read-hook container
associated)
+ finally return (if (= 1 (length result)) (car result)
result)))))))
(defun org-persist-load (container &optional associated hash-must-match)
"Load CONTAINER data for ASSOCIATED.
@@ -843,62 +843,66 @@ The return value is nil when writing fails and the
written value (as
returned by `org-persist-read') on success.
When IGNORE-RETURN is non-nil, just return t on success without calling
`org-persist-read'."
- (unless (and org-persist-disable-when-emacs-Q
- ;; FIXME: This is relying on undocumented fact that
- ;; Emacs sets `user-init-file' to nil when loaded with
- ;; "-Q" argument.
- (not user-init-file))
- (setq associated (org-persist--normalize-associated associated))
- ;; Update hash
- (when (and (plist-get associated :file)
- (plist-get associated :hash)
- (get-file-buffer (plist-get associated :file)))
- (setq associated (org-persist--normalize-associated (get-file-buffer
(plist-get associated :file)))))
- (let ((collection (org-persist--get-collection container associated)))
- (setf collection (plist-put collection :associated associated))
- (unless (or
- ;; Prevent data leakage from encrypted files.
- ;; We do it in somewhat paranoid manner and do not
- ;; allow anything related to encrypted files to be
- ;; written.
- (and (plist-get associated :file)
- (string-match-p epa-file-name-regexp (plist-get associated
:file)))
- (seq-find (lambda (v)
- (run-hook-with-args-until-success
'org-persist-before-write-hook v associated))
- (plist-get collection :container)))
- (when (or (file-exists-p org-persist-directory)
(org-persist--save-index))
- (let ((file (org-file-name-concat org-persist-directory (plist-get
collection :persist-file)))
- (data (mapcar (lambda (c) (cons c (org-persist-write:generic c
collection)))
- (plist-get collection :container))))
- (puthash file data org-persist--write-cache)
- (org-persist--write-elisp-file file data)
- (or ignore-return (org-persist-read container associated))))))))
+ (setq associated (org-persist--normalize-associated associated))
+ ;; Update hash
+ (when (and (plist-get associated :file)
+ (plist-get associated :hash)
+ (get-file-buffer (plist-get associated :file)))
+ (setq associated (org-persist--normalize-associated (get-file-buffer
(plist-get associated :file)))))
+ (let ((collection (org-persist--get-collection container associated)))
+ (setf collection (plist-put collection :associated associated))
+ (unless (or
+ ;; Prevent data leakage from encrypted files.
+ ;; We do it in somewhat paranoid manner and do not
+ ;; allow anything related to encrypted files to be
+ ;; written.
+ (and (plist-get associated :file)
+ (string-match-p epa-file-name-regexp (plist-get associated
:file)))
+ (seq-find (lambda (v)
+ (run-hook-with-args-until-success
'org-persist-before-write-hook v associated))
+ (plist-get collection :container)))
+ (when (or (file-exists-p org-persist-directory)
(org-persist--save-index))
+ (let ((file (org-file-name-concat org-persist-directory (plist-get
collection :persist-file)))
+ (data (mapcar (lambda (c) (cons c (org-persist-write:generic c
collection)))
+ (plist-get collection :container))))
+ (puthash file data org-persist--write-cache)
+ (org-persist--write-elisp-file file data)
+ (or ignore-return (org-persist-read container associated)))))))
(defun org-persist-write-all (&optional associated)
"Save all the persistent data.
When ASSOCIATED is non-nil, only save the matching data."
(unless org-persist--index (org-persist--load-index))
(setq associated (org-persist--normalize-associated associated))
- (let (all-containers)
- (dolist (collection org-persist--index)
- (if associated
- (when collection
- (cl-pushnew (plist-get collection :container) all-containers :test
#'equal))
- (condition-case err
- (org-persist-write (plist-get collection :container) (plist-get
collection :associated) t)
- (error
- (message "%s. Deleting bad index entry." err)
- (org-persist--remove-from-index collection)
- nil))))
- (dolist (container all-containers)
- (let ((collection (org-persist--find-index `(:container ,container
:associated ,associated))))
- (when collection
+ (unless
+ (and (equal 1 (length org-persist--index))
+ ;; The single collection only contains a single container
+ ;; in the container list.
+ (equal 1 (length (plist-get (car org-persist--index) :container)))
+ ;; The container is an `index' container.
+ (eq 'index (caar (plist-get (car org-persist--index) :container)))
+ ;; No `org-persist-directory' exists yet.
+ (not (file-exists-p org-persist-directory)))
+ (let (all-containers)
+ (dolist (collection org-persist--index)
+ (if associated
+ (when collection
+ (cl-pushnew (plist-get collection :container) all-containers
:test #'equal))
(condition-case err
- (org-persist-write container associated t)
+ (org-persist-write (plist-get collection :container) (plist-get
collection :associated) t)
(error
(message "%s. Deleting bad index entry." err)
(org-persist--remove-from-index collection)
- nil)))))))
+ nil))))
+ (dolist (container all-containers)
+ (let ((collection (org-persist--find-index `(:container ,container
:associated ,associated))))
+ (when collection
+ (condition-case err
+ (org-persist-write container associated t)
+ (error
+ (message "%s. Deleting bad index entry." err)
+ (org-persist--remove-from-index collection)
+ nil))))))))
(defun org-persist-write-all-buffer ()
"Call `org-persist-write-all' in current buffer.
@@ -931,45 +935,40 @@ Do nothing in an indirect buffer."
(defun org-persist-gc ()
"Remove expired or unregistered containers.
Also, remove containers associated with non-existing files."
- (unless (and org-persist-disable-when-emacs-Q
- ;; FIXME: This is relying on undocumented fact that
- ;; Emacs sets `user-init-file' to nil when loaded with
- ;; "-Q" argument.
- (not user-init-file))
- (let (new-index (remote-files-num 0))
- (dolist (collection org-persist--index)
- (let* ((file (plist-get (plist-get collection :associated) :file))
- (file-remote (when file (file-remote-p file)))
- (persist-file (when (plist-get collection :persist-file)
- (org-file-name-concat
- org-persist-directory
- (plist-get collection :persist-file))))
- (expired? (org-persist--gc-expired-p
- (plist-get collection :expiry) collection)))
- (when persist-file
- (when file
- (when file-remote (cl-incf remote-files-num))
- (unless (if (not file-remote)
- (file-exists-p file)
- (pcase org-persist-remote-files
- ('t t)
- ('check-existence
- (file-exists-p file))
- ((pred numberp)
- (<= org-persist-remote-files remote-files-num))
- (_ nil)))
- (setq expired? t)))
- (if expired?
- (org-persist--gc-persist-file persist-file)
- (push collection new-index)))))
- (setq org-persist--index (nreverse new-index)))))
+ (let (new-index (remote-files-num 0))
+ (dolist (collection org-persist--index)
+ (let* ((file (plist-get (plist-get collection :associated) :file))
+ (file-remote (when file (file-remote-p file)))
+ (persist-file (when (plist-get collection :persist-file)
+ (org-file-name-concat
+ org-persist-directory
+ (plist-get collection :persist-file))))
+ (expired? (org-persist--gc-expired-p
+ (plist-get collection :expiry) collection)))
+ (when persist-file
+ (when file
+ (when file-remote (cl-incf remote-files-num))
+ (unless (if (not file-remote)
+ (file-exists-p file)
+ (pcase org-persist-remote-files
+ ('t t)
+ ('check-existence
+ (file-exists-p file))
+ ((pred numberp)
+ (<= org-persist-remote-files remote-files-num))
+ (_ nil)))
+ (setq expired? t)))
+ (if expired?
+ (org-persist--gc-persist-file persist-file)
+ (push collection new-index)))))
+ (setq org-persist--index (nreverse new-index))))
;; Automatically write the data, but only when we have write access.
(let ((dir (directory-file-name
(file-name-as-directory org-persist-directory))))
(while (and (not (file-exists-p dir))
(not (equal dir (setq dir (directory-file-name
- (file-name-directory dir)))))))
+ (file-name-directory dir)))))))
(if (not (file-writable-p dir))
(message "Missing write access rights to org-persist-directory: %S"
org-persist-directory)
@@ -978,6 +977,15 @@ Also, remove containers associated with non-existing
files."
;; So we are adding the hook after `org-persist-write-all'.
(add-hook 'kill-emacs-hook #'org-persist-gc)))
+;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set.
+(if (and org-persist--disable-when-emacs-Q
+ ;; FIXME: This is relying on undocumented fact that
+ ;; Emacs sets `user-init-file' to nil when loaded with
+ ;; "-Q" argument.
+ (not user-init-file))
+ (setq org-persist-directory
+ (make-temp-file "org-persist-" 'dir)))
+
(add-hook 'after-init-hook #'org-persist-load-all)
(provide 'org-persist)
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index b9f8d5d66e..8de0d1a4a9 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(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-31-g954a95"))
+ (let ((org-git-version "release_9.6-49-g47d129"))
org-git-version))
(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index 19f94c5e23..6aa2a16219 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -102,6 +102,7 @@
(require 'org-cycle)
(defvaralias 'org-hide-block-startup 'org-cycle-hide-block-startup)
+(defvaralias 'org-hide-drawer-startup 'org-cycle-hide-drawer-startup)
(defvaralias 'org-pre-cycle-hook 'org-cycle-pre-hook)
(defvaralias 'org-tab-first-hook 'org-cycle-tab-first-hook)
(defalias 'org-global-cycle #'org-cycle-global)
@@ -4596,8 +4597,8 @@ is available. This option applies only if FILE is a URL."
This checks every pattern in `org-safe-remote-resources', and
returns non-nil if any of them match."
(let ((uri-patterns org-safe-remote-resources)
- (file-uri (and buffer-file-name
- (concat "file://" (file-truename buffer-file-name))))
+ (file-uri (and (buffer-file-name (buffer-base-buffer))
+ (concat "file://" (file-truename (buffer-file-name
(buffer-base-buffer))))))
match-p)
(while (and (not match-p) uri-patterns)
(setq match-p (or (string-match-p (car uri-patterns) uri)
@@ -4608,7 +4609,8 @@ returns non-nil if any of them match."
(defun org--confirm-resource-safe (uri)
"Ask the user if URI should be considered safe, returning non-nil if so."
(unless noninteractive
- (let ((current-file (and buffer-file-name (file-truename
buffer-file-name)))
+ (let ((current-file (and (buffer-file-name (buffer-base-buffer))
+ (file-truename (buffer-file-name
(buffer-base-buffer)))))
(domain (and (string-match
(rx (seq "http" (? "s") "://")
(optional (+ (not (any "@/\n"))) "@")
@@ -16399,6 +16401,10 @@ buffer boundaries with possible narrowing."
"Remove inline-display overlay if a corresponding region is modified."
(when (and ov after)
(delete ov org-inline-image-overlays)
+ ;; Clear image from cache to avoid image not updating upon
+ ;; changing on disk. See Emacs bug#59902.
+ (when (overlay-get ov 'org-image-overlay)
+ (image-flush (overlay-get ov 'display)))
(delete-overlay ov)))
(defun org-remove-inline-images (&optional beg end)
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index aed669ee87..737703f11d 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -4612,12 +4612,17 @@ If LINK refers to a remote resource, modify it to point
to a local
downloaded copy. Otherwise, return unchanged LINK."
(when (org-export-link-remote-p link)
(let* ((local-path (org-export-link--remote-local-copy link)))
- (setcdr link
- (thread-first (cadr link)
- (plist-put :type "file")
- (plist-put :path local-path)
- (plist-put :raw-link (concat "file:" local-path))
- list))))
+ (if local-path
+ (setcdr link
+ (thread-first (cadr link)
+ (plist-put :type "file")
+ (plist-put :path local-path)
+ (plist-put :raw-link (concat "file:"
local-path))
+ list))
+ (display-warning
+ '(org export)
+ (format "unable to obtain local copy of %s"
+ (org-element-property :raw-link link))))))
link)
;;;; For References
@@ -4753,23 +4758,27 @@ objects of the same type."
(let ((counter 0))
;; Increment counter until ELEMENT is found again.
(org-element-map (plist-get info :parse-tree)
- (or types (org-element-type element))
+ (or (and types (cons (org-element-type element) types))
+ (org-element-type element))
(lambda (el)
(let ((cached (org-element-property :org-export--counter el)))
(cond
((eq element el) (1+ counter))
;; Use cached result.
- ((and cached (equal predicate (car cached)))
- (cdr cached))
+ ((and cached
+ (equal predicate (car cached))
+ (equal types (cadr cached)))
+ (setq counter (nth 2 cached))
+ nil)
((not predicate)
(cl-incf counter)
(org-element-put-property
- el :org-export--counter (cons predicate counter))
+ el :org-export--counter (list predicate types counter))
nil)
((funcall predicate el info)
(cl-incf counter)
(org-element-put-property
- el :org-export--counter (cons predicate counter))
+ el :org-export--counter (list predicate types counter))
nil))))
info 'first-match)))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 3e02029642: Update to Org 9.6-49-g47d129,
Kyle Meyer <=