]> git.eshelyaron.com Git - emacs.git/commitdiff
Implement tab-close-other bound to C-x 6 1 by analogy with C-x 5 1.
authorJuri Linkov <juri@linkov.net>
Sun, 6 Oct 2019 21:53:34 +0000 (00:53 +0300)
committerJuri Linkov <juri@linkov.net>
Sun, 6 Oct 2019 21:53:34 +0000 (00:53 +0300)
* lisp/tab-bar.el (tab-close-other): New command bound to C-x 6 1.

* doc/emacs/frames.texi (Tab Bars): Document it.

doc/emacs/frames.texi
lisp/tab-bar.el

index 869b77d86bdf877096ce97ff56701f91a35ec877..169eebab3e66595596d9a0b65e255cc0b34c2366 100644 (file)
@@ -1307,6 +1307,11 @@ Switch to another tab.  If you repeat this command, it cycles through
 all the tabs on the selected frame.  With a positive numeric argument
 N, it switches to the next Nth tab; with a negative argument −N, it
 switches back to the previous Nth tab.
+
+@item C-x 6 1
+@kindex C-x 6 1
+@findex tab-close-other
+Close all tabs on the selected frame, except the selected one.
 @end table
 
 @node Dialog Boxes
index 27ae274eaa4e0f8bf68d9a0981034e081be4f64a..1c1acaafa47d84df9bd1ac683a132c47b5e05208 100644 (file)
@@ -560,6 +560,17 @@ TO-INDEX counts from 1."
                                               (tab-bar-tabs)))))
   (tab-bar-close-tab (1+ (tab-bar--tab-index-by-name name))))
 
+(defun tab-close-other ()
+  "Close all tabs on the selected frame, except the selected one."
+  (interactive)
+  (let* ((tabs (tab-bar-tabs))
+         (current-index (tab-bar--current-tab-index tabs)))
+    (when current-index
+      (set-frame-parameter nil 'tabs (list (nth current-index tabs)))
+      (if tab-bar-mode
+          (force-mode-line-update)
+        (message "Deleted all other tabs")))))
+
 \f
 ;;; Short aliases
 
@@ -819,6 +830,7 @@ Like \\[find-file-other-frame] (which see), but creates a new tab."
       (switch-to-buffer-other-tab value))))
 
 (define-key ctl-x-6-map "2" 'tab-new)
+(define-key ctl-x-6-map "1" 'tab-close-other)
 (define-key ctl-x-6-map "0" 'tab-close)
 (define-key ctl-x-6-map "o" 'tab-next)
 (define-key ctl-x-6-map "b" 'switch-to-buffer-other-tab)