]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/tab-bar.el (tab-bar-swap-tabs, tab-bar-move-tab): New commands.
authorJuri Linkov <juri@linkov.net>
Sun, 20 Oct 2019 17:36:27 +0000 (20:36 +0300)
committerJuri Linkov <juri@linkov.net>
Sun, 20 Oct 2019 17:36:27 +0000 (20:36 +0300)
(tab-swap, tab-move): New aliases to new commands.

lisp/tab-bar.el

index 117b8ea9d01eeb80c11b238040ec50bff5471f33..1c182a9ba18983b76372024cdec4f453e742408c 100644 (file)
@@ -543,6 +543,26 @@ to the numeric argument.  ARG counts from 1."
 
 (defalias 'tab-bar-select-tab-by-name 'tab-bar-switch-to-tab)
 
+\f
+(defun tab-bar-swap-tabs (to-index &optional from-index)
+  "Exchange positions of two tabs referred by FROM-INDEX and TO-INDEX.
+FROM-INDEX defaults to the current tab index.
+FROM-INDEX and TO-INDEX count from 1."
+  (interactive "P")
+  (let* ((tabs (funcall tab-bar-tabs-function))
+         (from-index (or from-index (1+ (tab-bar--current-tab-index tabs)))))
+    (rotatef (nth (1- from-index) tabs)
+             (nth (1- to-index) tabs))))
+
+(defun tab-bar-move-tab (&optional arg)
+  "Move the current tab ARG positions to the right.
+If a negative ARG, move the current tab ARG positions to the left."
+  (interactive "p")
+  (let* ((tabs (funcall tab-bar-tabs-function))
+         (from-index (or (tab-bar--current-tab-index tabs) 0))
+         (to-index (mod (+ from-index arg) (length tabs))))
+    (tab-bar-swap-tabs (1+ to-index) (1+ from-index))))
+
 \f
 (defcustom tab-bar-new-tab-to 'right
   "Defines where to create a new tab.
@@ -717,14 +737,16 @@ function `tab-bar-tab-name-function'."
 \f
 ;;; Short aliases
 
-(defalias 'tab-new      'tab-bar-new-tab)
-(defalias 'tab-close    'tab-bar-close-tab)
+(defalias 'tab-new         'tab-bar-new-tab)
+(defalias 'tab-close       'tab-bar-close-tab)
 (defalias 'tab-close-other 'tab-bar-close-other-tabs)
-(defalias 'tab-select   'tab-bar-select-tab)
-(defalias 'tab-next     'tab-bar-switch-to-next-tab)
-(defalias 'tab-previous 'tab-bar-switch-to-prev-tab)
-(defalias 'tab-rename   'tab-bar-rename-tab)
-(defalias 'tab-list     'tab-bar-list)
+(defalias 'tab-select      'tab-bar-select-tab)
+(defalias 'tab-next        'tab-bar-switch-to-next-tab)
+(defalias 'tab-previous    'tab-bar-switch-to-prev-tab)
+(defalias 'tab-swap        'tab-bar-swap-tabs)
+(defalias 'tab-move        'tab-bar-move-tab)
+(defalias 'tab-rename      'tab-bar-rename-tab)
+(defalias 'tab-list        'tab-bar-list)
 
 \f
 ;;; Non-graphical access to frame-local tabs (named window configurations)