1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-23 18:47:57 +00:00

* lisp/tab-bar.el (tab-bar-close-other-tabs): Fix regression.

* test/lisp/tab-bar-tests.el: New file.
(tab-bar-tests-close-other-tabs-with-arg): Test for regression
that closed the selected tab after selecting it.
This commit is contained in:
Juri Linkov 2021-12-02 20:12:05 +02:00
parent f38dfa56a0
commit 0a50ad11db
2 changed files with 54 additions and 4 deletions

View File

@ -1572,18 +1572,17 @@ happens interactively)."
(let* ((tabs (funcall tab-bar-tabs-function))
(current-index (tab-bar--current-tab-index tabs))
(keep-index (if (integerp tab-number)
(1- (max 0 (min tab-number (length tabs))))
(1- (max 1 (min tab-number (length tabs))))
current-index))
(keep-tab (nth keep-index tabs))
(index 0))
(when keep-tab
(when (nth keep-index tabs)
(unless (eq keep-index current-index)
(tab-bar-select-tab (1+ keep-index))
(setq tabs (funcall tab-bar-tabs-function)))
(dolist (tab tabs)
(unless (or (eq tab keep-tab)
(unless (or (eq index keep-index)
(run-hook-with-args-until-success
'tab-bar-tab-prevent-close-functions tab
;; `last-tab-p' logically can't ever be true

View File

@ -0,0 +1,51 @@
;;; tab-bar-tests.el --- Tests for tab-bar.el -*- lexical-binding: t; -*-
;; Copyright (C) 2021 Free Software Foundation, Inc.
;; Author: Juri Linkov <juri@linkov.net>
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
(require 'ert)
(defun tab-bar-tests-close-other-tabs (arg)
(tab-bar-tabs-set nil)
(tab-rename "1")
(tab-new) (tab-rename "2") ;; (tab-switch "2")
(tab-new) (tab-rename "3") ;; (tab-switch "3")
(should (eq (length (tab-bar-tabs)) 3))
(should (equal (alist-get 'name (tab-bar--current-tab-find)) "3"))
(tab-bar-close-other-tabs arg)
(should (equal (alist-get 'name (tab-bar--current-tab-find))
(if arg (number-to-string (max 1 (min arg 3))) "3")))
(should (eq (length (tab-bar-tabs)) 1))
(should (eq (length tab-bar-closed-tabs) 2))
(tab-undo)
(tab-undo)
(should (equal (tab-undo) "No more closed tabs to undo"))
(should (eq (length (tab-bar-tabs)) 3))
(should (eq (length tab-bar-closed-tabs) 0)))
(ert-deftest tab-bar-tests-close-other-tabs-default ()
(tab-bar-tests-close-other-tabs nil))
(ert-deftest tab-bar-tests-close-other-tabs-with-arg ()
(dotimes (i 5) (tab-bar-tests-close-other-tabs i)))
(provide 'tab-bar-tests)
;;; tab-bar-tests.el ends here