Reputation: 3456
I have emacs behaving more or less how I want it to by using this common bit of elisp:
(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)
Unfortunately, dired uses the directory for the buffer name, so dedicating a dired window only dedicates it to that directory. Once you navigate up or down, it opens a new buffer in a separate window. What I would like to do is dedicate a window to a major mode (dired in this case), and have all new buffers that default to that mode prefer that window. Is this possible?
Upvotes: 5
Views: 1572
Reputation: 40321
Set the dired-kill-when-opening-new-dired-buffer
emacs variable to t
. For example add the following to your init.el
:
(setq dired-kill-when-opening-new-dired-buffer t)
From the documentation:
If non-nil, kill the current buffer when selecting a new directory.
This variable was added, or its default value changed, in Emacs 28.1.
Upvotes: 0
Reputation: 16879
Try using your code in combination with dired-single
, which will cause all dired navigation to happen within a single buffer named *dired*
. In the interests of full disclosure, I wrote dired-single
.
Upvotes: 4
Reputation: 74480
set-window-dedicated-p
forces Emacs to only show that window for that buffer, the other dired buffers cannot use the same window. See the *info* page for set-window-dedicated-p
:
`display-buffer' (*note Choosing Window::) never uses a dedicated window for displaying another buffer in it.
Perhaps one of the packages on the wiki page for DiredReuseDirectoryBuffer provides the functionality you're looking for...
Upvotes: 3