]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow dragging dividers in vtable
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 14 Apr 2022 17:48:47 +0000 (19:48 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 14 Apr 2022 17:48:59 +0000 (19:48 +0200)
* lisp/emacs-lisp/vtable.el (vtable--insert-header-line): Allow
dragging dividers.
(vtable--drag-resize-column): Adjust function.

lisp/emacs-lisp/vtable.el

index 5900d886e80c740a62e785db808e5ffa37b6b875..9201fea3656c9b7c9a183a2936dac2bca9d8e5d1 100644 (file)
@@ -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)