unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#39875: 28.0.50; Use make-frame-on-current-monitor in windmove
@ 2020-03-02 22:41 Juri Linkov
  2020-03-06  0:19 ` Juri Linkov
  0 siblings, 1 reply; 2+ messages in thread
From: Juri Linkov @ 2020-03-02 22:41 UTC (permalink / raw)
  To: 39875

[-- Attachment #1: Type: text/plain, Size: 1504 bytes --]

Severity: wishlist

Here are two related feature requests:

1. A new command make-frame-on-current-monitor that is useful when the user
   uses only one monitor on multiple-monitor setup.  The problem is that the
   command make-frame creates a new frame on unused non-selected monitor.
   Here comes make-frame-on-current-monitor to rescue:

diff --git a/lisp/frame.el b/lisp/frame.el
index 16ee7580f8..dc8dabc5a5 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -713,6 +713,18 @@ make-frame-on-display
                       (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

2. This command could be used in windmove-display-new-frame
   to display the next buffer in a new frame as well as
   windmove-display-new-window to display the buffer in a new window:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: windmove-display-new-frame.patch --]
[-- Type: text/x-diff, Size: 3356 bytes --]

diff --git a/lisp/windmove.el b/lisp/windmove.el
index 40adb49e20..57f521e2be 100644
--- a/lisp/windmove.el
+++ b/lisp/windmove.el
@@ -474,6 +474,14 @@ windmove-display-in-direction
                                         (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 'new-window)
+                                      ;; Split window in any direction
+                                      (setq dir nil))
                                      ((eq dir 'same-window)
                                       (selected-window))
                                      (t (window-in-direction
@@ -541,6 +549,18 @@ windmove-display-same-window
   (interactive "P")
   (windmove-display-in-direction 'same-window arg))
 
+;;;###autoload
+(defun windmove-display-new-window (&optional arg)
+  "Display the next buffer in a new window."
+  (interactive "P")
+  (windmove-display-in-direction 'new-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 +582,8 @@ windmove-display-default-keybindings
   (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 '(?w)))    'windmove-display-new-window)
+  (global-set-key (vector (append modifiers '(?f)))    'windmove-display-new-frame)
   (global-set-key (vector (append modifiers '(?t)))    'windmove-display-new-tab))
 
 \f
diff --git a/lisp/window.el b/lisp/window.el
index bd825c09e1..d9ab70253f 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -7891,15 +7891,15 @@ display-buffer-in-direction
 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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#39875: 28.0.50; Use make-frame-on-current-monitor in windmove
  2020-03-02 22:41 bug#39875: 28.0.50; Use make-frame-on-current-monitor in windmove Juri Linkov
@ 2020-03-06  0:19 ` Juri Linkov
  0 siblings, 0 replies; 2+ messages in thread
From: Juri Linkov @ 2020-03-06  0:19 UTC (permalink / raw)
  To: 39875

tags 39875 + patch fixed
close 39875 28.0.50
quit

> Severity: wishlist
>
> Here are two related feature requests:
>
> 1. A new command make-frame-on-current-monitor that is useful when the user
>    uses only one monitor on multiple-monitor setup.  The problem is that the
>    command make-frame creates a new frame on unused non-selected monitor.
>    Here comes make-frame-on-current-monitor to rescue:

Pushed to master, and closed.





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-03-06  0:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-02 22:41 bug#39875: 28.0.50; Use make-frame-on-current-monitor in windmove Juri Linkov
2020-03-06  0:19 ` Juri Linkov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).