]> git.eshelyaron.com Git - emacs.git/commitdiff
New command make-frame-on-current-monitor to use in windmove (bug#39875)
authorJuri Linkov <juri@linkov.net>
Fri, 6 Mar 2020 00:19:00 +0000 (02:19 +0200)
committerJuri Linkov <juri@linkov.net>
Fri, 6 Mar 2020 00:19:00 +0000 (02:19 +0200)
* lisp/frame.el (make-frame-on-current-monitor): New command.

* lisp/windmove.el (windmove-display-in-direction):
Use make-frame-on-current-monitor for 'new-frame'.
(windmove-display-new-frame): New command.
(windmove-display-default-keybindings): Bind
windmove-display-new-frame to 'f' key.

* lisp/window.el (display-buffer-in-direction): Fix quotes in docstring.

lisp/frame.el
lisp/windmove.el
lisp/window.el

index 16ee7580f89f6e6960d9d5e2eaeb3a80ee1922b2..dc8dabc5a51d03213123ad801fcf6397e050f815 100644 (file)
@@ -713,6 +713,18 @@ The optional argument PARAMETERS specifies additional frame parameters."
                       (x-display-list))))
   (make-frame (cons (cons 'display display) parameters)))
 
+(defun make-frame-on-current-monitor (&optional parameters)
+  "Make a frame on the currently selected monitor.
+Like `make-frame-on-monitor' and with the same PARAMETERS as in `make-frame'."
+  (interactive)
+  (let* ((monitor-workarea
+          (cdr (assq 'workarea (frame-monitor-attributes))))
+         (geometry-parameters
+          (when monitor-workarea
+            `((top . ,(nth 1 monitor-workarea))
+              (left . ,(nth 0 monitor-workarea))))))
+    (make-frame (append geometry-parameters parameters))))
+
 (defun make-frame-on-monitor (monitor &optional display parameters)
   "Make a frame on monitor MONITOR.
 The optional argument DISPLAY can be a display name, and the optional
index 40adb49e20f51d59d7536afa3093d5bb985cf2ed..94d2b75210da3d97c03fef8593580c4c1a74d24a 100644 (file)
@@ -474,6 +474,11 @@ When `switch-to-buffer-obey-display-actions' is non-nil,
                                         (tab-bar-new-tab))
                                       (setq type 'tab)
                                       (selected-window))
+                                     ((eq dir 'new-frame)
+                                      (window--maybe-raise-frame
+                                       (make-frame-on-current-monitor pop-up-frame-alist))
+                                      (setq type 'frame)
+                                      (selected-window))
                                      ((eq dir 'same-window)
                                       (selected-window))
                                      (t (window-in-direction
@@ -541,6 +546,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-frame (&optional arg)
+  "Display the next buffer in a new frame."
+  (interactive "P")
+  (windmove-display-in-direction 'new-frame arg))
+
 ;;;###autoload
 (defun windmove-display-new-tab (&optional arg)
   "Display the next buffer in a new tab."
@@ -562,6 +573,7 @@ Default value of MODIFIERS is `shift-meta'."
   (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 '(?f)))    'windmove-display-new-frame)
   (global-set-key (vector (append modifiers '(?t)))    'windmove-display-new-tab))
 
 \f
index b1a0294ae91f28d4ac7b1544570b5ec36b88839f..bbd4e9b6dfc6e428fb10bdb54b276a58b6e8a621 100644 (file)
@@ -7891,15 +7891,15 @@ Info node `(elisp) Buffer Display Action Alists' for details of
 such alists.
 
 ALIST has to contain a `direction' entry whose value should be
-one of `left', `above' (or `up'), `right' and `below' (or
-'down').  Other values are usually interpreted as `below'.
+one of `left', `above' (or `up'), `right' and `below' (or `down').
+Other values are usually interpreted as `below'.
 
 If ALIST also contains a `window' entry, its value specifies a
 reference window.  That value can be a special symbol like
-'main' (which stands for the selected frame's main window) or
-'root' (standings for the selected frame's root window) or an
+`main' (which stands for the selected frame's main window) or
+`root' (standings for the selected frame's root window) or an
 arbitrary valid window.  Any other value (or omitting the
-'window' entry) means to use the selected window as reference
+`window' entry) means to use the selected window as reference
 window.
 
 This function tries to reuse or split a window such that the