> Yes. If in 'hide-minibuffer-scrollbar' I replace '(minibuffer-window)' with
> 'nil', the scratch buffer has no scroll bars and they don't reappear even
> if the buffer become longer than the window height. They are only
> re-enabled if I open another buffer in that window, and then they persist.
Ahh... I should have asked you that so it's good you noticed it.
This shows that the behavior is not minibuffer window specific.
> No, messages are shown at startup without the scroll bars being shown. if I
> do M-x or M-: or anything that moves the point to the minibuffer, then they
> are re-enabled.
So showing another buffer in the minibuffer window reenables the
scroll bars. This is consistent with the first observation.
The behavior (which I would call a bug) is caused by set_window_buffer
when called with keep_margins_p nil and is completely unrelated to
whether you do it in emacsclient or in a "normal" session. That is if
I evaluate with emacs -Q
(set-window-scroll-bars (minibuffer-window) 0 nil)
and then type M-x, I get the scroll bars back just as you do. The
behavior is described in the Elisp manual on 'set-window-scroll-bars'
The values specified here may be later overridden by invoking
‘set-window-buffer’ (*note Buffers and Windows::) on WINDOW with
its KEEP-MARGINS argument ‘nil’ or omitted.
but I consistently forget about it.
If people agree that this is a bug, we can try to find a more general
fix. Otherwise, I'll fix the minibuffer window scroll bars with the
help of a separate variable (I have written the code some time ago and
would "only" have to find it now).
As a temporary workaround you can try to set the buffer local values
of 'scroll-bar-width' to zero in all buffers that might eventually
show up in the minibuffer window, for example, thusly
(progn
(set-window-scroll-bars (minibuffer-window) 0 nil)
(with-current-buffer (get-buffer-create " *Echo Area 0*")
(setq scroll-bar-width 0))
(with-current-buffer (get-buffer-create " *Echo Area 1*")
(setq scroll-bar-width 0))
(with-current-buffer (get-buffer-create " *Minibuf-0*")
(setq scroll-bar-width 0))
(with-current-buffer (get-buffer-create " *Minibuf-1*")
(setq scroll-bar-width 0)))
This should work as long as you don't enable recursive minibuffers.
martin