I'm regularly compiling some C programs and one thing is annoying : after I've compiled, I'm opening a shell with M-x shell ./foo
, but the shell open in place of the source code's window.
I would like the shell buffer to open in place of the compilation window, which I don't really need anymore. Otherwise, it's an overkill.
I've read about this topic open buffer in a specified frame but my emacs lisp competence are not that great and I can't adapt it to my case.
Thanks in advance! I guess I'm not the only one it can help.
EDIT
I've added a screenshot to make things clearer.
Let's call the above window "A" and the below "B". When I call the shell, i.e M-x shell
(I rather use M-x term
but that the same here), A has the focus, which is probably the reason why the shell window open in place of A. I want it to open in place of A (originally the compilation window).
M-x shell
is A or B; after callingM-x shell
, B should become*shell*
or A should become*shell*
. Focus should be in the*shell*
buffer (window A or B) when done.advice
, thedisplay-buffer-alist
,special-display-regexps
, etc. If it were me, I would just copy theshell
function and rename it to something likemy-shell
and I would change(pop-to-buffer buffer)
to whatever floats my boat -- e.g.,(switch-to-buffer buffer)
assuming that I am in the window that I want to contain the*shell*
buffer when I'm done typingM-x my-shell
. I suspect there are already several threads that suggest the other three (3) above-mentioned alternatives.term
, but it is reversed -- since the functionterm
uses(switch-to-buffer "*terminal*")
and perhaps you want(pop-to-buffer "*terminal*")
. To read aboutpop-to-buffer
, typeM-x describe-function RET pop-to-buffer RET
: "Select buffer BUFFER in some window, preferably a different one. BUFFER may be a buffer, a string (a buffer name), or nil. If it is a string not naming an existent buffer, create a buffer with that name. If BUFFER is nil, choose some other buffer. Return the buffer."