Mercurial > emacs
changeset 20386:25ca60b3ca09
(make-frame-names-alist, select-frame-by-name): New
functions, support frame selection by name with completion and history.
(frame-name-history, frame-names-alist): New variables.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Mon, 01 Dec 1997 14:22:04 +0000 |
parents | e1ea41eba8be |
children | 4c524f5214ce |
files | lisp/frame.el |
diffstat | 1 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/frame.el Sun Nov 30 12:21:42 1997 +0000 +++ b/lisp/frame.el Mon Dec 01 14:22:04 1997 +0000 @@ -520,6 +520,43 @@ (if (eq window-system 'w32) (w32-focus-frame frame) (set-mouse-position (selected-frame) (1- (frame-width)) 0)))) + +(defun make-frame-names-alist () + (let* ((current-frame (selected-frame)) + (falist + (cons + (cons (frame-parameter current-frame 'name) current-frame) nil)) + (frame (next-frame nil t))) + (while (not (eq frame current-frame)) + (progn + (setq falist (cons (cons (frame-parameter frame 'name) frame) falist)) + (setq frame (next-frame frame t)))) + falist)) + +(defvar frame-name-history nil) +(defvar frame-names-alist nil) +(defun select-frame-by-name (name) + "Select the frame whose name is NAME and raise it. +If there is no frame by that name, signal an error." + (interactive + (let (input default) + (setq frame-names-alist (make-frame-names-alist)) + (setq default (car (car frame-names-alist))) + (setq input + (completing-read + (format "Select Frame (default %s): " default) + frame-names-alist nil t nil 'frame-name-history)) + (if (= (length input) 0) + (list default) + (list input)))) + (or (interactive-p) + (setq frame-names-alist (make-frame-names-alist))) + (let ((frame (cdr (assoc name frame-names-alist)))) + (or frame + (error "There is no frame named `%s'" name)) + (make-frame-visible frame) + (raise-frame frame) + (select-frame frame))) ;;;; Frame configurations