Emacs 在特定窗口中从目录打开文件
当我们在dired中使用o时,它会在“其他窗口”中打开一个文件。但如果有多个窗口可见,那么它似乎是随机选择的。有没有办法选择它应该在哪个窗口中打开该文件?我怀疑这种行为是随机的,但您可以通过挂接到Emacs 在特定窗口中从目录打开文件,emacs,dired,Emacs,Dired,当我们在dired中使用o时,它会在“其他窗口”中打开一个文件。但如果有多个窗口可见,那么它似乎是随机选择的。有没有办法选择它应该在哪个窗口中打开该文件?我怀疑这种行为是随机的,但您可以通过挂接到显示缓冲区并绑定您自己的命令来更改它 请注意,大多数代码是按区域对窗口列表进行排序 (defvar le::dired-chosen-window nil "current chosen window to show buffers for `le::dired-choose-window-acti
显示缓冲区
并绑定您自己的命令来更改它
请注意,大多数代码是按区域对窗口列表进行排序
(defvar le::dired-chosen-window nil
"current chosen window to show buffers for `le::dired-choose-window-action'")
(defun le::window-list-for-completion ()
"Return alist of (BUFFER-NAME . WINDOW) sorted by size,
suitable for completion."
;; Schwartzian transform
(mapcar
(lambda (cell)
(let ((window (car cell)))
(cons (concat
(when (and (boundp 'window-numbering-mode)
window-numbering-mode)
(format "%s: "
(window-numbering-get-number-string window)))
(buffer-name (window-buffer window)))
window)))
(sort (loop with boost-alist = (if (eq major-mode 'dired-mode)
(list (cons (selected-window) -1000000))
nil)
for window in (window-list nil 0 (window-at 0 0))
for index from 0
collect (cons window (+
(* (window-total-width window)
(window-total-height window)
100)
index
(let ((boost (assq window boost-alist)))
(if boost
(cdr boost)
0)))))
(lambda (a b)
(> (cdr a) (cdr b))))))
(defun le::dired-choose-window (window)
"Choose window to display buffer in.
Reset selection with universal prefix (C-u)."
(interactive (let ((completions (le::window-list-for-completion)))
(list (unless current-prefix-arg
(cdr (assoc (completing-read "window holding buffer: " completions) completions))))))
(setq le::dired-chosen-window window))
(defun le::dired-choose-window-action (buffer alist)
"action to display buffer in `le::dired-chosen-window'"
(window--display-buffer buffer le::dired-chosen-window 'reuse))
(defun le::dired-find-file-specified-window ()
"Dired command to display buffer in chosen window"
(interactive)
(let ((display-buffer-overriding-action '((le::dired-choose-window-action))))
(dired-find-file-other-window)))
(define-key dired-mode-map [remap dired-find-file-other-window] 'le::dired-find-file-specified-window)
le::dired选择窗口操作选择窗口
我也对迪德的这种行为感到恼火。我喜欢这种只需一次按键就可以轻松选择窗口的方式,因此a编写了一个函数,让我可以使用它在我选择的窗口中从dired打开文件:
(require 'ace-window)
(defun find-file-ace-window ()
"Use ace window to select a window for opening a file from dired."
(interactive)
(let ((file (dired-get-file-for-visit)))
(if (> (length (aw-window-list)) 1)
(aw-select "" (lambda (window)
(aw-switch-to-window window)
(find-file file)))
(find-file-other-window file))))
要替换dired标准查找文件其他窗口
命令添加
(define-key dired-mode-map "o" 'find-file-ace-window)
是的,它实际上是在打开的窗口中以循环方式打开的。我会试试你的作品,让你知道这是否符合我的要求。谢谢请参见以下示例,以在上方、下方、左侧或右侧显示缓冲区(从dired模式打开):