在Emacs中,我如何在另一个框架中以“ibuffer / dired模式”打开缓冲区/文件?

3
当我在使用多个框架时,我希望能够决定Emacs应该在哪个框架中打开文件/缓冲区。
3个回答

2

你不能直接这样做。

find-buffer-other-frame等函数,但它们会打开一个新的窗口。

你可以编写自己的函数,像这样:

(defun find-file-in-frame ()
  (interactive)
  (call-interactively 'select-frame-by-name)
  (call-interactively 'find-file))

这会切换框架,然后请求文件,如果你想以其他方式完成,就需要做更多的工作。

编辑:这是在当前框架中询问并在另一个窗口中打开文件的版本:

(defun find-file-in-frame (noselect)
  (interactive "P")
  (let ((current-frame (selected-frame))
        (frame (completing-read "Frame: " (make-frame-names-alist)))
        (buffer (save-window-excursion
                  (call-interactively 'find-file))))
    (select-frame-set-input-focus (assoc-default frame
                                                 (make-frame-names-alist)
                                                 nil current-frame))
    (switch-to-buffer buffer)
    (when noselect
      (select-frame-set-input-focus current-frame))))

0
如果你只是指find-file,我建议你结合windmoveframemove使用,这样切换到你想要打开文件的帧非常简单和快速,你可能不需要更复杂的操作。
另一方面,如果你想在任何方式打开文件时能够选择一个帧,那么这个方法显然不适用。

0

不确定您真正想要什么。但是关于在另一个框架中从Dired打开文件,只需在Dired+中使用C-oM-mouse-2。如果出于某种原因您不想加载Dired+,则可以绑定这些命令:

    (defun diredp-find-file-other-frame ()  ; 绑定到 `C-o'
      "在Dired中,在另一个框架中访问此文件或目录。"
      (interactive)
      (find-file-other-frame (file-name-sans-versions (dired-get-filename nil t) t)))
(defun diredp-mouse-find-file-other-frame (event) ; 绑定到 `M-mouse-2' "在Dired中,在另一个框架中访问所单击的文件或目录。" (interactive "e") (let ((pop-up-frames t)) (dired-mouse-find-file-other-window event)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接