我想创建一个函数,为我提供可供切换到的可用帧的  编号或字母选择(1, 2, 3或),而不是手动输入名称。将是我能想到的最接近的例子。a, b, cAspell
有人可以分享一个如何做到这一点的例子吗?以下函数的第 6 到 14 行即时创建所有可用帧名称的列表。与帧交换相关的附加功能可以在这里找到
(defun switch-frame (frame-to)
  (interactive  (list (read-string (format "From: (%s) => To: %s.  Select: "
    ;;  From:
    (frame-parameter nil 'name)
    ;;  To:
    (mapcar
      (lambda (frame) "print frame"
        (reduce 'concat
          (mapcar (lambda (s) (format "%s" s))
            (list "|" (frame-parameter frame 'name) "|" )
          )
        )
      )
    (frame-list) )
   )))) ;; end of interactive statement
  (setq frame-from (frame-parameter nil 'name))
  (let ((frames (frame-list)))
    (catch 'break
      (while frames
        (let ((frame (car frames)))
          (if (equal (frame-parameter frame 'name) frame-to)
              (throw 'break (select-frame-set-input-focus frame))
            (setq frames (cdr frames)))))) )
  (message "Switched -- From: \"%s\"  To: \"%s\"." frame-from frame-to) )
编辑(2014 年 11 月 13 日):这是一个修改后的函数,使用ido-completing-read:
(defun ido-switch-frame ()
(interactive)
  (when (not (minibufferp))
    (let* (
        (frames (frame-list))
        (frame-to (ido-completing-read "Select Frame:  "
          (mapcar (lambda (frame) (frame-parameter frame 'name)) frames))))
      (catch 'break
        (while frames
          (let ((frame (car frames)))
            (if (equal (frame-parameter frame 'name) frame-to)
              (throw 'break (select-frame-set-input-focus frame))
              (setq frames (cdr frames)))))))))
