Emacs里有一个专门的窗口可以用于dired模式吗?

5

我使用以下一段常见的elisp代码,让Emacs基本上按照我的意愿运作:

(defun toggle-current-window-dedication ()
 (interactive)
 (let* ((window    (selected-window))
        (dedicated (window-dedicated-p window)))
   (set-window-dedicated-p window (not dedicated))
   (message "Window %sdedicated to %s"
            (if dedicated "no longer " "")
            (buffer-name))))

(global-set-key [pause] 'toggle-current-window-dedication)

不幸的是,dired使用目录作为缓冲区名称,因此专用dired窗口仅专用于该目录。一旦您向上或向下导航,它就会在单独的窗口中打开新缓冲区。我想要做的是将一个窗口专用于一个主模式(在这种情况下是dired),并且所有默认为该模式的新缓冲区都优先选择该窗口。这可能吗?

2个回答

4
尝试将您的代码与dired-single结合使用,这将使所有dired导航在名为*dired*的单个缓冲区内发生。为了充分披露,我编写了dired-single

不幸的是,dired-single 将文件与 *dired* 缓冲区在同一个窗口中打开。虽然这对于目录来说很完美,但如果能像使用 dired-find-file-other-window 一样处理文件就更好了... - hupf
Joe,这个项目是否已经迁移到 https://github.com/crocket/dired-single?你的链接已经失效了。 - Sean Allred
我没有把它移到那里,但看起来有人移动了它,这对我来说没问题。不幸的是,我不再使用Emacs,所以我无法支持这个项目。 - Joe Casadonte

3

set-window-dedicated-p可以强制Emacs只为该缓冲区显示一个窗口,其他dired缓冲区不能使用相同的窗口。有关set-window-dedicated-p的详细信息,请参见*info*页面

`display-buffer' (*note Choosing Window::) 永远不会在专用窗口中显示另一个缓冲区。

也许你正在寻找DiredReuseDirectoryBuffer页面上的某个软件包提供的功能...


谢谢,Trey。我正在使用dired-find-alternate-file来防止打开新的缓冲区,并为dired缓冲区设置了same-window-regexps。这让我达到了90%的目标,但其他缓冲区仍然可以在我的dired窗口中打开(帮助、完成等)。如果我对elisp有更好的掌握,我会在打开新缓冲区之前在窗口中钩住一个dired的正则表达式匹配。 :) - Parker Ault

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