<feed xmlns='http://www.w3.org/2005/Atom'>
<title>chemacs.git/src/buffer.c, branch devmain</title>
<subtitle>emacs
</subtitle>
<id>http://cgit.adnoto.dev/chemacs.git/atom?h=devmain</id>
<link rel='self' href='http://cgit.adnoto.dev/chemacs.git/atom?h=devmain'/>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/'/>
<updated>2026-05-24T02:18:52Z</updated>
<entry>
<title>New function memory_full_up</title>
<updated>2026-05-24T02:18:52Z</updated>
<author>
<name>Paul Eggert</name>
<email>eggert@cs.ucla.edu</email>
</author>
<published>2026-05-20T01:39:09Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=1eb2e052bb55184d62c1dec265f6d327be4e9113'/>
<id>urn:sha1:1eb2e052bb55184d62c1dec265f6d327be4e9113</id>
<content type='text'>
* src/alloc.c (memory_full_up): New function.  Replace all callers
of memory_full (SIZE_MAX) with callers to this function.
This simplifies callers and should make future changes easier.
It also saves a whopping 296 bytes in executable size
with gcc 16.1.1 20260515 (Red Hat 16.1.1-2) x86-64.
</content>
</entry>
<entry>
<title>; Fix the documentation of 'overlays-in' etc.</title>
<updated>2026-02-28T13:36:07Z</updated>
<author>
<name>Eli Zaretskii</name>
<email>eliz@gnu.org</email>
</author>
<published>2026-02-28T13:36:07Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=0d017fc7ce83006eee93402ba0619b5d21906672'/>
<id>urn:sha1:0d017fc7ce83006eee93402ba0619b5d21906672</id>
<content type='text'>
* src/buffer.c (Foverlays_in):
* lisp/subr.el (remove-overlays):
* doc/lispref/display.texi (Finding Overlays, Managing Overlays):
* etc/NEWS: Improve the documentation of recent changes in
behavior of 'overlays-in' and 'remove-overlays'.  (Bug#80242)
</content>
</entry>
<entry>
<title>Adjust documentation to changes in 'overlays-in' and 'overlays-at'</title>
<updated>2026-02-14T09:37:52Z</updated>
<author>
<name>Eli Zaretskii</name>
<email>eliz@gnu.org</email>
</author>
<published>2026-02-14T09:37:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=6aefaca819a5f89fd29bd53835d1a1fa9fd595cf'/>
<id>urn:sha1:6aefaca819a5f89fd29bd53835d1a1fa9fd595cf</id>
<content type='text'>
* src/buffer.c (overlays_in): Fix commentary to match the code.
(Foverlays_in, Foverlays_at): Doc fixes.  (Bug#80242)

* test/src/buffer-tests.el (test-overlays-at-2): Add one test.

* doc/lispref/display.texi (Finding Overlays): Update and improve
the documentation of 'overlays-in' and 'overlays-at'.

* etc/NEWS: Announce the changes.
</content>
</entry>
<entry>
<title>Move the Lisp_Fwd.bufoffset field back to the union</title>
<updated>2026-02-12T17:51:51Z</updated>
<author>
<name>Helmut Eller</name>
<email>eller.helmut@gmail.com</email>
</author>
<published>2024-06-24T08:06:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=40f696757c2afe15a583945992955429b00de563'/>
<id>urn:sha1:40f696757c2afe15a583945992955429b00de563</id>
<content type='text'>
* src/lisp.h (struct Lisp_Fwd): With the predicate enum, we can now pack
the offset and the predicate into a one-word struct.
(XBUFFER_OFFSET): Use the new field name.
* src/buffer.c (DEFVAR_PER_BUFFER): Create the one-word struct.
* src/data.c (store_symval_forwarding): Use the new field name.
</content>
</entry>
<entry>
<title>Introduce an enum Lisp_Fwd_Predicate</title>
<updated>2026-02-12T17:51:51Z</updated>
<author>
<name>Helmut Eller</name>
<email>eller.helmut@gmail.com</email>
</author>
<published>2024-06-23T19:46:16Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=9008e6a9d7f041875c2fe9f58d5b5b44e84f649f'/>
<id>urn:sha1:9008e6a9d7f041875c2fe9f58d5b5b44e84f649f</id>
<content type='text'>
Using an enum instead of a symbol makes it obvious that this field is
of no concern to the GC.

* src/lisp.h (enum Lisp_Fwd_Predicate): New.
(struct Lisp_Fwd): Use it instead of a symbol.
* src/buffer.c (DEFVAR_PER_BUFFER): Create the necessary enum constant
instead of a symbol.
* src/data.c (check_fwd_predicate, check_choice): New helpers.
(store_symval_forwarding): Use it.
</content>
</entry>
<entry>
<title>Remove struct Lisp_Buffer_Objfwd</title>
<updated>2026-02-12T17:51:51Z</updated>
<author>
<name>Helmut Eller</name>
<email>eller.helmut@gmail.com</email>
</author>
<published>2024-06-23T15:25:21Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=3442fdd2a2d9702bf9ed856b9bf0a0b1d0992747'/>
<id>urn:sha1:3442fdd2a2d9702bf9ed856b9bf0a0b1d0992747</id>
<content type='text'>
* src/lisp.h (struct Lisp_Buffer_Objfwd): Deleted.
(struct Lisp_Fwd): Add the fields bufoffset and bufpredicate.
Make the type a 1-byte bitfield so that the entire struct still
fits in two words.
(XBUFFER_OFFSET): Renamed from XBUFFER_OBJFWD.
* src/buffer.c (DEFVAR_PER_BUFFER, defvar_per_buffer)
(buffer_local_value): Update accordingly.
* src/data.c (do_symval_forwarding, store_symval_forwarding)
(set_internal, default_value, set_default_internal)
(Fmake_local_variable, Fkill_local_variable, Flocal_variable_): Use
XBUFFER_OFFSET.
</content>
</entry>
<entry>
<title>Introduce a struct Lisp_Fwd</title>
<updated>2026-02-12T17:51:50Z</updated>
<author>
<name>Helmut Eller</name>
<email>eller.helmut@gmail.com</email>
</author>
<published>2024-06-23T04:39:18Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=10befec978d1f1490f1eb43fd590e9474252063f'/>
<id>urn:sha1:10befec978d1f1490f1eb43fd590e9474252063f</id>
<content type='text'>
This contains the type and an union of Lisp_Objfwd, Lisp_Intfwd etc.
lispfwd is now a pointer to a struct Lisp_Fwd; the void *fwdptr field is
gone.

* src/lisp.h (struct Lisp_Fwd): New.
(Lisp_Intfwd, Lisp_Boolfwd, Lisp_Objfwd, Lisp_Buffer_Objfwd)
(Lisp_Kboard_Objfwd): The type is in in Lisp_Fwd.
(lispwfd): Is now a pointer to struct Lisp_Fwd.
(SYMBOL_BLV, SET_SYMBOL_FWD, XFWDTYPE, BUFFER_OBJFWDP): Update
accordingly.
(defvar_lisp, defvar_lisp_nopro, defvar_bool, defvar_int)
(defvar_kboard): These all take now a Lisp_Fwd.
(DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL, DEFVAR_INT)
(DEFVAR_KBOARD): Update for new types.
* src/lread.c (defvar_int, defvar_bool, defvar_lisp_nopro)
(defvar_lisp, defvar_kboard): Update for new types.
* src/pdumper.c (dump_field_fwd, dump_blv): Update accordingly.
(dump_fwd_int, dump_fwd_bool, dump_fwd_obj, dump_fwd_buffer_obj)
(dump_fwd): Deleted.
* src/buffer.c (DEFVAR_PER_BUFFER, defvar_per_buffer, buffer_local_value)
(set_buffer_internal_1): Update accordingly for new types.
* src/data.c (XBOOLFWD, XKBOARD_OBJFWD, XFIXNUMFWD, XOBJFWD, boundp)
(store_symval_forwarding, swap_in_global_binding)
(swap_in_symval_forwarding, find_symbol_value, set_internal)
(default_value, set_default_internal, make_blv, Fmake_local_variable):
Update accordingly.
</content>
</entry>
<entry>
<title>Make Lisp_Buffer_Objfwd objects const</title>
<updated>2026-02-12T17:51:50Z</updated>
<author>
<name>Helmut Eller</name>
<email>eller.helmut@gmail.com</email>
</author>
<published>2024-06-22T14:43:29Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=ba9a765081873a5caf5053e8b6203b00ef7324e0'/>
<id>urn:sha1:ba9a765081873a5caf5053e8b6203b00ef7324e0</id>
<content type='text'>
The predicate field is always a builtin symbol.  That means we know the
bit pattern at compile-time and they don't change at runtime.

* src/buffer.c (DEFVAR_PER_BUFFER): Create a const struct.
(defvar_per_buffer): Remove predicate and address arguments.
(syms_of_buffer): Instead of &amp;BVAR (current_buffer, foo) use a plain foo
as argument to DEFVAR_PER_BUFFER.

* src/pdumper.c (dump_field_fwd): No more relocs needed for
Lisp_Fwd_Buffer_Obj and we can't apply them in the .rodata section.
</content>
</entry>
<entry>
<title>Make 'overlays_in' use only real EOB (bug#80242)</title>
<updated>2026-02-12T17:48:20Z</updated>
<author>
<name>Stephen Berman</name>
<email>stephen.berman@gmx.net</email>
</author>
<published>2026-02-12T17:48:20Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=f8a25d00ae45a3362b08a999026835fde85f6ef0'/>
<id>urn:sha1:f8a25d00ae45a3362b08a999026835fde85f6ef0</id>
<content type='text'>
This restores the original behavior of 'overlays_in'.  Changes in
this behavior had been made for cases of narrowing, but this
resulted in a regression with uses of 'remove-overlays'.

* src/buffer.c (overlays_in): Change all occurrences of ZV to Z.

* test/src/buffer-tests.el (test-overlays-in-2)
(test-remove-overlays): Adjust expected results to accommodate
changes in 'overlays_in'.
</content>
</entry>
<entry>
<title>Support cons cell for 'line-spacing'</title>
<updated>2026-01-24T11:32:44Z</updated>
<author>
<name>Daniel Mendler</name>
<email>mail@daniel-mendler.de</email>
</author>
<published>2026-01-07T16:39:16Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/chemacs.git/commit/?id=e8f26d554b64ed63fe2b7f110d5247648b7322ed'/>
<id>urn:sha1:e8f26d554b64ed63fe2b7f110d5247648b7322ed</id>
<content type='text'>
* etc/NEWS: Announce the change.
* src/dispextern.h (struct glyph_row): Add
'extra_line_spacing_above' member.
(struct it): Add 'extra_line_spacing_above' member.
* src/frame.h (struct frame): Add 'extra_line_spacing_above'
member.  Update comment for 'extra_line_spacing.'
* src/buffer.c (syms_of_buffer): Update the docstring of
'line-spacing' to describe the cons cell usage.
* src/buffer.h (struct buffer): Update comment for
'extra_line_spacing'.
* src/frame.c (gui_set_line_spacing): Handle cons cell value for
'line-spacing'.  Calculate and set 'extra_line_spacing_above'
for both integer and float pairs.
* src/xdisp.c (init_iterator): Initialize 'extra_line_spacing_above'
from buffer or frame 'line-spacing', handling cons cells for both
integer and float values.
(gui_produce_glyphs): Use 'extra_line_spacing_above' to distribute
spacing between ascent and descent.  Update 'max_extra_line_spacing'
calculation.
(resize_mini_window): Take line spacing into account when resizing the
mini window.  Pass height of a single line to 'grow_mini_window' and
'shrink_mini_window'.
* src/window.c (grow_mini_window, shrink_mini_window): Add unit
argument which defines height of a single line.
* src/window.h (grow_mini_window, shrink_mini_window): Adjust function
prototypes accordingly with unit argument.
* lisp/subr.el (total-line-spacing): New function to calculate total
spacing from a number or cons cell.
(posn-col-row): Use total-line-spacing.
* lisp/simple.el (default-line-height): Use 'total-line-spacing'.
* lisp/textmodes/picture.el (picture-mouse-set-point): Use
'total-line-spacing'.
* lisp/window.el (window-default-line-height): Use
'total-line-spacing'.
(window--resize-mini-window): Take 'line-spacing' into account.
* test/lisp/subr-tests.el (total-line-spacing): New test.
* test/src/buffer-tests.el (test-line-spacing): New test.
* doc/emacs/display.texi (Display Custom): Document that
'line-spacing' can be a cons cell.
(Line Height): Document the new cons cell format for 'line-spacing'
to allow vertical centering.

Co-authored-by: Przemysław Alexander Kamiński &lt;alexander@kaminski.se&gt;
Co-authored-by: Daniel Mendler &lt;mail@daniel-mendler.de&gt;
</content>
</entry>
</feed>
