Parcourir la source

table: Restore temporary-goal-column after displaying header

* lisp/org-table.el (org-table-header-set-header): Restore
temporary-goal-column to prevent disrupting the expected next-line and
previous-line movement.

org-table-header-set-header, which org-table-header-line-mode adds to
post-command-hook, changes the value of temporary-goal-column to zero,
interfering with the logic in line-move-1.

Reported-by: Oorja Sandhu <oorja.sandhu@inoutbox.com>
Ref: https://orgmode.org/list/1b8b1a96-149e-4409-9738-fc45fad3a604@www.fastmail.com
Kyle Meyer il y a 4 ans
Parent
commit
f12ca1a562
1 fichiers modifiés avec 23 ajouts et 19 suppressions
  1. 23 19
      lisp/org-table.el

+ 23 - 19
lisp/org-table.el

@@ -472,25 +472,29 @@ This may be useful when columns have been shrunk."
 (defvar-local org-table-header-overlay nil)
 (defun org-table-header-set-header ()
   "Display the header of the table at point."
-  (when (overlayp org-table-header-overlay)
-    (delete-overlay org-table-header-overlay))
-  (let* ((ws (window-start))
-	 (beg (save-excursion
-		(goto-char (org-table-begin))
-		(while (or (org-at-table-hline-p)
-			   (looking-at-p ".*|\\s-+<[rcl]?\\([0-9]+\\)?>"))
-		  (move-beginning-of-line 2))
-		(point)))
-	 (end (save-excursion (goto-char beg) (point-at-eol))))
-    (if (pos-visible-in-window-p beg)
-	(when (overlayp org-table-header-overlay)
-	  (delete-overlay org-table-header-overlay))
-      (setq org-table-header-overlay
-	    (make-overlay ws (+ ws (- end beg))))
-      (org-overlay-display
-       org-table-header-overlay
-       (org-table-row-get-visible-string beg)
-       'org-table-header))))
+  (let ((gcol temporary-goal-column))
+    (unwind-protect
+        (progn
+          (when (overlayp org-table-header-overlay)
+            (delete-overlay org-table-header-overlay))
+          (let* ((ws (window-start))
+                 (beg (save-excursion
+                        (goto-char (org-table-begin))
+                        (while (or (org-at-table-hline-p)
+                                   (looking-at-p ".*|\\s-+<[rcl]?\\([0-9]+\\)?>"))
+                          (move-beginning-of-line 2))
+                        (point)))
+                 (end (save-excursion (goto-char beg) (point-at-eol))))
+            (if (pos-visible-in-window-p beg)
+                (when (overlayp org-table-header-overlay)
+                  (delete-overlay org-table-header-overlay))
+              (setq org-table-header-overlay
+                    (make-overlay ws (+ ws (- end beg))))
+              (org-overlay-display
+               org-table-header-overlay
+               (org-table-row-get-visible-string beg)
+               'org-table-header))))
+      (setq temporary-goal-column gcol))))
 
 ;;;###autoload
 (define-minor-mode org-table-header-line-mode