Let select-frame-by-name choose any frame when called from lisp (Bug#25521)

* lisp/frame.el (select-frame-by-name): Choose from the whole list of
frames in the non-interactive part, if not found on the current
display.
This commit is contained in:
Noam Postavsky 2017-09-01 09:38:55 -04:00
parent 8eb3c01dbd
commit 616b4c5956
2 changed files with 14 additions and 6 deletions

View file

@ -1862,6 +1862,10 @@ window's body.
For details see the section "(elisp) Mouse Window Auto-selection" in
the ELisp manual.
---
*** 'select-frame-by-name' now may return a frame on another display
if it does not find a suitable one on the current display.
---
** 'tcl-auto-fill-mode' is now declared obsolete. Its functionality
can be replicated simply by setting 'comment-auto-fill-only-comments'.

View file

@ -892,7 +892,8 @@ Calls `suspend-emacs' if invoked from the controlling tty device,
(defvar frame-name-history nil)
(defun select-frame-by-name (name)
"Select the frame on the current terminal whose name is NAME and raise it.
"Select the frame whose name is NAME and raise it.
Frames on the current terminal are checked first.
If there is no frame by that name, signal an error."
(interactive
(let* ((frame-names-alist (make-frame-names-alist))
@ -903,11 +904,14 @@ If there is no frame by that name, signal an error."
(if (= (length input) 0)
(list default)
(list input))))
(let* ((frame-names-alist (make-frame-names-alist))
(frame (cdr (assoc name frame-names-alist))))
(if frame
(select-frame-set-input-focus frame)
(error "There is no frame named `%s'" name))))
(select-frame-set-input-focus
;; Prefer frames on the current display.
(or (cdr (assoc name (make-frame-names-alist)))
(catch 'done
(dolist (frame (frame-list))
(when (equal (frame-parameter frame 'name) name)
(throw 'done frame))))
(error "There is no frame named `%s'" name))))
;;;; Background mode.