]> git.eshelyaron.com Git - emacs.git/commitdiff
Add commands to move to next/previous column in tabulated-list-mode
authorPeter Feigl <peter.feigl@nexoid.at>
Sun, 25 Jul 2021 07:16:08 +0000 (09:16 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 25 Jul 2021 07:16:08 +0000 (09:16 +0200)
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-mode-map): Add
keybindings M-left and M-right.
(tabulated-list-previous-column tabulated-list-next-column): Implement
commands (bug#44711).

etc/NEWS
lisp/emacs-lisp/tabulated-list.el

index f1502a8e0e85f8d3eed5563f3eb8f0d9e1f4b8da..f1635ae2e64b5e6c089dac4afcd6893f9d4aa961 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2331,6 +2331,9 @@ previously no easy way to get back to the original displayed order
 after sorting, but giving a -1 numerical prefix to the sorting command
 will now restore the original order.
 
+---
+*** 'M-left' and 'M-right' now move between columns in 'tabulated-list-mode'.
+
 +++
 *** New utility function 'insert-into-buffer'.
 This is like 'insert-buffer-substring', but works in the opposite
index 04f3b70aaa84b8b31388f651d79c3f0c7c5192d7..f0ee78745ac878df2243a50edc141024fb07edd2 100644 (file)
@@ -214,6 +214,8 @@ If ADVANCE is non-nil, move forward by one line afterwards."
                             special-mode-map))
     (define-key map "n" 'next-line)
     (define-key map "p" 'previous-line)
+    (define-key map (kbd "M-<left>") 'tabulated-list-previous-column)
+    (define-key map (kbd "M-<right>") 'tabulated-list-next-column)
     (define-key map "S" 'tabulated-list-sort)
     (define-key map "}" 'tabulated-list-widen-current-column)
     (define-key map "{" 'tabulated-list-narrow-current-column)
@@ -740,6 +742,28 @@ Interactively, N is the prefix numeric argument, and defaults to
           (setq-local tabulated-list--current-lnum-width lnum-width)
           (tabulated-list-init-header)))))
 
+(defun tabulated-list-next-column (&optional arg)
+  "Go to the start of the next column after point on the current line.
+If ARG is provided, move that many columns."
+  (interactive "p")
+  (dotimes (_ (or arg 1))
+    (let ((next (or (next-single-property-change
+                     (point) 'tabulated-list-column-name)
+                    (point-max))))
+      (when (<= next (line-end-position))
+        (goto-char next)))))
+
+(defun tabulated-list-previous-column (&optional arg)
+  "Go to the start of the column point is in on the current line.
+If ARG is provided, move that many columns."
+  (interactive "p")
+  (dotimes (_ (or arg 1))
+    (let ((prev (or (previous-single-property-change
+                     (point) 'tabulated-list-column-name)
+                    1)))
+      (unless (< prev (line-beginning-position))
+        (goto-char prev)))))
+
 ;;; The mode definition:
 
 (defvar tabulated-list--original-order nil)