From 6438107565875ff69f533c244a9601192218e7c9 Mon Sep 17 00:00:00 2001 From: Trust me I am a doctor Date: Tue, 8 Jun 2021 11:44:54 +0200 Subject: [PATCH] User option to choose a function triggered by windmove-create * lisp/windmove.el (windmove-create-window): Add a defcustom choice. (windmove-do-window-select): Trigger custom functions. --- lisp/windmove.el | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/windmove.el b/lisp/windmove.el index f558903681..d410e387d4 100644 --- a/lisp/windmove.el +++ b/lisp/windmove.el @@ -142,13 +142,16 @@ windmove-wrap-around :group 'windmove) (defcustom windmove-create-window nil - "Whether movement off the edge of the frame creates a new window. + "Whether movement off the edge of the frame create a 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") +directions. +The variable may also be a function to be called in this circumstance, +the function should accept as agument a DIRECTION, and the selected WINDOW." + :type '(choice (const :tag "Don't create new windows" nil) + (const :tag "Create new windows" t) + (function :tag "Provide a function")) + :version "28.0.50") ;; If your Emacs sometimes places an empty column between two adjacent ;; windows, you may wish to set this delta to 2. @@ -357,7 +360,9 @@ windmove-do-window-select (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))) + (setq other-window (if (functionp windmove-create-window) + (funcall windmove-create-window dir 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) -- 2.20.1