Function: tab-bar-new-tab-to
tab-bar-new-tab-to is an interactive and byte-compiled function
defined in tab-bar.el.gz.
Signature
(tab-bar-new-tab-to &optional TAB-NUMBER)
Documentation
Add a new tab at the absolute position TAB-NUMBER.
TAB-NUMBER counts from 1. If no TAB-NUMBER is specified, then add
a new tab at the position specified by tab-bar-new-tab-to(var)/tab-bar-new-tab-to(fun).
Negative TAB-NUMBER counts tabs from the end of the tab bar,
and -1 means the new tab will become the last one.
Argument addressing is absolute in contrast to tab-bar-new-tab,
where argument addressing is relative.
After the tab is created, the hooks in
tab-bar-tab-post-open-functions are run.
Key Bindings
Aliases
Source Code
;; Defined in /usr/src/emacs/lisp/tab-bar.el.gz
(defun tab-bar-new-tab-to (&optional tab-number)
"Add a new tab at the absolute position TAB-NUMBER.
TAB-NUMBER counts from 1. If no TAB-NUMBER is specified, then add
a new tab at the position specified by `tab-bar-new-tab-to'.
Negative TAB-NUMBER counts tabs from the end of the tab bar,
and -1 means the new tab will become the last one.
Argument addressing is absolute in contrast to `tab-bar-new-tab',
where argument addressing is relative.
After the tab is created, the hooks in
`tab-bar-tab-post-open-functions' are run."
(interactive "P")
(let* ((tabs (funcall tab-bar-tabs-function))
(from-index (tab-bar--current-tab-index tabs))
(from-tab (tab-bar--tab)))
(when tab-bar-new-tab-choice
;; Handle the case when it's called in the active minibuffer.
(when (minibuffer-selected-window)
(select-window (minibuffer-selected-window)))
(let ((ignore-window-parameters t))
(delete-other-windows))
(unless (eq tab-bar-new-tab-choice 'window)
;; Create a new window to get rid of old window parameters
;; (e.g. prev/next buffers) of old window.
(split-window) (delete-window))
(let ((buffer
(if (functionp tab-bar-new-tab-choice)
(funcall tab-bar-new-tab-choice)
(if (stringp tab-bar-new-tab-choice)
(or (get-buffer tab-bar-new-tab-choice)
(find-file-noselect tab-bar-new-tab-choice))))))
(when (buffer-live-p buffer)
(switch-to-buffer buffer))))
(when from-index
(setf (nth from-index tabs) from-tab))
(let* ((to-tab (tab-bar--current-tab-make
(when (eq tab-bar-new-tab-group t)
`((group . ,(alist-get 'group from-tab))))))
(to-number (and tab-number (prefix-numeric-value tab-number)))
(to-index (or (if to-number
(if (< to-number 0)
(+ (length tabs) (1+ to-number))
(1- to-number)))
(pcase tab-bar-new-tab-to
('leftmost 0)
('rightmost (length tabs))
('left (or from-index 1))
('right (1+ (or from-index 0)))
((pred functionp)
(funcall tab-bar-new-tab-to))))))
(setq to-index (max 0 (min (or to-index 0) (length tabs))))
(cl-pushnew to-tab (nthcdr to-index tabs))
(when (eq to-index 0)
;; `pushnew' handles the head of tabs but not frame-parameter
(tab-bar-tabs-set tabs))
(run-hook-with-args 'tab-bar-tab-post-open-functions
(nth to-index tabs)))
(when tab-bar-show
(if (not tab-bar-mode)
;; Turn on `tab-bar-mode' since a tab was created.
;; Note: this also updates `tab-bar-lines'.
(tab-bar-mode 1)
(tab-bar--update-tab-bar-lines)))
(force-mode-line-update)
(unless tab-bar-mode
(message "Added new tab at %s" tab-bar-new-tab-to))))