GNU bug report logs -
#72331
29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only)
Previous Next
Reported by: Jared Finder <jared <at> finder.org>
Date: Sun, 28 Jul 2024 05:11:02 UTC
Severity: normal
Found in version 29.4
Fixed in version 30.1
Done: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 72331 in the body.
You can then email your comments to 72331 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Sun, 28 Jul 2024 05:11:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Jared Finder <jared <at> finder.org>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sun, 28 Jul 2024 05:11:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
show a scroll bar unless the frame also has the horizontal-scroll-bars
frame parameter set. This only happens on MacOS, on Linux and Windows
everything behaves as I would expect.
To reproduce, define the following function:
(defun bug-report-toggle-buffer-horizontal-scroll-bar ()
"Like `toggle-scroll-bar', but for just the current buffer.
And for horizontal scroll bars. I guess it's acutally very
different."
(interactive)
(setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
(set-window-buffer (selected-window) (current-buffer)))
Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
and observe that on MacOS space gets reserved for the horizontal scroll
bar but no scroll bar is rendered. Finally, run M-x
horizontal-scroll-bar-mode and observe that now the horizontal scroll
bar is properly shown and hidden.
I also tested this on master and observed the same behavior.
In GNU Emacs 29.4 (build 1, aarch64-apple-darwin21.6.0, NS
appkit-2113.60 Version 12.6.6 (Build 21G646)) of 2024-07-24 built on
armbob.lan
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.5
Configured using:
'configure --with-ns '--enable-locallisppath=/Library/Application
Support/Emacs/${version}/site-lisp:/Library/Application
Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
-DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'
Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: ELisp/l
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr vc-git diff-mode easy-mmode vc-dispatcher
cl-extra cl-print byte-opt gv bytecomp byte-compile thingatpt help-fns
radix-tree help-mode dabbrev emacsbug message mailcap yank-media puny
dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg
rfc6068 epg-config gnus-util text-property-search time-date subr-x
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd
fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns multi-tty
make-network-process emacs)
Memory information:
((conses 16 60165 20431)
(symbols 48 6527 0)
(strings 32 20561 2286)
(string-bytes 1 561629)
(vectors 16 13714)
(vector-slots 8 194672 14038)
(floats 8 33 135)
(intervals 56 399 17)
(buffers 984 14))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Sun, 04 Aug 2024 08:35:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 72331 <at> debbugs.gnu.org (full text, mbox):
> Date: Sat, 27 Jul 2024 22:10:06 -0700
> From: Jared Finder via "Bug reports for GNU Emacs,
> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>
> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
> show a scroll bar unless the frame also has the horizontal-scroll-bars
> frame parameter set. This only happens on MacOS, on Linux and Windows
> everything behaves as I would expect.
>
> To reproduce, define the following function:
>
> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
> "Like `toggle-scroll-bar', but for just the current buffer.
> And for horizontal scroll bars. I guess it's acutally very
> different."
> (interactive)
> (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
> (set-window-buffer (selected-window) (current-buffer)))
>
> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
> and observe that on MacOS space gets reserved for the horizontal scroll
> bar but no scroll bar is rendered. Finally, run M-x
> horizontal-scroll-bar-mode and observe that now the horizontal scroll
> bar is properly shown and hidden.
>
> I also tested this on master and observed the same behavior.
Thanks.
Could some macOS user please look into this?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Mon, 05 Aug 2024 13:45:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 72331 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii <eliz <at> gnu.org> writes:
>> Date: Sat, 27 Jul 2024 22:10:06 -0700
>> From: Jared Finder via "Bug reports for GNU Emacs,
>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>
>> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
>> show a scroll bar unless the frame also has the horizontal-scroll-bars
>> frame parameter set. This only happens on MacOS, on Linux and Windows
>> everything behaves as I would expect.
>>
>> To reproduce, define the following function:
>>
>> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
>> "Like `toggle-scroll-bar', but for just the current buffer.
>> And for horizontal scroll bars. I guess it's acutally very
>> different."
>> (interactive)
>> (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
>> (set-window-buffer (selected-window) (current-buffer)))
>>
>> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
>> and observe that on MacOS space gets reserved for the horizontal scroll
>> bar but no scroll bar is rendered. Finally, run M-x
>> horizontal-scroll-bar-mode and observe that now the horizontal scroll
>> bar is properly shown and hidden.
>>
>> I also tested this on master and observed the same behavior.
>
> Thanks.
>
> Could some macOS user please look into this?
Same for vertical-scroll-bar, BTW. From reading the code and setting a
breakpoint in ns_set_horizontal_scroll_bar, I'd say it's the definition
of these macros in nsterm.h:
/* Compute pixel size for vertical scroll bars. */
#define NS_SCROLL_BAR_WIDTH(f) \
(FRAME_HAS_VERTICAL_SCROLL_BARS (f) \
? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0 \
? FRAME_CONFIG_SCROLL_BAR_WIDTH (f) \
: (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f))) \
: 0)
/* Compute pixel size for horizontal scroll bars. */
#define NS_SCROLL_BAR_HEIGHT(f) \
(FRAME_HAS_HORIZONTAL_SCROLL_BARS (f) \
? rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0 \
? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) \
: (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f))) \
: 0)
Both check FRAME_HAS_H/V_SCROLL_BARS which in this case results in width
or height being 0, which is a bit small.
A change like the one below makes the horizontal scroll bar visible with
Jared's test function.
1 file changed, 4 insertions(+), 1 deletion(-)
src/nsterm.m | 5 ++++-
modified src/nsterm.m
@@ -5167,7 +5167,10 @@ Function modeled after x_draw_glyph_string_box ().
window_box (window, ANY_AREA, &window_x, 0, &window_width, 0);
left = window_x;
width = window_width;
- height = NS_SCROLL_BAR_HEIGHT (f);
+ // height = NS_SCROLL_BAR_HEIGHT (f);
+ height = rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0
+ ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f)
+ : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)));
top = WINDOW_SCROLL_BAR_AREA_Y (window);
r = NSMakeRect (left, top, width, height);
If that's the right thing (plus a corresponding change for vertical
scroll bars) I don't know without studying the code and docs, and what
other platforms do.
Maybe Po Lu can help (CC'd).
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Thu, 08 Aug 2024 06:48:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 72331 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
> Eli Zaretskii <eliz <at> gnu.org> writes:
>
>>> Date: Sat, 27 Jul 2024 22:10:06 -0700
>>> From: Jared Finder via "Bug reports for GNU Emacs,
>>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>>
>>> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
>>> show a scroll bar unless the frame also has the horizontal-scroll-bars
>>> frame parameter set. This only happens on MacOS, on Linux and Windows
>>> everything behaves as I would expect.
>>>
>>> To reproduce, define the following function:
>>>
>>> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
>>> "Like `toggle-scroll-bar', but for just the current buffer.
>>> And for horizontal scroll bars. I guess it's acutally very
>>> different."
>>> (interactive)
>>> (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
>>> (set-window-buffer (selected-window) (current-buffer)))
>>>
>>> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
>>> and observe that on MacOS space gets reserved for the horizontal scroll
>>> bar but no scroll bar is rendered. Finally, run M-x
>>> horizontal-scroll-bar-mode and observe that now the horizontal scroll
>>> bar is properly shown and hidden.
>>>
>>> I also tested this on master and observed the same behavior.
>>
>> Thanks.
>>
>> Could some macOS user please look into this?
>
> Same for vertical-scroll-bar, BTW. From reading the code and setting a
> breakpoint in ns_set_horizontal_scroll_bar, I'd say it's the definition
> of these macros in nsterm.h:
>
> /* Compute pixel size for vertical scroll bars. */
> #define NS_SCROLL_BAR_WIDTH(f) \
> (FRAME_HAS_VERTICAL_SCROLL_BARS (f) \
> ? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0 \
> ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f) \
> : (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f))) \
> : 0)
>
> /* Compute pixel size for horizontal scroll bars. */
> #define NS_SCROLL_BAR_HEIGHT(f) \
> (FRAME_HAS_HORIZONTAL_SCROLL_BARS (f) \
> ? rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0 \
> ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) \
> : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f))) \
> : 0)
>
> Both check FRAME_HAS_H/V_SCROLL_BARS which in this case results in width
> or height being 0, which is a bit small.
>
> A change like the one below makes the horizontal scroll bar visible with
> Jared's test function.
I think the fix is the attached patch. Jared, could you please try it?
[0001-NS-Fix-scroll-bar-setting-code-bug-72331.patch (text/x-patch, attachment)]
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Fri, 09 Aug 2024 03:48:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 72331 <at> debbugs.gnu.org (full text, mbox):
On 2024-08-07 23:45, Gerd Möllmann wrote:
> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>
> I think the fix is the attached patch. Jared, could you please try it?
The patch fully worked for me, both in the test case I provided and my
real use case.
Thanks!
-- MJF
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#72331
; Package
emacs
.
(Fri, 09 Aug 2024 05:25:01 GMT)
Full text and
rfc822 format available.
Message #20 received at 72331 <at> debbugs.gnu.org (full text, mbox):
Jared Finder <jared <at> finder.org> writes:
> On 2024-08-07 23:45, Gerd Möllmann wrote:
>> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>>
>>> Eli Zaretskii <eliz <at> gnu.org> writes:
>> I think the fix is the attached patch. Jared, could you please try
>> it?
>
> The patch fully worked for me, both in the test case I provided and my
> real use case.
>
> Thanks!
>
> -- MJF
Thanks for testing! Pushed to emacs-30, and closing.
bug marked as fixed in version 30.1, send any further explanations to
72331 <at> debbugs.gnu.org and Jared Finder <jared <at> finder.org>
Request was from
Gerd Möllmann <gerd.moellmann <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Fri, 09 Aug 2024 05:26:02 GMT)
Full text and
rfc822 format available.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sat, 07 Sep 2024 11:24:08 GMT)
Full text and
rfc822 format available.
This bug report was last modified 285 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.