emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 807682de1e: Allow dragging dividers in vtable


From: Lars Ingebrigtsen
Subject: master 807682de1e: Allow dragging dividers in vtable
Date: Thu, 14 Apr 2022 13:49:04 -0400 (EDT)

branch: master
commit 807682de1e427ec5a9b43e8fb6a4c9befa73fed3
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Allow dragging dividers in vtable
    
    * lisp/emacs-lisp/vtable.el (vtable--insert-header-line): Allow
    dragging dividers.
    (vtable--drag-resize-column): Adjust function.
---
 lisp/emacs-lisp/vtable.el | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index 5900d886e8..9201fea365 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -574,16 +574,22 @@ This also updates the displayed table."
 (defun vtable--insert-header-line (table widths spacer)
   ;; Insert the header directly into the buffer.
   (let ((start (point))
-        (divider (vtable-divider table)))
+        (divider (vtable-divider table))
+        (cmap (define-keymap
+                "<header-line> <drag-mouse-1>" #'vtable--drag-resize-column
+                "<header-line> <down-mouse-1>" #'ignore))
+        (dmap (define-keymap
+                "<header-line> <drag-mouse-1>"
+                (lambda (e)
+                  (interactive "e")
+                  (vtable--drag-resize-column e t))
+                "<header-line> <down-mouse-1>" #'ignore)))
     (seq-do-indexed
      (lambda (column index)
        (let* ((name (propertize
                      (vtable-column-name column)
                      'face (list 'header-line (vtable-face table))
-                     'keymap (define-keymap
-                               "<header-line> <drag-mouse-1>"
-                               #'vtable--drag-resize-column
-                               "<header-line> <down-mouse-1>" #'ignore)))
+                     'keymap cmap))
               (start (point))
               (indicator (vtable--indicator table index))
               (indicator-width (string-pixel-width indicator))
@@ -604,14 +610,15 @@ This also updates the displayed table."
                                         (string-pixel-width displayed))
                                      (if last 0 spacer))))))
          (when (and divider (not last))
-           (insert divider))
+           (insert (propertize divider 'keymap dmap)))
          (put-text-property start (point) 'vtable-column index)))
      (vtable-columns table))
     (insert "\n")
     (add-face-text-property start (point) 'header-line)))
 
-(defun vtable--drag-resize-column (e)
-  "Resize the column by dragging."
+(defun vtable--drag-resize-column (e &optional next)
+  "Resize the column by dragging.
+If NEXT, do the next column."
   (interactive "e")
   (let* ((pos-start (event-start e))
         (obj (posn-object pos-start)))
@@ -623,9 +630,11 @@ This also updates the displayed table."
                                (car obj)))
             (start-x (car (posn-x-y pos-start)))
             (end-x (car (posn-x-y (event-end e)))))
-        (when (> column 0)
+        (when (or (> column 0) next)
           (vtable--alter-column-width (vtable-current-table)
-                                      (1- column)
+                                      (if next
+                                          column
+                                        (1- column))
                                       (- end-x start-x)))))))
 
 (defun vtable--recompute-numerical (table line)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]