If you're someone who lives in emacs like I do, then you probably rely on shell buffers (
M-x shell) to interact with the operating system. That way you can search through output and edit history commands in a natural way that a mere terminal doesn't allow.
But occasionally I've been left kicking the wall after accidentally killing a shell buffer that had lots of work in it that I still needed. It really hurts when you accidentally kill a buffer where you're waiting for a long-running process to finish. To prevent industrial accidents like that, add a guard to
kill-buffer-hook in your .emacs file:
(string= "Shell" mode-name)
(format "Kill buffer `%s'? " (buffer-name)))
If you really do want to kill the shell buffer, type "yes", and you're done. But it will save you some grief if you just hit
C-x kin the wrong buffer.
What's more common for me is that my eyes are on a file that I want to refresh or replace with
C-x C-v (find-alternate-file), but the cursor is in a shell buffer. In that case, emacs will indeed load the alternate file, and you'll be asked "Kill buffer ` **lose**'?" Say no, then you'll have
C-x bto " **lose**" (note the leading space), and rename the shell buffer to "*shell*" or whatever you had previously named it.