Browse Source

Run `org-table-electric-header-mode' with a tiny timer

* lisp/org-table.el (org-table-electric-header-mode): Autoload and
run with timer.
Bastien 5 years ago
parent
commit
0aff90f499
1 changed files with 17 additions and 11 deletions
  1. 17 11
      lisp/org-table.el

+ 17 - 11
lisp/org-table.el

@@ -451,6 +451,7 @@ prevents it from hanging Emacs."
 ;;; Org table electric header minor mode
 (defvar org-table-temp-header-line nil)
 (defvar org-table-temp-header-remapping nil)
+(defvar org-table-electric-header-mode nil)
 (defun org-table-set-header-line-format ()
   "Set the header of table at point as the `header-line-format'.
 Assume `org-table-temp-header-line' already stores the previously
@@ -460,19 +461,24 @@ existing value of `header-line-format' we might want to restore."
   (setq org-table-temp-header-remapping
 	(face-remap-add-relative 'header-line '(:inherit default)))
   (if (org-at-table-p)
-      (let* ((beg (org-table-begin))
-	     (tbeg (if (save-excursion (goto-char beg) (org-at-table-hline-p))
-		       (save-excursion  (goto-char beg) (move-beginning-of-line 2) (point))
-		     beg)))
-	(if (< tbeg (save-excursion (move-to-window-line 0) (point)))
-	    (setq header-line-format
-		  (concat (propertize " " 'display '(space :width left-fringe))
-			  (buffer-substring
-			   tbeg (+ tbeg (- (point-at-eol) (point-at-bol))))))
-	  (setq header-line-format org-table-temp-header-line)))
+      (run-with-timer
+       0.001 nil
+       (lambda ()
+	 (let* ((beg (org-table-begin))
+		(tbeg (if (save-excursion
+			    (goto-char beg) (org-at-table-hline-p))
+			  (save-excursion
+			    (goto-char beg) (move-beginning-of-line 2) (point))
+			beg)))
+	   (if (< tbeg (save-excursion (move-to-window-line 0) (point)))
+	       (setq header-line-format
+		     (concat (propertize " " 'display '(space :width left-fringe))
+			     (buffer-substring
+			      tbeg (+ tbeg (- (point-at-eol) (point-at-bol))))))
+	     (setq header-line-format org-table-temp-header-line)))))
     (setq header-line-format org-table-temp-header-line)))
 
-(defvar org-table-electric-header-mode nil)
+;;;###autoload
 (define-minor-mode org-table-electric-header-mode
   "Display the first row of the table at point in the header line."
   :init-value org-table-electric-header-p