diff options
| author | Juri Linkov | 2020-02-10 02:49:36 +0200 |
|---|---|---|
| committer | Juri Linkov | 2020-02-10 02:49:36 +0200 |
| commit | ac9acc1864b02b92de4eb2e98db7b5b0cd03e019 (patch) | |
| tree | 16c26e1bb91bf14ec8ed6e292a0ba961e5414ba2 /lisp/window.el | |
| parent | 5e7bead8eac9a79dfd74452a7bd5199f12ad0c45 (diff) | |
| download | emacs-ac9acc1864b02b92de4eb2e98db7b5b0cd03e019.tar.gz emacs-ac9acc1864b02b92de4eb2e98db7b5b0cd03e019.zip | |
Use quit-restore-window to close tab (bug#39446)
* lisp/tab-bar.el (display-buffer-in-new-tab): New function with code
from display-buffer-in-tab.
(display-buffer-in-tab): Call display-buffer-in-new-tab.
(switch-to-buffer-other-tab): Instead of 'display-buffer-same-window'
use '(reusable-frames . t)'.
* lisp/windmove.el (windmove-display-in-direction): Set arg 'type'
to 'tab' for window--display-buffer when creating a new tab.
* lisp/window.el (quit-restore-window): Call tab-bar-close-tab
when quit-restore type is 'tab'.
(display-buffer-record-window): Set window-parameter 'quit-restore'
to 'tab' for type 'tab'.
(window--display-buffer): Set window-prev-buffers to nil for tab too.
Diffstat (limited to 'lisp/window.el')
| -rw-r--r-- | lisp/window.el | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lisp/window.el b/lisp/window.el index 40c4bf5ad47..bd825c09e16 100644 --- a/lisp/window.el +++ b/lisp/window.el | |||
| @@ -5009,6 +5009,13 @@ nil means to not handle the buffer in a particular way. This | |||
| 5009 | quad entry) | 5009 | quad entry) |
| 5010 | (cond | 5010 | (cond |
| 5011 | ((and (not prev-buffer) | 5011 | ((and (not prev-buffer) |
| 5012 | (eq (nth 1 quit-restore) 'tab) | ||
| 5013 | (eq (nth 3 quit-restore) buffer)) | ||
| 5014 | (tab-bar-close-tab) | ||
| 5015 | ;; If the previously selected window is still alive, select it. | ||
| 5016 | (when (window-live-p (nth 2 quit-restore)) | ||
| 5017 | (select-window (nth 2 quit-restore)))) | ||
| 5018 | ((and (not prev-buffer) | ||
| 5012 | (or (eq (nth 1 quit-restore) 'frame) | 5019 | (or (eq (nth 1 quit-restore) 'frame) |
| 5013 | (and (eq (nth 1 quit-restore) 'window) | 5020 | (and (eq (nth 1 quit-restore) 'window) |
| 5014 | ;; If the window has been created on an existing | 5021 | ;; If the window has been created on an existing |
| @@ -6367,7 +6374,12 @@ fourth element is BUFFER." | |||
| 6367 | ;; WINDOW has been created on a new frame. | 6374 | ;; WINDOW has been created on a new frame. |
| 6368 | (set-window-parameter | 6375 | (set-window-parameter |
| 6369 | window 'quit-restore | 6376 | window 'quit-restore |
| 6370 | (list 'frame 'frame (selected-window) buffer))))) | 6377 | (list 'frame 'frame (selected-window) buffer))) |
| 6378 | ((eq type 'tab) | ||
| 6379 | ;; WINDOW has been created on a new tab. | ||
| 6380 | (set-window-parameter | ||
| 6381 | window 'quit-restore | ||
| 6382 | (list 'tab 'tab (selected-window) buffer))))) | ||
| 6371 | 6383 | ||
| 6372 | (defcustom display-buffer-function nil | 6384 | (defcustom display-buffer-function nil |
| 6373 | "If non-nil, function to call to handle `display-buffer'. | 6385 | "If non-nil, function to call to handle `display-buffer'. |
| @@ -7034,7 +7046,7 @@ Return WINDOW if BUFFER and WINDOW are live." | |||
| 7034 | ;; use that. | 7046 | ;; use that. |
| 7035 | (display-buffer-mark-dedicated | 7047 | (display-buffer-mark-dedicated |
| 7036 | (set-window-dedicated-p window display-buffer-mark-dedicated)))) | 7048 | (set-window-dedicated-p window display-buffer-mark-dedicated)))) |
| 7037 | (when (memq type '(window frame)) | 7049 | (when (memq type '(window frame tab)) |
| 7038 | (set-window-prev-buffers window nil)) | 7050 | (set-window-prev-buffers window nil)) |
| 7039 | (let ((quit-restore (window-parameter window 'quit-restore)) | 7051 | (let ((quit-restore (window-parameter window 'quit-restore)) |
| 7040 | (height (cdr (assq 'window-height alist))) | 7052 | (height (cdr (assq 'window-height alist))) |