[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 57d2f24: * lisp/frame.el (make-frame-on-monitor): N
From: |
Juri Linkov |
Subject: |
[Emacs-diffs] master 57d2f24: * lisp/frame.el (make-frame-on-monitor): New command. (Bug#34516) |
Date: |
Mon, 25 Feb 2019 16:11:43 -0500 (EST) |
branch: master
commit 57d2f24005a2e553fa8225eaff8465e5fad06d46
Author: Juri Linkov <address@hidden>
Commit: Juri Linkov <address@hidden>
* lisp/frame.el (make-frame-on-monitor): New command. (Bug#34516)
(make-frame-on-display): Add completion on available display names.
---
etc/NEWS | 4 ++++
lisp/frame.el | 36 +++++++++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/etc/NEWS b/etc/NEWS
index 587d20c..26b0a93 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1140,6 +1140,10 @@ when given in a string. Previously, '(any "\x80-\xff")'
would match
characters U+0080...U+00FF. Now the expression matches raw bytes in
the 128...255 range, as expected.
+** Frames
+
+*** New command 'make-frame-on-monitor' makes a frame on the specified monitor.
+
* New Modes and Packages in Emacs 27.1
diff --git a/lisp/frame.el b/lisp/frame.el
index dc81302..8a4a0b6 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -644,9 +644,43 @@ Return nil if we don't know how to interpret DISPLAY."
(defun make-frame-on-display (display &optional parameters)
"Make a frame on display DISPLAY.
The optional argument PARAMETERS specifies additional frame parameters."
- (interactive "sMake frame on display: ")
+ (interactive (list (completing-read
+ (format "Make frame on display: ")
+ (delete-dups
+ (mapcar (lambda (frame)
+ (frame-parameter frame 'display))
+ (frame-list))))))
(make-frame (cons (cons 'display display) 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
+argument PARAMETERS specifies additional frame parameters."
+ (interactive (list (completing-read
+ (format "Make frame on monitor: ")
+ (mapcar (lambda (a)
+ (cdr (assq 'name a)))
+ (display-monitor-attributes-list)))))
+ (let* ((monitor-geometry
+ (car (delq nil (mapcar (lambda (a)
+ (when (equal (cdr (assq 'name a)) monitor)
+ (cdr (assq 'workarea a))))
+ (display-monitor-attributes-list display)))))
+ (frame-geometry
+ (when monitor-geometry
+ (x-parse-geometry (format "%dx%d+%d+%d"
+ (nth 2 monitor-geometry)
+ (nth 3 monitor-geometry)
+ (nth 0 monitor-geometry)
+ (nth 1 monitor-geometry)))))
+ (frame-geometry-in-pixels
+ (when frame-geometry
+ `((top . ,(cdr (assq 'top frame-geometry)))
+ (left . ,(cdr (assq 'left frame-geometry)))
+ (height . (text-pixels . ,(cdr (assq 'height frame-geometry))))
+ (width . (text-pixels . ,(cdr (assq 'width frame-geometry))))))))
+ (make-frame (append frame-geometry-in-pixels parameters))))
+
(declare-function x-close-connection "xfns.c" (terminal))
(defun close-display-connection (display)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 57d2f24: * lisp/frame.el (make-frame-on-monitor): New command. (Bug#34516),
Juri Linkov <=