【问题标题】:How can I open a new frame which always displays the active buffer of its parent frame in emacs?如何打开一个始终在 emacs 中显示其父框架的活动缓冲区的新框架?
【发布时间】:2012-12-27 07:02:22
【问题描述】:

我想有一个快捷方式来在 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,它的作用类似于 current-buffer,除了它需要一个帧作为参数,而不仅仅是使用当前帧。我还需要想办法将父框架的名称传递给这个函数。我也不确定为此使用无限while循环有多聪明。如果有人知道更好的方法,请告诉。

我觉得这可能是添加到 emacs 中的一个非常有用的功能,因此,如果我弄清楚了所有这些,我一定会编辑这篇文章以添加我完成的代码以供任何人使用。

【问题讨论】:

  • 我不太确定您要完成什么,为什么不打开缓冲区而不更改它?无论如何,不​​妨看看emacswiki.org/emacs/MiniMap 的 minimap.el。也许这会做你想做的事?

标签: emacs elisp


【解决方案1】:

我不知道您为什么要这样做,但我认为这符合您的描述:

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

【讨论】:

  • 这很好。它几乎完全符合我的要求。但是,这样做的一个问题是,如果您在另一个框架中有 2 个或更多窗口,它只会与创建它的窗口同步。当我有更多时间时,我将编辑您的代码,使其也跟随当前窗口。我想我之前可能已经找到了可以让我这样做的东西,但我必须再次找到它,因为我已经忘记了它是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多