when I execute a command on eshell the prompt switches to the bottom of the window. I have to C-l
a few times to get it back on top. Once again after I execute anything it goes back to the bottom of the window. It is infuriating. How do I make sure the eshell prompt stays on 'top' of the window at all times with the previous commands being hidden above the window. I don't know if 'window' is correct terminology. Please correct me if not.
3 Answers
You can disable the Eshell's scroll feature using:
(add-hook 'eshell-mode-hook
(defun chunyang-eshell-mode-setup ()
(remove-hook 'eshell-output-filter-functions
'eshell-postoutput-scroll-to-bottom)))
Notes, (eval-after-load "eshell" (remove-hook ...))
doesn't work correctly according to my experiment, it simply sets eshell-output-filter-functions
to nil, I don't know the cause. You can also use the Custom interface with:
M-x customize-option RET eshell-output-filter-functions RET
this way works too and is much easier, since this option is available until Eshell has been invoked, if you can't find this option, type M-x eshell
then try again.
-
I do not have eshell-output-filter-functions option available. What should I do? Commented Nov 22, 2016 at 6:45
-
1@JackDawkins I am not sure what's your meaning. Emacs 24.3 has this option, probably some earlier versions has it too. Besides, the option is only available AFTER Eshell has been invoked. Commented Nov 22, 2016 at 6:58
-
Yes, indeed it worked after I invoked eshell. Thanks. Commented Nov 22, 2016 at 7:06
-
Well it goes back to doing what it did before in the middle of an editing session. scrolls to the bottom. I made sure I 'apply and save' it. Why is this happening? Commented Nov 22, 2016 at 8:01
-
I usually execute clear command in zsh when my workspace gets cluttered. I did the same in eshell. The saved setting gets deleted when I do this it seems Commented Nov 22, 2016 at 8:19
You might check whether eshell-scroll-to-bottom-on-output
is set to nil
. Here's the documentation:
Documentation: Controls whether interpreter output causes window to scroll. If nil, then do not scroll. If t or ‘all’, scroll all windows showing buffer. If ‘this’, scroll only the selected window. If ‘others’, scroll only those that are not the selected window.
-
Where exactly do I change this?. I don't have any customizations for eshell on my .emacs.d/init.el file. Commented Nov 22, 2016 at 6:47
-
If you do
M-x Customize
and then typeeshell
it will take you to the customize screen. Scroll down and you'll see the setting. Or alternately, just put(setq eshell-scroll-to-bottom-on-output nil)
in your init.el file.– mclearCommented Nov 22, 2016 at 7:56 -
It gives me the following four options.1. Do not scroll eshell windows. 2. scroll all windows showing the buffer 3. scroll only the selected window. 4. scroll all windows other than selected. Which one should I choose?. I am confused. Commented Nov 22, 2016 at 8:06
-
Since you don't want to go to the bottom of the window it should be set to 1. do not scroll. Or you can do the
setq
option that I mention above.– mclearCommented Nov 22, 2016 at 20:06
You need to set eshell-scroll-show-maximum-output
to nil
.
Sadly the documentation doesn't really explain the difference to eshell-scroll-to-bottom-on-output
, but its default value is nil
anyway and therefore isn't responsible for the described behaviour. In contrast the default of eshell-scroll-show-maximum-output
is t
.
My understanding is that enabling eshell-scroll-to-bottom-on-output
causes eshell to scroll to the bottom if you have scrolled upwards the buffer and you have a program running which produces some output. It will just scroll in a way though, that the last line will be visible in the buffer, and will not align the last line to the bottom of the window.
An enabled eshell-scroll-show-maximum-output
on the other hand ignores output produced by a third party program when you scroll upwards, but will align the current prompt with the bottom of the window (hence "maximising" the last output) when you issue any kind of input with triggers a new prompt.
-
Please consider elaborating, explaining how this answers the question.– DrewCommented Nov 11, 2020 at 1:53