emacs - 如果名为 "xyz"的帧存在,则切换到该帧

标签 emacs elisp

有人可以给我一个函数来检测名为“xyz”的框架是否存在,如果存在,则切换到该框架。我使用 frame-cmds 为每个帧指定一个用户定义的名称: http://www.emacswiki.org/emacs/frame-cmds.el

我想它类似于缓冲区,但我在谷歌上没有找到任何东西。这是缓冲函数:

(defun buffer-exists (bufname)
    (not (eq nil (get-buffer bufname))))

(defun lawlist-switch-to-buffer-xyz ()
(interactive)
    (if (buffer-exists "xyz")
        (switch-to-buffer "xyz") ))

这是一篇半相关的帖子:https://superuser.com/questions/358037/emacsclient-create-a-frame-if-a-frame-does-not-exist


编辑(2014 年 9 月 15 日):修改了函数 ido-switch-frame 以使 frame-to 成为 let 绑定(bind)变量,并删除了消息。删除了之前的编辑,因为 Drew Adams 编写的函数 get-a-frameget-frame-name 在与 select-frame-set 结合使用时就足够了-input-focus -- 请参阅下面他的答案。

(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)))))))))

最佳答案

可能有更优雅的解决方案,但这可以完成工作:

(defun switch-to-frame (frame-name)
  (interactive "sFrame name:")
  (let ((frames (frame-list)))
    (catch 'break
      (while frames
        (let ((frame (car frames)))
          (if (equal (frame-parameter frame 'name) frame-name)
              (throw 'break (select-frame-set-input-focus frame))
            (setq frames (cdr frames))))))))

关于emacs - 如果名为 "xyz"的帧存在,则切换到该帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17823448/

相关文章:

haskell - 是否有在 emacs 中应用 hlint 建议的命令?

Emacs模式多行注释

emacs - 如何设置 Emacs 主题?

emacs - 如何在 emacs 组织模式中启用并行 PDF 导出

Emacs 行高

emacs - 一般使用 magit 风格差异

emacs - evil-mode 最佳实践?

emacs - 如何高效地查找 Coq 中定义的标识符?

emacs - 如何在 elisp 中用变量替换硬编码字符串?

java - 使用 el-get 安装 ensime 失败