如何打开一个始终在emacs中显示其父框架的活动缓冲区的新框架?

时间:2012-12-27 07:02:23

标签: emacs elisp

我希望有一个快捷方式在emacs中创建一个新框架,它将始终显示创建它的框架的活动缓冲区。这样,框架可以移动到另一个工作区,以保持另一个emacs框架的小预览。

以下是我对一个函数的尝试,该函数将使新帧始终显示父帧的缓冲区。 get-active-buffer是伪代码,但除此之外,其余的应该可以解决问题。

(defun display-active-buffer (parent-frame)
  (while t
    (let ((active-buffer (get-current-buffer parent-frame)))
      (cond (/= active-buffer (current-buffer))
        (switch-to-buffer-other-frame active-buffer)))))

我真的只是想知道get-current-buffer这样的函数是什么样的,它会像当前缓冲区一样,除了它会将一个帧作为参数,而不仅仅是使用当前帧。我还需要找出一些方法将父框架的名称传递给这个函数。我也不确定为此使用无限循环是多么聪明。如果有人知道更好的方法,请告诉我们。

我觉得这可能是添加到emacs的一个非常有用的功能,所以如果我想出所有这些,我将确保编辑这篇文章,为任何人添加我完成的代码。

1 个答案:

答案 0 :(得分:3)

我不知道你为什么要这样做,但我认为这就是你所描述的:

(defun make-frame-synced-to-current-frame-current-buffer ()
  (interactive)
  (let ((parent-frame (selected-frame))
        (synced-frame (make-frame)))
    (add-hook
     'window-configuration-change-hook
     `(lambda ()
        (if (eq (selected-frame) ,parent-frame)
            (save-excursion
              (select-frame ,synced-frame)
              (switch-to-buffer (window-buffer
                                 (frame-selected-window
                                  ,parent-frame)))
              (select-frame ,parent-frame)))))))