]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/windmove.el (windmove-create-window): New defcustom (bug#32790).
authorJuri Linkov <juri@linkov.net>
Thu, 8 Nov 2018 21:27:49 +0000 (23:27 +0200)
committerJuri Linkov <juri@linkov.net>
Thu, 8 Nov 2018 21:27:49 +0000 (23:27 +0200)
(windmove-do-window-select): Use it.

etc/NEWS
lisp/windmove.el

index 1020a2a0ea52000d81c6069a850a59dd16397b10..29bbde9395e69ed4e0683ff44f9ca0f4ea80b0f1 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -292,6 +292,11 @@ In the current follow group of windows, "ghost" cursors are no longer
 displayed in the non-selected follow windows.  To get the old behavior
 back, customize follow-hide-ghost-cursors to nil.
 
+** Windmove
+
+*** windmove-create-window when non-nil makes a new window on moving off
+the edge of the frame.
+
 ** Octave mode
 The mode is automatically enabled in files that start with the
 'function' keyword.
index 42e10b591f6afce584ebd5d0e860acf96d765947..598e495c7a9c51643c74909c52f93f8125a756b9 100644 (file)
@@ -149,6 +149,15 @@ is inactive."
   :type 'boolean
   :group 'windmove)
 
+(defcustom windmove-create-window nil
+  "Whether movement off the edge of the frame creates a new window.
+If this variable is set to t, moving left from the leftmost window in
+a frame will create a new window on the left, and similarly for the other
+directions."
+  :type 'boolean
+  :group 'windmove
+  :version "27.1")
+
 ;; If your Emacs sometimes places an empty column between two adjacent
 ;; windows, you may wish to set this delta to 2.
 (defcustom windmove-window-distance-delta 1
@@ -471,8 +480,15 @@ DIR, ARG, and WINDOW are handled as by `windmove-other-window-loc'."
 (defun windmove-do-window-select (dir &optional arg window)
   "Move to the window at direction DIR.
 DIR, ARG, and WINDOW are handled as by `windmove-other-window-loc'.
-If no window is at direction DIR, an error is signaled."
+If no window is at direction DIR, an error is signaled.
+If `windmove-create-window' is non-nil, instead of signalling an error
+it creates a new window at direction DIR ."
   (let ((other-window (windmove-find-other-window dir arg window)))
+    (when (and windmove-create-window
+               (or (null other-window)
+                   (and (window-minibuffer-p other-window)
+                        (not (minibuffer-window-active-p other-window)))))
+      (setq other-window (split-window window nil dir)))
     (cond ((null other-window)
            (user-error "No window %s from selected window" dir))
           ((and (window-minibuffer-p other-window)
@@ -493,7 +509,8 @@ With no prefix argument, or with prefix argument equal to zero,
 \"left\" is relative to the position of point in the window; otherwise
 it is relative to the top edge (for positive ARG) or the bottom edge
 \(for negative ARG) of the current window.
-If no window is at the desired location, an error is signaled."
+If no window is at the desired location, an error is signaled
+unless `windmove-create-window' is non-nil that creates a new window."
   (interactive "P")
   (windmove-do-window-select 'left arg))
 
@@ -504,7 +521,8 @@ With no prefix argument, or with prefix argument equal to zero, \"up\"
 is relative to the position of point in the window; otherwise it is
 relative to the left edge (for positive ARG) or the right edge (for
 negative ARG) of the current window.
-If no window is at the desired location, an error is signaled."
+If no window is at the desired location, an error is signaled
+unless `windmove-create-window' is non-nil that creates a new window."
   (interactive "P")
   (windmove-do-window-select 'up arg))
 
@@ -515,7 +533,8 @@ With no prefix argument, or with prefix argument equal to zero,
 \"right\" is relative to the position of point in the window;
 otherwise it is relative to the top edge (for positive ARG) or the
 bottom edge (for negative ARG) of the current window.
-If no window is at the desired location, an error is signaled."
+If no window is at the desired location, an error is signaled
+unless `windmove-create-window' is non-nil that creates a new window."
   (interactive "P")
   (windmove-do-window-select 'right arg))
 
@@ -526,7 +545,8 @@ With no prefix argument, or with prefix argument equal to zero,
 \"down\" is relative to the position of point in the window; otherwise
 it is relative to the left edge (for positive ARG) or the right edge
 \(for negative ARG) of the current window.
-If no window is at the desired location, an error is signaled."
+If no window is at the desired location, an error is signaled
+unless `windmove-create-window' is non-nil that creates a new window."
   (interactive "P")
   (windmove-do-window-select 'down arg))