如果框架名为“xyz”存在,然后切换到该帧 [英] If frame named "xyz" exists, then switch to that frame

查看:107
本文介绍了如果框架名为“xyz”存在,然后切换到该帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我会想象它类似于缓冲区,但我没有在Google上找到任何内容。这是缓冲区函数:

 (defun buffer-exists(bufname)
(not(eq nil缓冲区bufname))))

(defun lawlist-switch-to-buffer-xyz()
(interactive)
(if(buffer-existsxyz)
(switch-to-bufferxyz)))

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






EDIT (2014年9月15日):修改函数 ido-switch-frame 以使 frame-to 一个let-bound变量,并删除消息。删除以前的编辑作为由Drew Adams编写的函数 get-a-frame get-frame-name select-frame-set-input-focus 一起使用 - 请看下面他的答案。

 (defun ido-switch-frame()
(interactive)
(when(not(minibufferp))
(let *
(帧(frame-list))
(frame-to(ido-completion-read选择帧:
(mapcar(lambda(frame)(frame-parameter frame'name) )框架)))
(catch'break
(while frames
(let((frame(car frames)))
(if(equal(frame-parameter frame'名称)frame-to)
(throw'break(select-frame-set-input-focus frame))
(setq frames(cdr frames))))))))))


解决方案

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

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


Could someone please give me hand with a function that detects whether a frame named "xyz" exists, and if so, then switch to that frame. I'm using frame-cmds to give each frame a user-defined name:  http://www.emacswiki.org/emacs/frame-cmds.el

I would imagine it is similar to a buffer, but I'm not finding anything on Google. Here is the buffer function:

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

Here is a semi-related post:  https://superuser.com/questions/358037/emacsclient-create-a-frame-if-a-frame-does-not-exist


EDIT (September 15, 2014):  Modified the function ido-switch-frame to make frame-to a let-bound variable, and removed the message. Removed previous edits as the functions get-a-frame and get-frame-name written by Drew Adams are sufficient when used in conjunction with select-frame-set-input-focus -- see his answer below.

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

解决方案

There may be more elegant solutions but this gets the job done:

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

这篇关于如果框架名为“xyz”存在,然后切换到该帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