浏览代码

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.
 buffer.
 
 
 You can activate this minor mode by default by setting the option
 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
 *** Property drawers allowed before first headline
 
 

+ 4 - 0
lisp/org-faces.el

@@ -364,6 +364,10 @@ changes."
   "Face used for tables."
   "Face used for tables."
   :group 'org-faces)
   :group 'org-faces)
 
 
+(defface org-table-header '((t :inherit org-table :background "LightGray"))
+  "Face for table header."
+  :group 'org-faces)
+
 (defface org-formula
 (defface org-formula
   '((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
   '((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
     (((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
     (((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))))))
 	    (goto-char (1- (overlay-end ov))))))
       (format "|%s" (mapconcat #'identity (reverse str) "")))))
       (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'.
   "Set the header of table at point as the `header-line-format'.
 Assume `org-table-temp-header-line' already stores the previously
 Assume `org-table-temp-header-line' already stores the previously
 existing value of `header-line-format' we might want to restore."
 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)
   (face-remap-remove-relative org-table-temp-header-remapping)
   (setq org-table-temp-header-remapping
   (setq org-table-temp-header-remapping
 	(face-remap-add-relative 'header-line '(:inherit default)))
 	(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
 ;;;###autoload
+(defvar-local org-table-header-line-mode nil)
 (define-minor-mode org-table-header-line-mode
 (define-minor-mode org-table-header-line-mode
   "Display the first row of the table at point in the header line."
   "Display the first row of the table at point in the header line."
   nil " TblHeader" nil
   nil " TblHeader" nil
-  :global nil
-  :group 'org-table
   (unless (eq major-mode 'org-mode)
   (unless (eq major-mode 'org-mode)
     (user-error "Cannot turn org table electric mode outside org-mode buffers"))
     (user-error "Cannot turn org table electric mode outside org-mode buffers"))
   (if org-table-header-line-mode
   (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)
     (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
 ;;; Regexps Constants