]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/windmove.el (windmove-display-new-tab): New command.
authorJuri Linkov <juri@linkov.net>
Wed, 4 Dec 2019 23:03:45 +0000 (01:03 +0200)
committerJuri Linkov <juri@linkov.net>
Wed, 4 Dec 2019 23:03:45 +0000 (01:03 +0200)
(windmove-display-default-keybindings): Bind it to '?t'.
(windmove-display-in-direction): Call tab-bar-new-tab when 'dir' is 'new-tab'.

etc/NEWS
lisp/windmove.el

index 3d17b8f979ce26e02a4db12850d585303e86df42..20b86173e93c57ca1aca74414d7fda59048487d1 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -820,7 +820,8 @@ displays the buffer from the next command in that window.  For example,
 'S-M-right C-h i' displays the "*Info*" buffer in the right window,
 creating the window if necessary.  A special key can be customized to
 display the buffer in the same window, for example, 'S-M-0 C-h e'
-displays the "*Messages*" buffer in the same window.
+displays the "*Messages*" buffer in the same window.  'S-M-t C-h C-n'
+displays NEWS in a new tab.
 
 *** Windmove also supports directional window deletion.
 The new command 'windmove-delete-default-keybindings' binds default
index 16a5ca81284245ad297eaf334a3de214bed2fff5..7d3ef0fb649bf1f58cd3c551746c5eeaf7745b7b 100644 (file)
@@ -467,12 +467,17 @@ When `switch-to-buffer-obey-display-actions' is non-nil,
          (minibuffer-depth (minibuffer-depth))
          (action (lambda (buffer alist)
                    (unless (> (minibuffer-depth) minibuffer-depth)
-                     (let ((window (if (eq dir 'same-window)
-                                       (selected-window)
-                                     (window-in-direction
-                                      dir nil nil
-                                      (and arg (prefix-numeric-value arg))
-                                      windmove-wrap-around)))
+                     (let ((window (cond
+                                    ((eq dir 'new-tab)
+                                     (let ((tab-bar-new-tab-choice t))
+                                       (tab-bar-new-tab))
+                                     (selected-window))
+                                    ((eq dir 'same-window)
+                                     (selected-window))
+                                    (t (window-in-direction
+                                        dir nil nil
+                                        (and arg (prefix-numeric-value arg))
+                                        windmove-wrap-around))))
                            (type 'reuse))
                        (unless window
                          (setq window (split-window nil nil dir) type 'window))
@@ -535,6 +540,12 @@ See the logic of the prefix ARG in `windmove-display-in-direction'."
   (interactive "P")
   (windmove-display-in-direction 'same-window arg))
 
+;;;###autoload
+(defun windmove-display-new-tab (&optional arg)
+  "Display the next buffer in a new tab."
+  (interactive "P")
+  (windmove-display-in-direction 'new-tab arg))
+
 ;;;###autoload
 (defun windmove-display-default-keybindings (&optional modifiers)
   "Set up keybindings for directional buffer display.
@@ -549,7 +560,8 @@ Default value of MODIFIERS is `shift-meta'."
   (global-set-key (vector (append modifiers '(right))) 'windmove-display-right)
   (global-set-key (vector (append modifiers '(up)))    'windmove-display-up)
   (global-set-key (vector (append modifiers '(down)))  'windmove-display-down)
-  (global-set-key (vector (append modifiers '(?0)))    'windmove-display-same-window))
+  (global-set-key (vector (append modifiers '(?0)))    'windmove-display-same-window)
+  (global-set-key (vector (append modifiers '(?t)))    'windmove-display-new-tab))
 
 \f
 ;;; Directional window deletion