emacs list-buffers behavior
EmacsElispEmacs Problem Overview
In GNU emacs, every time I hit Ctrl-x Ctrl-b to see all of my buffers, the window is split to show the buffer list, or if I have my window already split in 2 (for instance, I will have a shell running in the lower window), the buffer list appears in the other window.
My desired behavior is for the buffer list to appear in my active window so that I can select the buffer I want and continue to working in the same window, rather than having to Ctrl-x Ctrl-o to the other buffer, selecting the buffer (with enter) and editing that buffer in the other window... I've googled for it but it doesn't seem to be a common desire? I wonder if anyone has an elispy (or other) solution?
Emacs Solutions
Solution 1 - Emacs
You might want to rebind C-x C-b to invoke buffer-menu
rather than list-buffers
:
(global-set-key "\C-x\C-b" 'buffer-menu)
Solution 2 - Emacs
Just customize the variable same-window-regexps
. display-buffer
will display any buffer whose name matches a regexp there in the currently-selected window.
(You will want to add "[*]Buffer List
".)
Solution 3 - Emacs
not exactly a solution, but ido-mode
provides a different and powerful way to interact with buffers. C-x b
will then show a list of all the open buffers, and the one you select will open in the current window.
Solution 4 - Emacs
Strangely, there isn't an answer here about ibuffer
.
I would recommend this as a standard change for the majority of Emacs users:
(global-set-key (kbd "C-x C-b") 'ibuffer)
ibuffer is a very advanced replacement for the default buffer listing, and not only features the exact behaviour requested, but provides a wealth of other functionality.
I listed a few ibuffer filtering and grouping basics in https://stackoverflow.com/questions/3145332/emacs-help-me-understand-file-buffer-management/3145824#3145824, but be sure to read the documentation for details.
Solution 5 - Emacs
Try to add
(ido-mode 1)
to your .emacs, and enjoy the result :)
Solution 6 - Emacs
If you like the original buffer list (as opposed to the 'buffer-menu
solution proposed by others), you can use this:
(global-set-key (kbd "C-x C-b") 'my-list-buffers)
(defun my-list-buffers (&optional files-only)
"Display a list of names of existing buffers.
The list is displayed in a buffer named `*Buffer List*'.
Note that buffers with names starting with spaces are omitted.
Non-null optional arg FILES-ONLY means mention only file buffers.
For more information, see the function `buffer-menu'."
(interactive "P")
(switch-to-buffer (list-buffers-noselect files-only)))
Which is the same function as before, only in the current window.
Solution 7 - Emacs
I highly recommend bs.el from http://www.geekware.de/software/emacs/ Install it and:
(require 'bs)
(add-hook 'bs-mode-hook 'turn-on-font-lock)
(global-set-key "\C-x\C-b" 'bs-show)
It manages buffers and window configuration in the right way, so everything requires minimum number of keystrokes.
Solution 8 - Emacs
Not sure where I got this but:
;;; Faster buffer switching
(global-set-key [(C tab)] 'buffer-menu)
This makes Ctrl-Tab display all buffers in the current window. You can then navigate to a buffer and hit Enter to visit it.
Solution 9 - Emacs
Another not-what-you-asked-for solution: don't select the desired buffer with the mouse, rather finish typing its name (use tab-completion to reduce keystrokes and increase accuracy), then hit return. The buffer list will disappear, and the new file will be open in the previously active window.