<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs/src/lisp.h, branch scratch/ns/surface-stuff</title>
<subtitle>Emacs is the extensible, customizable, self-documenting real-time display editor. 
</subtitle>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/'/>
<entry>
<title>Fix segfaults when byte-compiling with native-compilation</title>
<updated>2021-05-15T17:44:40+00:00</updated>
<author>
<name>Eli Zaretskii</name>
</author>
<published>2021-05-15T17:44:40+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=b5e6dba05fcb4fa1c716dc759f8c4b2561bacaa7'/>
<id>b5e6dba05fcb4fa1c716dc759f8c4b2561bacaa7</id>
<content type='text'>
* src/emacs.c (main): Call 'set_initial_minibuffer_mode' before
entering recursive-exit.
* src/minibuf.c (init_minibuf_once_for_pdumper): Don't call
'set_minibuffer_mode' here...
(set_initial_minibuffer_mode): ... set it in this new function.
(Bug#48446)
* src/lisp.h: Add prototype for 'set_initial_minibuffer_mode'.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/emacs.c (main): Call 'set_initial_minibuffer_mode' before
entering recursive-exit.
* src/minibuf.c (init_minibuf_once_for_pdumper): Don't call
'set_minibuffer_mode' here...
(set_initial_minibuffer_mode): ... set it in this new function.
(Bug#48446)
* src/lisp.h: Add prototype for 'set_initial_minibuffer_mode'.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix loading *.eln files when Emacs is installed via symlinks</title>
<updated>2021-04-17T13:49:16+00:00</updated>
<author>
<name>Eli Zaretskii</name>
</author>
<published>2021-04-17T13:49:16+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=9aa5203b542f0c9ea7d074c6cfde2a28b466f5d1'/>
<id>9aa5203b542f0c9ea7d074c6cfde2a28b466f5d1</id>
<content type='text'>
* src/emacs.c (real_filename, set_invocation_vars)
(init_vars_for_load): Functions deleted; callers adjusted.
(init_cmdargs): Put back all the code which was extracted into
set_invocation_vars.
(load_pdump_find_executable): Make sure the return value has any
symlinks in it expanded.
(load_pdump): Accept only 2 arguments, not 3.  Determine both the
file name of the Emacs executable and of the dump file in
synchronized manner, so that if we decided to look for the dump
file in its hardcoded installation directory, the directory of the
Emacs executable will also be where we expect it to be installed.
Pass only 2 arguments to pdumper_load.  (Bug#47800)  (Bug#44128)
* src/pdumper.c (dump_do_dump_relocation): Use emacs_execdir
instead of Vinvocation_directory to produce absolute file names of
*.eln files that are recorded in the pdumper file.  Pass the full
.eln file name to fixup_eln_load_path.
(pdumper_set_emacs_execdir) [HAVE_NATIVE_COMP]: New function.
(pdumper_load) [HAVE_NATIVE_COMP]: Call pdumper_set_emacs_execdir.
* src/comp.c (fixup_eln_load_path): Use Fsubstring_no_properties
instead of Fsubstring.  No need to cons a file name, as the caller
already did that.  Use explicit const string to avoid "magic"
values.

* lisp/startup.el (normal-top-level): Use expand-file-name instead
of concat.  Decode comp-eln-load-path and expand-file-name its
members.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/emacs.c (real_filename, set_invocation_vars)
(init_vars_for_load): Functions deleted; callers adjusted.
(init_cmdargs): Put back all the code which was extracted into
set_invocation_vars.
(load_pdump_find_executable): Make sure the return value has any
symlinks in it expanded.
(load_pdump): Accept only 2 arguments, not 3.  Determine both the
file name of the Emacs executable and of the dump file in
synchronized manner, so that if we decided to look for the dump
file in its hardcoded installation directory, the directory of the
Emacs executable will also be where we expect it to be installed.
Pass only 2 arguments to pdumper_load.  (Bug#47800)  (Bug#44128)
* src/pdumper.c (dump_do_dump_relocation): Use emacs_execdir
instead of Vinvocation_directory to produce absolute file names of
*.eln files that are recorded in the pdumper file.  Pass the full
.eln file name to fixup_eln_load_path.
(pdumper_set_emacs_execdir) [HAVE_NATIVE_COMP]: New function.
(pdumper_load) [HAVE_NATIVE_COMP]: Call pdumper_set_emacs_execdir.
* src/comp.c (fixup_eln_load_path): Use Fsubstring_no_properties
instead of Fsubstring.  No need to cons a file name, as the caller
already did that.  Use explicit const string to avoid "magic"
values.

* lisp/startup.el (normal-top-level): Use expand-file-name instead
of concat.  Decode comp-eln-load-path and expand-file-name its
members.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'savannah/master' into native-comp</title>
<updated>2021-03-25T15:29:07+00:00</updated>
<author>
<name>Andrea Corallo</name>
</author>
<published>2021-03-25T15:29:07+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=c6c7b30e4b46bf0c8ac5e77546d3938e79f14d56'/>
<id>c6c7b30e4b46bf0c8ac5e77546d3938e79f14d56</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Prevent open minibuffers getting lost when their frame gets deleted</title>
<updated>2021-03-21T16:54:31+00:00</updated>
<author>
<name>Alan Mackenzie</name>
</author>
<published>2021-03-21T16:54:31+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=7c2ebf6e23663fdc7b1880a4d7caeadc8c47c00e'/>
<id>7c2ebf6e23663fdc7b1880a4d7caeadc8c47c00e</id>
<content type='text'>
This happened with minibuffer-follows-selected-frame set to t.

* doc/emacs/mini.texi (Basic Minibuffer): State where a command's action takes
place when a minibuffer's frame has been deleted.

* lisp/window.el (window--before-delete-windows, record-window-buffer): Take
into account that minibuffers are now recorded on w-&gt;prev_buffers field.

* src/fns.c (merge_c): New version of `merge' taking a C function, rather than
a Lisp function as the comparison function.

* src/frame.c (do_switch_frame): Pass arguments sf and for_deletion to
move_minibuffers_onnto_frame.

* src/lisp.h (top level): Declare merge_c and
move_minibuffers_onto_selected_frame.

* src/minibuf.c (MB_frame): New Lisp_Object recording the minibuffer's frame.
(choose_minibuf_frame): Remove all code except that which sets minibuf_window
to the current frame's minibuffer.
(minibuffer_ent_greater): New comparison function, passed to merge_c.
(zip_minibuffer_stacks): New function.
(move_minibuffers_onto_frame): Renamed from `move_minibuffer_onto_frame' given
two arguments, the old frame and for_deletion, and simplified.  Minibuffers
are now stacked in the mini-window's -&gt;prev_buffers field.
(read_minibuf): Several detailed amendments.
(exp_MB_frame): New Lisp_Object, the expired minibuffer's frame.
(read_minibuf_unwind): Search for the expired minibuffer's frame, rather than
taking it from (unreliable) variables.  Switch temporarily to this frame for
tidying up operations.
(minibuffer_unwind): New function which pops a stacked minibuffer.
(syms_of_minibuf): Call staticpro for the two new Lisp variables.

* src/window.c (Fset_window_configuration): Don't record minibuffers with
record-window-buffer.

* src/xdisp.c (gui_consider_frame_title): Remove redundant Fselect_window,
which caused an unwanted frame switch.  Amend the arguments to
format_mode_line_unwind_data to match.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This happened with minibuffer-follows-selected-frame set to t.

* doc/emacs/mini.texi (Basic Minibuffer): State where a command's action takes
place when a minibuffer's frame has been deleted.

* lisp/window.el (window--before-delete-windows, record-window-buffer): Take
into account that minibuffers are now recorded on w-&gt;prev_buffers field.

* src/fns.c (merge_c): New version of `merge' taking a C function, rather than
a Lisp function as the comparison function.

* src/frame.c (do_switch_frame): Pass arguments sf and for_deletion to
move_minibuffers_onnto_frame.

* src/lisp.h (top level): Declare merge_c and
move_minibuffers_onto_selected_frame.

* src/minibuf.c (MB_frame): New Lisp_Object recording the minibuffer's frame.
(choose_minibuf_frame): Remove all code except that which sets minibuf_window
to the current frame's minibuffer.
(minibuffer_ent_greater): New comparison function, passed to merge_c.
(zip_minibuffer_stacks): New function.
(move_minibuffers_onto_frame): Renamed from `move_minibuffer_onto_frame' given
two arguments, the old frame and for_deletion, and simplified.  Minibuffers
are now stacked in the mini-window's -&gt;prev_buffers field.
(read_minibuf): Several detailed amendments.
(exp_MB_frame): New Lisp_Object, the expired minibuffer's frame.
(read_minibuf_unwind): Search for the expired minibuffer's frame, rather than
taking it from (unreliable) variables.  Switch temporarily to this frame for
tidying up operations.
(minibuffer_unwind): New function which pops a stacked minibuffer.
(syms_of_minibuf): Call staticpro for the two new Lisp variables.

* src/window.c (Fset_window_configuration): Don't record minibuffers with
record-window-buffer.

* src/xdisp.c (gui_consider_frame_title): Remove redundant Fselect_window,
which caused an unwanted frame switch.  Amend the arguments to
format_mode_line_unwind_data to match.
</pre>
</div>
</content>
</entry>
<entry>
<title>Do not load native code when `load' is explicitly called on a .elc file</title>
<updated>2021-03-19T09:23:41+00:00</updated>
<author>
<name>Andrea Corallo</name>
</author>
<published>2021-03-19T09:23:41+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=b3ad62f8a35617366886be2a86e8641282824adf'/>
<id>b3ad62f8a35617366886be2a86e8641282824adf</id>
<content type='text'>
	* src/lread.c (Fload): Do not load native code when `load' is
	explicitly called on a .elc file.
	(Flocate_file_internal): Update 'openp' call sites.
	(maybe_swap_for_eln): Add new 'no_native' parameter.
	(openp): Likewise + update 'maybe_swap_for_eln' and 'openp' call
	sites.
	* src/lisp.h: Update 'openp' signature.
	* src/w32proc.c (sys_spawnve): Update 'openp' call sites.
	* src/w32.c (check_windows_init_file): Likewise.
	* src/sound.c (Fplay_sound_internal): Likewise.
	* src/process.c (Fmake_process): Likewise.
	* src/image.c (image_create_bitmap_from_file)
	(image_find_image_fd): Likewise.
	* src/emacs.c (set_invocation_vars): Likewise.
	* src/charset.c (load_charset_map_from_file): Likewise.
	* src/callproc.c (call_process): Likewise.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	* src/lread.c (Fload): Do not load native code when `load' is
	explicitly called on a .elc file.
	(Flocate_file_internal): Update 'openp' call sites.
	(maybe_swap_for_eln): Add new 'no_native' parameter.
	(openp): Likewise + update 'maybe_swap_for_eln' and 'openp' call
	sites.
	* src/lisp.h: Update 'openp' signature.
	* src/w32proc.c (sys_spawnve): Update 'openp' call sites.
	* src/w32.c (check_windows_init_file): Likewise.
	* src/sound.c (Fplay_sound_internal): Likewise.
	* src/process.c (Fmake_process): Likewise.
	* src/image.c (image_create_bitmap_from_file)
	(image_find_image_fd): Likewise.
	* src/emacs.c (set_invocation_vars): Likewise.
	* src/charset.c (load_charset_map_from_file): Likewise.
	* src/callproc.c (call_process): Likewise.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'savannah/master' into native-comp</title>
<updated>2021-02-17T21:26:28+00:00</updated>
<author>
<name>Andrea Corallo</name>
</author>
<published>2021-02-17T21:26:28+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=f92bb788a073c6b3ca7f188e0edea714598193fd'/>
<id>f92bb788a073c6b3ca7f188e0edea714598193fd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert the bit about command_modes in previous patch set</title>
<updated>2021-02-14T12:57:59+00:00</updated>
<author>
<name>Lars Ingebrigtsen</name>
</author>
<published>2021-02-14T12:57:59+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=8cdb61679e169a68829a3122d4eda7139199f7ee'/>
<id>8cdb61679e169a68829a3122d4eda7139199f7ee</id>
<content type='text'>
* src/data.c (Fcommand_modes): Remove the subr bit -- it's not
necessary since it can just use a predicate.
* src/lisp.h (GCALIGNED_STRUCT): Remove command_modes.

* src/lread.c (defsubr): Remove command_modes.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/data.c (Fcommand_modes): Remove the subr bit -- it's not
necessary since it can just use a predicate.
* src/lisp.h (GCALIGNED_STRUCT): Remove command_modes.

* src/lread.c (defsubr): Remove command_modes.
</pre>
</div>
</content>
</entry>
<entry>
<title>Extend the syntax of `interactive' to list applicable modes</title>
<updated>2021-02-14T12:21:24+00:00</updated>
<author>
<name>Lars Ingebrigtsen</name>
</author>
<published>2021-02-14T12:21:24+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=58e0c8ee86e2c36245f1c5a1483f1c73600b4914'/>
<id>58e0c8ee86e2c36245f1c5a1483f1c73600b4914</id>
<content type='text'>
* doc/lispref/commands.texi (Using Interactive): Document the
extended `interactive' form.
* doc/lispref/loading.texi (Autoload): Document list-of-modes
form.

* lisp/emacs-lisp/autoload.el (make-autoload): Pick the list of
modes from `interactive' out of the functions.

* lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Allow for the
extended `interactive' form.

* src/callint.c (Finteractive): Document the extended form.

* src/data.c (Finteractive_form): Return the interactive form in
the old format (even when there's an extended `interactive') to
avoid having other parts of Emacs be aware of this.
(Fcommand_modes): New defun.

* src/emacs-module.c (GCALIGNED_STRUCT): Allow for modules to
return command modes.

* src/lisp.h: New function module_function_command_modes.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* doc/lispref/commands.texi (Using Interactive): Document the
extended `interactive' form.
* doc/lispref/loading.texi (Autoload): Document list-of-modes
form.

* lisp/emacs-lisp/autoload.el (make-autoload): Pick the list of
modes from `interactive' out of the functions.

* lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Allow for the
extended `interactive' form.

* src/callint.c (Finteractive): Document the extended form.

* src/data.c (Finteractive_form): Return the interactive form in
the old format (even when there's an extended `interactive') to
avoid having other parts of Emacs be aware of this.
(Fcommand_modes): New defun.

* src/emacs-module.c (GCALIGNED_STRUCT): Allow for modules to
return command modes.

* src/lisp.h: New function module_function_command_modes.
</pre>
</div>
</content>
</entry>
<entry>
<title>Make recursive minibuffers and recursive edits work together</title>
<updated>2021-02-11T21:37:45+00:00</updated>
<author>
<name>Alan Mackenzie</name>
</author>
<published>2021-02-11T21:37:45+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=203e61ff837128b397eb313a5bb1b703f0eae0ec'/>
<id>203e61ff837128b397eb313a5bb1b703f0eae0ec</id>
<content type='text'>
* lisp/minibuffer.el (exit-minibuffer): When in a minibuffer, throw an error
should the command loop nesting level be wrong.

* src/lisp.h (minibuffer_quit_level): declare as an extern.
(command_loop_level): Move definition from src/window.h

* src/window.h (command_loop_level): move definition to src/lisp.h.

* src/eval.c (minibuffer_quit_level): Move this variable to file level from
being a static inside internal_catch.
(internal_catch): Simplify the logic.

* src/minibuf.c (Vcommand_loop_level_list): New variable.
(move_minibuffer_onto_frame): Set the major mode of  *Minibuf-0*.
(Fminibuffer_innermost_command_loop_p): New primitive.
(Fabort_minibuffers): Check the command loop level before throwing t to 'exit,
and set minibuffer_quit_level too.
(read_minibuf): New variable calling_window.
Before stacking up minibuffers on the current mini-window, check that the
mini-window is not the current one.
Do not call choose_minibuf_frame from read_minibuf's unwinding process.
Bind calling_frame and calling_window over the recursive edit.
Set the new minibuffer's major mode directly.
Remove the switching away from the minibuffer after the recursive edit.
(get_minibuffer): Record the command loop level in new variable
Vcommand_loop_level_list.  No longer set the major mode of a returned
minibuffer.
(minibuf_c_loop_level): New function.
(read_minibuf_unwind): New variables calling_frame, calling_window are unbound
from the binding stack.  Remove old variable `window', which could not be set
reliably to the expired mini-window.
The expired minibuffer is determined as the nth in the list, rather than the
contents of the current or previous mini-window.
Switch the current window away from the mini-window here (moved from
read_minibuf).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lisp/minibuffer.el (exit-minibuffer): When in a minibuffer, throw an error
should the command loop nesting level be wrong.

* src/lisp.h (minibuffer_quit_level): declare as an extern.
(command_loop_level): Move definition from src/window.h

* src/window.h (command_loop_level): move definition to src/lisp.h.

* src/eval.c (minibuffer_quit_level): Move this variable to file level from
being a static inside internal_catch.
(internal_catch): Simplify the logic.

* src/minibuf.c (Vcommand_loop_level_list): New variable.
(move_minibuffer_onto_frame): Set the major mode of  *Minibuf-0*.
(Fminibuffer_innermost_command_loop_p): New primitive.
(Fabort_minibuffers): Check the command loop level before throwing t to 'exit,
and set minibuffer_quit_level too.
(read_minibuf): New variable calling_window.
Before stacking up minibuffers on the current mini-window, check that the
mini-window is not the current one.
Do not call choose_minibuf_frame from read_minibuf's unwinding process.
Bind calling_frame and calling_window over the recursive edit.
Set the new minibuffer's major mode directly.
Remove the switching away from the minibuffer after the recursive edit.
(get_minibuffer): Record the command loop level in new variable
Vcommand_loop_level_list.  No longer set the major mode of a returned
minibuffer.
(minibuf_c_loop_level): New function.
(read_minibuf_unwind): New variables calling_frame, calling_window are unbound
from the binding stack.  Remove old variable `window', which could not be set
reliably to the expired mini-window.
The expired minibuffer is determined as the nth in the list, rather than the
contents of the current or previous mini-window.
Switch the current window away from the mini-window here (moved from
read_minibuf).
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'savannah/master' into HEAD</title>
<updated>2021-02-10T20:56:55+00:00</updated>
<author>
<name>Andrea Corallo</name>
</author>
<published>2021-02-10T20:56:55+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=2fcb85c3e780f1f2871ce0f300cfaffce9836eb0'/>
<id>2fcb85c3e780f1f2871ce0f300cfaffce9836eb0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
