当我在使用多个框架时,我希望能够决定Emacs应该在哪个框架中打开文件/缓冲区。
你不能直接这样做。
有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))))
find-file
,我建议你结合windmove
和framemove
使用,这样切换到你想要打开文件的帧非常简单和快速,你可能不需要更复杂的操作。不确定您真正想要什么。但是关于在另一个框架中从Dired打开文件,只需在Dired+中使用C-o或M-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)))