]> git.eshelyaron.com Git - emacs.git/commitdiff
Update to Org 9.6-31-g954a95
authorKyle Meyer <kyle@kyleam.com>
Sat, 10 Dec 2022 21:59:46 +0000 (16:59 -0500)
committerKyle Meyer <kyle@kyleam.com>
Sat, 10 Dec 2022 21:59:46 +0000 (16:59 -0500)
14 files changed:
doc/misc/org.org
lisp/org/ob-comint.el
lisp/org/ob-core.el
lisp/org/ol.el
lisp/org/org-clock.el
lisp/org/org-element.el
lisp/org/org-fold-core.el
lisp/org/org-footnote.el
lisp/org/org-persist.el
lisp/org/org-table.el
lisp/org/org-version.el
lisp/org/org.el
lisp/org/ox-md.el
lisp/org/ox.el

index 43d85099cff05387c2f5f79f1d18355eaa30d307..0b926e3ceed8c7cd9424d773b48a9062526619d7 100644 (file)
@@ -1401,7 +1401,7 @@ you, configure the option ~org-table-auto-blank-field~.
 - {{{kbd(M-x org-table-blank-field)}}} ::
 
   #+findex: org-table-blank-field
-  Blank the field at point.
+  Blank the current table field or active region.
 
 - {{{kbd(S-TAB)}}} (~org-table-previous-field~) ::
 
index e8d83670767baef998f4d2c48677c2ddfa4db767..064ba94464f0de6f61327b2783182635f8e3b87c 100644 (file)
@@ -117,6 +117,14 @@ or user `keyboard-quit' during execution of body."
         (goto-char (process-mark (get-buffer-process (current-buffer))))
         (insert dangling-text)
 
+         ;; Replace partially supplied input lines.
+         ;; This is needed when output filter spits partial lines that
+         ;; do not include a full prompt at a time.
+         (setq string-buffer
+               (replace-regexp-in-string
+                comint-prompt-regexp
+                ,org-babel-comint-prompt-separator
+                string-buffer))
         ;; remove echo'd FULL-BODY from input
         (when (and ,remove-echo ,full-body
                    (string-match
index 5b78ee946ff0b05b55d01b573ab76d366e7b3a57..f69538f78c9aa0f9854c9211c67f0d0a56661207 100644 (file)
@@ -2709,7 +2709,9 @@ specified as an an \"attachment:\" style link."
                 ((and 'attachment (guard in-attach-dir)) "attachment")
                 (_ "file"))
               (if (and request-attachment in-attach-dir)
-                  (file-relative-name result-file-name)
+                  (file-relative-name
+                   result-file-name
+                   (file-name-as-directory attach-dir))
                (if (and default-directory
                         base-file-name same-directory?)
                    (if (eq org-link-file-path-type 'adaptive)
index cd52e9cf4df5fd8ed2ad6b3962815b463f518c27..3ae8f8875540f6d189640e991bae07fa00f745ef 100644 (file)
@@ -1488,9 +1488,9 @@ If the link is in hidden text, expose it."
 
 (defun org-link-descriptive-ensure ()
   "Toggle the literal or descriptive display of links in current buffer if needed."
-  (if org-link-descriptive
-      (org-fold-core-set-folding-spec-property (car org-link--link-folding-spec) :visible nil)
-    (org-fold-core-set-folding-spec-property (car org-link--link-folding-spec) :visible t)))
+  (org-fold-core-set-folding-spec-property
+   (car org-link--link-folding-spec)
+   :visible (not org-link-descriptive)))
 
 ;;;###autoload
 (defun org-toggle-link-display ()
index f28805d5e6b913690350c23f4c38da51adc1eaa0..02cddddb304de7da102f066235f53d21e5c67d34 100644 (file)
@@ -3049,53 +3049,58 @@ PROPERTIES: The list properties specified in the `:properties' parameter
   "If this is a CLOCK line, update it and return t.
 Otherwise, return nil."
   (interactive)
