From: Juri Linkov Date: Sun, 20 Oct 2019 17:36:27 +0000 (+0300) Subject: * lisp/tab-bar.el (tab-bar-swap-tabs, tab-bar-move-tab): New commands. X-Git-Tag: emacs-27.0.90~949 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=912966a5aaca489c4f130e38342c07a675c45085;p=emacs.git * lisp/tab-bar.el (tab-bar-swap-tabs, tab-bar-move-tab): New commands. (tab-swap, tab-move): New aliases to new commands. --- diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index 117b8ea9d01..1c182a9ba18 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -543,6 +543,26 @@ to the numeric argument. ARG counts from 1." (defalias 'tab-bar-select-tab-by-name 'tab-bar-switch-to-tab) + +(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)))) + (defcustom tab-bar-new-tab-to 'right "Defines where to create a new tab. @@ -717,14 +737,16 @@ function `tab-bar-tab-name-function'." ;;; 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) ;;; Non-graphical access to frame-local tabs (named window configurations)