瀏覽代碼

org-table.el: Enhancements to table header mode

* lisp/org-faces.el (org-table-header): New face.

* lisp/org-table.el (org-table-header-set-header): Rename from
`org-table-header-set-line'.  Use the new face.
Bastien 5 年之前
父節點
當前提交
c452dc38dc
共有 3 個文件被更改,包括 42 次插入37 次删除
  1. 2 1
      etc/ORG-NEWS
  2. 4 0
      lisp/org-faces.el
  3. 36 36
      lisp/org-table.el

+ 2 - 1
etc/ORG-NEWS

@@ -41,7 +41,8 @@ window header line when this first row is not visible anymore in the
 buffer.
 
 You can activate this minor mode by default by setting the option
-~org-table-header-line-p~ to =t=.
+~org-table-header-line-p~ to =t=.  You can also change the face for
+the header line by customizing the ~org-table-header~ face.
 
 *** Property drawers allowed before first headline
 

+ 4 - 0
lisp/org-faces.el

@@ -364,6 +364,10 @@ changes."
   "Face used for tables."
   :group 'org-faces)
 
+(defface org-table-header '((t :inherit org-table :background "LightGray"))
+  "Face for table header."
+  :group 'org-faces)
+
 (defface org-formula
   '((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
     (((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))

+ 36 - 36
lisp/org-table.el

@@ -469,7 +469,7 @@ This is useful when columns have been shrunk."
 	    (goto-char (1- (overlay-end ov))))))
       (format "|%s" (mapconcat #'identity (reverse str) "")))))
 
-(defun org-table-header-set-line ()
+(defun org-table-header-set-header ()
   "Set the header of table at point as the `header-line-format'.
 Assume `org-table-temp-header-line' already stores the previously
 existing value of `header-line-format' we might want to restore."
@@ -477,50 +477,50 @@ existing value of `header-line-format' we might want to restore."
   (face-remap-remove-relative org-table-temp-header-remapping)
   (setq org-table-temp-header-remapping
 	(face-remap-add-relative 'header-line '(:inherit default)))
-  (if (org-at-table-p)
-      (run-with-timer
-       0.01 nil
-       (lambda ()
-	 (let* ((beg (org-table-begin))
-		;; Are we using `display-line-numbers-mode'?
-		(lin (and (boundp 'display-line-numbers-mode)
-			  display-line-numbers-mode
-			  (line-number-display-width)))
-		;; Are we using `org-indent-mode'?
-		(pre (and (boundp 'org-indent-mode) org-indent-mode
-			  (length (get-text-property (point) 'line-prefix))))
-		(tbeg (save-excursion
-			(goto-char beg)
-			(while (or (org-at-table-hline-p)
-				   (looking-at-p ".*|\\s-+<[rcl]?\\([0-9]+\\)?>"))
-			  (move-beginning-of-line 2))
-			(point))))
-	   (if (< tbeg (save-excursion (move-to-window-line 0) (point)))
-	       (setq header-line-format
-		     (concat (propertize " " 'display
-					 '(space :width (+ left-fringe left-margin-width)))
-			     (when lin (propertize (make-string (+ lin 2) 32)
-						   'face 'line-number))
-			     (when pre (make-string pre 32))
-			     (propertize (org-table-row-get-visible-string tbeg)
-					 'face 'org-table)))
-	     (setq header-line-format org-table-temp-header-line)))))
-    (setq header-line-format org-table-temp-header-line)))
+  (if (not (org-at-table-p))
+      (setq header-line-format org-table-temp-header-line)
+    (run-with-timer
+     0.01 nil
+     (lambda ()
+       (let* ((beg (org-table-begin))
+	      ;; Are we using `display-line-numbers-mode'?
+	      (lin (and (boundp 'display-line-numbers-mode)
+			display-line-numbers-mode
+			(line-number-display-width)))
+	      ;; Are we using `org-indent-mode'?
+	      (pre (and (boundp 'org-indent-mode) org-indent-mode
+			(length (get-text-property (point) 'line-prefix))))
+	      (tbeg (save-excursion
+		      (goto-char beg)
+		      (while (or (org-at-table-hline-p)
+				 (looking-at-p ".*|\\s-+<[rcl]?\\([0-9]+\\)?>"))
+			(move-beginning-of-line 2))
+		      (point))))
+	 (if (< tbeg (save-excursion (move-to-window-line 0) (point)))
+	     (setq header-line-format
+		   (concat (propertize " " 'display
+				       '(space :width (+ left-fringe left-margin-width)))
+			   (when lin (propertize (make-string (+ lin 2) 32)
+						 'face 'line-number))
+			   (when pre (make-string pre 32))
+			   (propertize (org-table-row-get-visible-string tbeg)
+				       'face 'org-table-header)))
+	   (setq header-line-format org-table-temp-header-line)))
+       (force-window-update)))))
 
 ;;;###autoload
+(defvar-local org-table-header-line-mode nil)
 (define-minor-mode org-table-header-line-mode
   "Display the first row of the table at point in the header line."
   nil " TblHeader" nil
-  :global nil
-  :group 'org-table
   (unless (eq major-mode 'org-mode)
     (user-error "Cannot turn org table electric mode outside org-mode buffers"))
   (if org-table-header-line-mode
-      (progn (setq org-table-temp-header-line header-line-format)
-	     (add-hook 'post-command-hook 'org-table-header-set-line))
-    (remove-hook 'post-command-hook 'org-table-header-set-line)
+      (progn (setq-local org-table-temp-header-line header-line-format)
+	     (add-hook 'post-command-hook 'org-table-header-set-header))
+    (remove-hook 'post-command-hook 'org-table-header-set-header)
     (face-remap-remove-relative org-table-temp-header-remapping)
-    (setq header-line-format org-table-temp-header-line)))
+    (setq-local header-line-format org-table-temp-header-line)))
 
 
 ;;; Regexps Constants