-  (save-excursion
-    (beginning-of-line 1)
-    (skip-chars-forward " \t")
-    (when (looking-at org-clock-string)
-      (let ((re (concat "[ \t]*" org-clock-string
-                       " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
-                       "\\([ \t]*=>.*\\)?\\)?"))
-           ts te h m s neg)
-       (cond
-        ((not (looking-at re))
-         nil)
-        ((not (match-end 2))
-         (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
-                    (> org-clock-marker (point))
-                     (<= org-clock-marker (line-end-position)))
-           ;; The clock is running here
-           (setq org-clock-start-time
-                 (org-time-string-to-time (match-string 1)))
-           (org-clock-update-mode-line)))
-        (t
-          ;; Prevent recursive call from `org-timestamp-change'.
-          (cl-letf (((symbol-function 'org-clock-update-time-maybe) #'ignore))
-            ;; Update timestamps.
-            (save-excursion
-              (goto-char (match-beginning 1)) ; opening timestamp
-              (save-match-data (org-timestamp-change 0 'day)))
+  (let ((origin (point))) ;; `save-excursion' may not work when deleting.
+    (save-excursion
+      (beginning-of-line 1)
+      (skip-chars-forward " \t")
+      (when (looking-at org-clock-string)
+        (let ((re (concat "[ \t]*" org-clock-string
+                         " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
+                         "\\([ \t]*=>.*\\)?\\)?"))
+             ts te h m s neg)
+          (cond
+          ((not (looking-at re))
+           nil)
+          ((not (match-end 2))
+           (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
+                      (> org-clock-marker (point))
+                       (<= org-clock-marker (line-end-position)))
+             ;; The clock is running here
+             (setq org-clock-start-time
+                   (org-time-string-to-time (match-string 1)))
+             (org-clock-update-mode-line)))
+          (t
+            ;; Prevent recursive call from `org-timestamp-change'.
+            (cl-letf (((symbol-function 'org-clock-update-time-maybe) #'ignore))
+              ;; Update timestamps.
+              (save-excursion
+                (goto-char (match-beginning 1)) ; opening timestamp
+                (save-match-data (org-timestamp-change 0 'day)))
+              ;; Refresh match data.
+              (looking-at re)
+              (save-excursion
+                (goto-char (match-beginning 3)) ; closing timestamp
+                (save-match-data (org-timestamp-change 0 'day))))
             ;; Refresh match data.
             (looking-at re)
-            (save-excursion
-              (goto-char (match-beginning 3)) ; closing timestamp
-              (save-match-data (org-timestamp-change 0 'day))))
-          ;; Refresh match data.
-          (looking-at re)
-          (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
-          (end-of-line 1)
-          (setq ts (match-string 1)
-                te (match-string 3))
-          (setq s (- (org-time-string-to-seconds te)
-                    (org-time-string-to-seconds ts))
-                neg (< s 0)
-                s (abs s)
-                h (floor (/ s 3600))
-                s (- s (* 3600 h))
-                m (floor (/ s 60))
-                s (- s (* 60 s)))
-         (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
-         t))))))
+            (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
+            (end-of-line 1)
+            (setq ts (match-string 1)
+                  te (match-string 3))
+            (setq s (- (org-time-string-to-seconds te)
+                      (org-time-string-to-seconds ts))
+                  neg (< s 0)
+                  s (abs s)
+                  h (floor (/ s 3600))
+                  s (- s (* 3600 h))
+                  m (floor (/ s 60))
+                  s (- s (* 60 s)))
+           (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
+           t)))))
+    ;; Move back to initial position, but never beyond updated
+    ;; clock.
+    (unless (< (point) origin)
+      (goto-char origin))))
 
 (defun org-clock-save ()
   "Persist various clock-related data to disk.
index 48ede9c5289c8449109ec47799fa6ea549376766..1f36775a7b5a540d4562b7adeb5a77e1de49ba1e 100644 (file)
@@ -5717,7 +5717,11 @@ This function assumes `org-element--headline-cache' is a valid AVL tree."
               ;; `combine-change-calls' because the buffer is potentially
               ;; changed without notice (the change will be registered
               ;; after exiting the `combine-change-calls' body though).
-              (memq #'org-element--cache-after-change after-change-functions))))))
+              (catch :inhibited
+                (org-fold-core-cycle-over-indirect-buffers
+                  (unless (memq #'org-element--cache-after-change after-change-functions)
+                    (throw :inhibited nil)))
+                t))))))
 
 ;; FIXME: Remove after we establish that hashing is effective.
 (defun org-element-cache-hash-show-statistics ()
index be600f8a0ccf00e8df40f99032248f3f118efc9a..ffa689d4fa1c906ec2cfe40e82c74dfd64234779 100644 (file)
@@ -497,7 +497,7 @@ hanging around."
   (declare (debug (form body)) (indent 0))
   `(let (buffers dead-properties)
      (if (and (not (buffer-base-buffer))
-              (not (eq (current-buffer) (car org-fold-core--indirect-buffers))))
+              (not (memq (current-buffer) org-fold-core--indirect-buffers)))
          ;; We are in base buffer with `org-fold-core--indirect-buffers' value from
          ;; different buffer.  This can happen, for example, when
          ;; org-capture copies local variables into *Capture* buffer.
@@ -930,6 +930,8 @@ are provided.
 
 If FROM is non-nil and TO is nil, search the folded regions at FROM.
 
+When both FROM and TO are nil, search folded regions in the whole buffer.
+
 When SPECS is non-nil it should be a list of folding specs or a symbol.
 Only return the matching fold types.
 
@@ -946,6 +948,9 @@ WITH-MARKERS must be nil when RELATIVE is non-nil."
   (unless (listp specs) (setq specs (list specs)))
   (let (regions region mk-region)
     (org-with-wide-buffer
+     (when (and (not from) (not to))
+       (setq from (point-min)
+             to (point-max)))
      (when (and from (not to)) (setq to (point-max)))
      (when (and from (< from (point-min))) (setq from (point-min)))
      (when (and to (> to (point-max))) (setq to (point-max)))
@@ -1058,7 +1063,7 @@ means that the buffer should stay alive during the operation,
 because otherwise all these markers will point to nowhere."
   (declare (debug (form body)) (indent 1))
   (org-with-gensyms (regions)
-    `(let* ((,regions ,(org-fold-core-get-regions :with-markers use-markers)))
+    `(let* ((,regions (org-fold-core-get-regions :with-markers ,use-markers)))
        (unwind-protect (progn ,@body)
          (org-fold-core-regions ,regions :override t :clean-markers t)))))
 
index aedd413351c001993af6fbfc67955ba12cf5401d..ac78360aeff4d5e34d4b8ee8627ea0a55b36f7fd 100644 (file)
@@ -851,9 +851,12 @@ to `org-footnote-section'.  Inline definitions are ignored."
                            (format "[fn:%s] DEFINITION NOT FOUND." label))
                        "\n"))))
          ;; Insert un-referenced footnote definitions at the end.
-         (pcase-dolist (`(,label . ,definition) definitions)
-           (unless (member label inserted)
-             (insert "\n" definition "\n")))))))))
+          ;; Combine all insertions into one to create a single cache
+          ;; update call.
+          (combine-change-calls (point) (point)
+           (pcase-dolist (`(,label . ,definition) definitions)
+             (unless (member label inserted)
+               (insert "\n" definition "\n"))))))))))
 
 (defun org-footnote-normalize ()
   "Turn every footnote in buffer into a numbered one."
index 108292f1e921ed73f915a2eb756df6d4890dfcd9..1a32ed0102068739662e98406ec316a66d295e60 100644 (file)
 (declare-function org-at-heading-p "org" (&optional invisible-not-ok))
 
 
-(defconst org-persist--storage-version "2.5"
+(defconst org-persist--storage-version "2.7"
   "Persistent storage layout version.")
 
 (defgroup org-persist nil
@@ -856,9 +856,16 @@ When IGNORE-RETURN is non-nil, just return t on success without calling
       (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 (seq-find (lambda (v)
-                          (run-hook-with-args-until-success 'org-persist-before-write-hook v associated))
-                        (plist-get collection :container))
+      (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)))
index 8e0e8e6cf86c55bed8f35b39b5af5455fa4deab2..fa9a0319be2f761cf5e63fd72d4eb9a542197ecd 100644 (file)
@@ -41,6 +41,7 @@
 (require 'org-macs)
 (require 'org-compat)
 (require 'org-keys)
+(require 'org-fold-core)
 
 (declare-function calc-eval "calc" (str &optional separator &rest args))
 (declare-function face-remap-remove-relative "face-remap" (cookie))
@@ -4448,6 +4449,13 @@ FIELD is a string.  WIDTH is a number.  ALIGN is either \"c\",
 (defun org-table-justify-field-maybe (&optional new)
   "Justify the current field, text to left, number to right.
 Optional argument NEW may specify text to replace the current field content."
+  ;; FIXME: Prevent newlines inside field.  They are currently not
+  ;; supported.
+  (when (and (stringp new) (string-match-p "\n" new))
+    (message "Removing newlines from formula result: %S" new)
+    (setq new (replace-regexp-in-string
+               "\n" " "
+               (replace-regexp-in-string "\\(^\n+\\)\\|\\(\n+$\\)" "" new))))
   (cond
    ((and (not new) org-table-may-need-update)) ; Realignment will happen anyway
    ((org-at-table-hline-p))
@@ -5721,31 +5729,32 @@ This may be either a string or a function of two arguments:
     ;; Initialize communication channel in INFO.
     (with-temp-buffer
       (let ((org-inhibit-startup t)) (org-mode))
-      (let ((standard-output (current-buffer))
-           (org-element-use-cache nil))
-       (dolist (e table)
-         (cond ((eq e 'hline) (princ "|--\n"))
-               ((consp e)
-                (princ "| ") (dolist (c e) (princ c) (princ " |"))
-                (princ "\n")))))
-      (org-element-cache-reset)
-      ;; Add back-end specific filters, but not user-defined ones.  In
-      ;; particular, make sure to call parse-tree filters on the
-      ;; table.
-      (setq info
-           (let ((org-export-filters-alist nil))
-             (org-export-install-filters
-              (org-combine-plists
-               (org-export-get-environment backend nil params)
-               `(:back-end ,(org-export-get-backend backend))))))
-      (setq data
-           (org-export-filter-apply-functions
-            (plist-get info :filter-parse-tree)
-            (org-element-map (org-element-parse-buffer) 'table
-              #'identity nil t)
-            info)))
-    (when (and backend (symbolp backend) (not (org-export-get-backend backend)))
-      (user-error "Unknown :backend value"))
+      (org-fold-core-ignore-modifications
+        (let ((standard-output (current-buffer))
+             (org-element-use-cache nil))
+         (dolist (e table)
+           (cond ((eq e 'hline) (princ "|--\n"))
+                 ((consp e)
+                  (princ "| ") (dolist (c e) (princ c) (princ " |"))
+                  (princ "\n")))))
+        (org-element-cache-reset)
+        ;; Add back-end specific filters, but not user-defined ones.  In
+        ;; particular, make sure to call parse-tree filters on the
+        ;; table.
+        (setq info
+             (let ((org-export-filters-alist nil))
+               (org-export-install-filters
+                (org-combine-plists
+                 (org-export-get-environment backend nil params)
+                 `(:back-end ,(org-export-get-backend backend))))))
+        (setq data
+             (org-export-filter-apply-functions
+              (plist-get info :filter-parse-tree)
+              (org-element-map (org-element-parse-buffer) 'table
+                #'identity nil t)
+              info))
+        (when (and backend (symbolp backend) (not (org-export-get-backend backend)))
+          (user-error "Unknown :backend value"))))
     (when (or (not backend) (plist-get info :raw)) (require 'ox-org))
     ;; Handle :skip parameter.
     (let ((skip (plist-get info :skip)))
index e9339690409ca2b8884fa4745cc368349c7fdf7a..b9f8d5d66e73e87cea5307e3cf958d212e697f21 100644 (file)
@@ -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-3-ga4d38e"))
+   (let ((org-git-version "release_9.6-31-g954a95"))
      org-git-version))
 \f
 (provide 'org-version)
index ab6212daccd05101ae052e04555ba226b4b40b42..19f94c5e2324ed081b5a2dad70ae93581c374e7b 100644 (file)
@@ -11380,7 +11380,7 @@ See also `org-scan-tags'."
                             (pv (match-string 7 term))
                             (regexp (eq (string-to-char pv) ?{))
                             (strp (eq (string-to-char pv) ?\"))
-                            (timep (string-match-p "^\"[[<][0-9]+.*[]>]\"$" pv))
+                            (timep (string-match-p "^\"[[<]\\(?:[0-9]+\\|now\\|today\\|tomorrow\\|[+-][0-9]+[dmwy]\\).*[]>]\"$" pv))
                             (po (org-op-to-function (match-string 6 term)
                                                     (if timep 'time strp))))
                        (setq pv (if (or regexp strp) (substring pv 1 -1) pv))
@@ -16322,6 +16322,10 @@ buffer boundaries with possible narrowing."
                                          (org-element-property :end link))
                                         (skip-chars-backward " \t")
                                         (point)))))
+                              ;; FIXME: See bug#59902.  We cannot rely
+                              ;; on Emacs to update image if the file
+                              ;; has changed.
+                              (image-flush image)
                              (overlay-put ov 'display image)
                              (overlay-put ov 'face 'default)
                              (overlay-put ov 'org-image-overlay t)
index 01e0aa0491bd70e6f024f22a01e861eb20b9ad5c..dcd95e987116fdbc07d65dadf59b5e39e7afef75 100644 (file)
@@ -87,7 +87,8 @@ included into another document or application that reserves top-level
 headings for its own use."
   :group 'org-export-md
   :package-version '(Org . "9.6")
-  :type 'natnum)
+  ;; Avoid `natnum' because that's not available until Emacs 28.1.
+  :type 'integer)
 
 
 \f
index f6629cde4dc4c790b6c2a9b37861a354949222ab..aed669ee87d43509c2c57f41871ef196064e5025 100644 (file)
@@ -3036,6 +3036,11 @@ Return code as a string."
               (org-narrow-to-subtree)
               (goto-char (point-min))
               (org-end-of-meta-data)
+               ;; Make the region include top heading in the subtree.
+               ;; This way, we will be able to retrieve its export
+               ;; options when calling
+               ;; `org-export--get-subtree-options'.
+               (backward-char)
               (narrow-to-region (point) (point-max))))
         ;; Initialize communication channel with original buffer
         ;; attributes, unavailable in its copy.