diff options
| author | Eli Zaretskii | 1997-12-01 14:22:04 +0000 |
|---|---|---|
| committer | Eli Zaretskii | 1997-12-01 14:22:04 +0000 |
| commit | 845cde06cd0e21689c48f854a819e8a4de4e5f5a (patch) | |
| tree | 10b6e22715a924c117e85e1d0da7896f0f5f6fae | |
| parent | 59c14ec62db0a72733e90945dd6b5560dc0b8d75 (diff) | |
| download | emacs-845cde06cd0e21689c48f854a819e8a4de4e5f5a.tar.gz emacs-845cde06cd0e21689c48f854a819e8a4de4e5f5a.zip | |
(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.
| -rw-r--r-- | lisp/frame.el | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lisp/frame.el b/lisp/frame.el index e4531a3d15a..14da34c822e 100644 --- a/lisp/frame.el +++ b/lisp/frame.el | |||
| @@ -520,6 +520,43 @@ A negative ARG moves in the opposite order." | |||
| 520 | (if (eq window-system 'w32) | 520 | (if (eq window-system 'w32) |
| 521 | (w32-focus-frame frame) | 521 | (w32-focus-frame frame) |
| 522 | (set-mouse-position (selected-frame) (1- (frame-width)) 0)))) | 522 | (set-mouse-position (selected-frame) (1- (frame-width)) 0)))) |
| 523 | |||
| 524 | (defun make-frame-names-alist () | ||
| 525 | (let* ((current-frame (selected-frame)) | ||
| 526 | (falist | ||
| 527 | (cons | ||
| 528 | (cons (frame-parameter current-frame 'name) current-frame) nil)) | ||
| 529 | (frame (next-frame nil t))) | ||
| 530 | (while (not (eq frame current-frame)) | ||
| 531 | (progn | ||
| 532 | (setq falist (cons (cons (frame-parameter frame 'name) frame) falist)) | ||
| 533 | (setq frame (next-frame frame t)))) | ||
| 534 | falist)) | ||
| 535 | |||
| 536 | (defvar frame-name-history nil) | ||
| 537 | (defvar frame-names-alist nil) | ||
| 538 | (defun select-frame-by-name (name) | ||
| 539 | "Select the frame whose name is NAME and raise it. | ||
| 540 | If there is no frame by that name, signal an error." | ||
| 541 | (interactive | ||
| 542 | (let (input default) | ||
| 543 | (setq frame-names-alist (make-frame-names-alist)) | ||
| 544 | (setq default (car (car frame-names-alist))) | ||
| 545 | (setq input | ||
| 546 | (completing-read | ||
| 547 | (format "Select Frame (default %s): " default) | ||
| 548 | frame-names-alist nil t nil 'frame-name-history)) | ||
| 549 | (if (= (length input) 0) | ||
| 550 | (list default) | ||
| 551 | (list input)))) | ||
| 552 | (or (interactive-p) | ||
| 553 | (setq frame-names-alist (make-frame-names-alist))) | ||
| 554 | (let ((frame (cdr (assoc name frame-names-alist)))) | ||
| 555 | (or frame | ||
| 556 | (error "There is no frame named `%s'" name)) | ||
| 557 | (make-frame-visible frame) | ||
| 558 | (raise-frame frame) | ||
| 559 | (select-frame frame))) | ||
| 523 | 560 | ||
| 524 | ;;;; Frame configurations | 561 | ;;;; Frame configurations |
| 525 | 562 | ||