1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-11 01:11:31 -07:00
Commit graph

50692 commits

Author SHA1 Message Date
Robert Pluim
b7cef00571 ; Fix formatting
* src/process.c (clear_fd_callback_data, delete_write_fd,
delete_keyboard_wait_descriptor): Space before paren.
2025-08-27 11:24:53 +02:00
Eli Zaretskii
ff83b735f9 Fix last change in 'next_element_from_display_vector'
* src/xdisp.c (next_element_from_display_vector): Only switch the
iterator from unibyte to multibyte, never in the other direction,
and not if the original character came from a unibyte buffer.
(Bug#79317)
2025-08-26 16:24:55 +03:00
Eli Zaretskii
21b072c607 Fix use of display-table for mode-line display
* src/xdisp.c (next_element_from_display_vector): Fix handling
non-ASCII characters in display-table cells corresponding to
ASCII characters.  (Bug#79311)
2025-08-25 22:27:10 +03:00
Eli Zaretskii
f884b1acef Fix assertion violations caused by recent redisplay changes
* src/xdisp.c (push_it): Don't rest the string_from_prefix_prop_p
flag.  (Bug#79304)
2025-08-25 20:44:36 +03:00
Eli Zaretskii
0c49f5917f Attempt to fix assertion violations in bug#79304
The following changes make the changes for bug#79275 less
radical, closer to their previous shape, while still fixing
that bug.
* src/xdisp.c (push_prefix_prop, get_it_property): Restore
original code that determined the object and position on it.
(get_line_prefix_it_property): Take FROM_BUFFER from the actual
object of the prefix property.
2025-08-25 18:19:14 +03:00
Mattias Engdegård
308e3ab1db Disallow string data resizing (bug#79784)
Only allow string mutation that is certain not to require string data to
be resized and reallocated: writing bytes into a unibyte string, and
changing ASCII to ASCII in a multibyte string.

This ensures that mutation will never transform a unibyte string to
multibyte, that the size of a string in bytes never changes, and that
the byte offsets of characters remain the same.  Most importantly, it
removes a long-standing obstacle to reform of string representation and
allow for future performance improvements.

* src/data.c (Faset): Disallow resizing string mutation.
* src/fns.c (clear_string_char_byte_cache):
* src/alloc.c (resize_string_data):  Remove.
* test/src/data-tests.el (data-aset-string): New test.
* test/lisp/subr-tests.el (subr--subst-char-in-string):
Skip error cases.
* test/src/alloc-tests.el (aset-nbytes-change):
Remove test that is no longer relevant.
* doc/lispref/strings.texi (Modifying Strings):
* doc/lispref/sequences.texi (Array Functions):
* doc/lispref/text.texi (Substitution):  Update manual.
* etc/NEWS: Announce.
2025-08-24 10:28:27 +02:00
Eli Zaretskii
f3434a4f53 Fix line-prefix display when there's a 'display' string at BOL
* src/xdisp.c (push_it): Reset the 'string_from_prefix_prop_p' flag.
(try_window_id): Disable this optimization if the last unchanged
at-beg row begins with a display or overlay string and there;s a
line/wrap-prefix property on the row.
(push_prefix_prop): Accept an additional argument FROM_BUFFER to
indicate that the prefix property was found on buffer text
underlying a display or overlay property, and set up the position
to pop to accordingly.  Reset the 'string_from_display_prop_p' flag
of the iterator after pushing IT to set up for iterating the
prefix string.
(get_it_property): Use it->string, not it->object, as indication
that prefix property is on a string.
(get_line_prefix_it_property): Accept an additional argument:
pointer to a flag indicating that the prefix property was found on
buffer text underlying a display or overlay property.  Callers
adjusted.
(handle_line_prefix): Use the FROM_BUFFER flag to correctly handle
prefix properties on buffer text at the same position as a display
string.  (Bug#79275)
2025-08-23 11:34:10 +03:00
Mattias Engdegård
c04553f655 Speed up JSON parsing by not maintaining line and column (bug#79192)
We use the current parsing position instead.  The line and column in the
error weren't used (nor very accurate to begin with) and the user can
easily compute them when needed.  The line number calculation is kept
just in case but deprecated, for removal in Emacs 32.

* src/json.c (struct json_parser, json_parser_init): Update parser state.
(json_signal_error): New position computation.
(json_skip_whitespace_internal): Remove.
(is_json_whitespace): New.
(json_skip_whitespace, json_skip_whitespace_if_possible)
(json_parse_unicode, json_parse_string, json_parse_number)
(json_parse_value): Simplify and rewrite for efficiency.
(count_chars, count_newlines)
(string_byte_to_pos, string_byte_to_line)
(buffer_byte_to_pos, buffer_byte_to_line): New.
(Fjson_parse_string, Fjson_parse_buffer): Adapt to new parser state.
* test/src/json-tests.el (json-tests--parse-string-error-pos)
(json-tests--parse-buffer-error-pos, json-parse-error-position): New.
* etc/NEWS: Note deprecation of line and column.
2025-08-21 16:42:45 +02:00
Mattias Engdegård
475a5d56d0 ; * src/lread.c (from_buffer_p): New abstraction. 2025-08-21 15:11:13 +02:00
Spencer Baugh
63662f6cee Signal end-of-file with more correct data
end_of_file_error previously always signaled end-of-file with
load-true-file-name if that was non-nil (and a string).
However, this might be the wrong thing to do; for example, if a
file being loaded calls read on a buffer.

* src/lread.c (end_of_file_error): <source>: New argument; check
it to determine what data to signal with.  (bug#68546)
(read_char_escape, read_char_literal, read_string_literal)
(skip_space_and_comments, read0): Pass source to
end_of_file_error.
2025-08-19 17:00:03 +01:00
Stefan Monnier
888dc2a0b5 Reject invalid error symbols (Bug#76447)
* src/eval.c (signal_or_quit): Signal an error if 'signal' gets called
with an invalid error symbol.
2025-08-17 17:26:09 +02:00
Eli Zaretskii
034d755f2f ; * src/process.c (set_proc_thread): Fix assertion. 2025-08-16 13:28:52 +03:00
Eli Zaretskii
c93be71e45 Make sure 'make-process' locks the process to the current thread
* src/process.c (set_proc_thread): New function.
(Fset_process_thread, create_process): Use it.
2025-08-16 13:01:01 +03:00
Spencer Baugh
37325ed5a9 Zero fd_callback_info when deleting an fd
.waiting_thread and .thread could be left set to non-NULL values
in a deleted fd_callback_info entry.  These would never be
cleared by e.g. clear_waiting_thread_info since that only clears
fd_callback_info entries up to max_desc.  Clear fd_callback_info
entirely when deleting an entry.

* src/process.c (clear_fd_callback_data): Add.
(delete_write_fd, delete_keyboard_wait_descriptor): Call
clear_fd_callback_data. (bug#79201)
(delete_read_fd): Remove duplicated clearing code.
(deactivate_process): Remove duplicate recompute_max_desc.
2025-08-16 12:51:35 +03:00
Juri Linkov
0ac3a1f26c New user option 'treesit-enabled-modes' (bug#79180)
* lisp/treesit.el (treesit-enabled-modes): New user option.
* src/treesit.c (treesit-major-mode-remap-alist): New variable.

* lisp/progmodes/c-ts-mode.el:
* lisp/progmodes/csharp-mode.el:
* lisp/progmodes/java-ts-mode.el:
* lisp/progmodes/js.el:
* lisp/progmodes/json-ts-mode.el:
* lisp/progmodes/ruby-ts-mode.el:
* lisp/progmodes/sh-script.el:
* lisp/textmodes/css-mode.el:
* lisp/textmodes/mhtml-ts-mode.el:
* lisp/textmodes/toml-ts-mode.el:
Add ts-mode mapping to 'treesit-major-mode-remap-alist'
for ts-modes that already have the corresponding non-ts mode
association in 'auto-mode-alist'.

* lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode-maybe):
* lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode-maybe):
* lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode-maybe):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-maybe)
(go-mod-ts-mode-maybe, go-work-ts-mode-maybe):
* lisp/progmodes/heex-ts-mode.el (heex-ts-mode-maybe):
* lisp/progmodes/lua-ts-mode.el (lua-ts-mode-maybe):
* lisp/progmodes/php-ts-mode.el (php-ts-mode-maybe):
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode-maybe):
* lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode-maybe)
(tsx-ts-mode-maybe):
* lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode-maybe):
* lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode-maybe):
Add a wrapper function to 'auto-mode-alist'
for ts-modes that have no corresponding non-ts mode.
Also add a mapping to 'treesit-major-mode-remap-alist'
for the case when a non-ts mode is installed from an external
source to be able to customize it with 'treesit-enabled-modes'.
2025-08-14 19:40:08 +03:00
Michael Albinus
40e4394f87 Fix file notification problem on Windows.
* src/inotify.c (inotify_callback): Set event.frame_or_window to Qnil.

* src/keyboard.c (make_lispy_event): Make a better check for the
HAVE_W32NOTIFY case when creating a Qfile_notify event.
2025-08-12 22:05:44 +02:00
Dr.Sc.KAWAMOTO,Takuji
5b9f4ee76e Fix NS frame position update after resize/move
Fixes bug#74074, bug#79164.

* src/nsterm.m ([EmacsView windowDidEndLiveResize:]):
([EmacsView updateFramePosition]): New functions.
([EmacsView windowDidMove:]): Move contents of this function into
updateFramePosition and call it.

Copyright-paperwork-exempt: yes
2025-08-11 21:54:58 +01:00
Dmitry Gutov
fd5866cae4 ; Coding style fix 2025-08-11 02:33:53 +03:00
Dmitry Gutov
07eb39f113 Allow thread's buffer to be killed, by default
* src/thread.c (Fmake_thread): Add new argument (bug#76969).
(thread_set_error): New function, extracted from thread-signal.
(Fthread_buffer_disposition): Add getter.
(Fthread_set_buffer_disposition): And setter.
(thread_check_current_buffer): Check the values of threads'
buffer_disposition.
(thread_all_before_buffer_killed): New function.
(init_threads): Set buffer_disposition to nil for the main thread.
(syms_of_threads): Add new symbols and define the error.

* src/thread.h (thread_state): New field buffer_disposition.
(thread_all_before_buffer_killed): Declare.

* src/buffer.c (Fkill_buffer): Call thread_check_current_buffer
one more time after all hooks and after that call
thread_all_before_buffer_killed.

* src/comp.c (ABI_VERSION): Increase the value.

* test/src/thread-tests.el (thread-buffer-disposition-t)
(thread-buffer-disposition-nil)
(thread-buffer-disposition-silently)
(thread-set-buffer-disposition)
(thread-set-buffer-disposition-main-thread): New tests.

* doc/lispref/threads.texi (Basic Thread Functions): Document
buffer-disposition in make-thread and its getter and setter.

* etc/NEWS: Add entry.
2025-08-09 22:40:07 +03:00
Eli Zaretskii
9748c13208 ; Fix last change
* src/print.c (print_create_variable_mapping): Add back the wrong
spelling as compatibility measure (bug#75784).
2025-08-09 15:38:13 +03:00
Zach Shaftel
581447cd25 Improve Vprint_variable_mapping
* src/print.c (print_create_variable_mapping): Fix a typo,
`unreadeable-function' to `unreadable-function'. Add `symbols-bare'
as an override for `print-symbols-bare'.  (Bug#79161)
2025-08-09 15:34:51 +03:00
Manuel Giraud
4c9ac95cb0 Variable to control overshoot and backup for TTY cursor motion
* src/term.c (syms_of_term): New variable.
* src/cm.c (calccost): Control overshooting with new variable.
* etc/NEWS: Document new variable.
* lisp/term/rxvt.el (terminal-init-rxvt): Force no TAB+BS for
rxvt.  (Bug#78474)
2025-08-09 15:27:00 +03:00
Po Lu
533da29545 ; * src/android.c (android_url_encode): Typo in comment. 2025-08-09 09:28:00 +08:00
Eli Zaretskii
e9fe0ebae0 ; Fix last change
* src/eval.c (Fdebugger_trap): Minor wording changes in doc
string.

* etc/DEBUG: Some copyedits of a recently-added text.
2025-08-07 16:38:02 +03:00
Jeremy Bryant
caa6bc95c1 New debugger-trap function to break to GDB
* src/eval.c: new primitive debugger-trap
* src/.gdbinit: set breakpoint to Fdebugger_trap
* etc/DEBUG: document it.
Remove suggestion to use Fredraw_display.

This do-nothing primitive gives control to GDB, and for debugging
convenience a breakpoint is set by default in .gdbinit.
2025-08-07 16:26:17 +03:00
Martin Rudalics
2d2755c3d7 Handle inhibiting implied resizing for frames without initial tool bar
* src/xfns.c (x_set_tool_bar_lines, x_change_tool_bar_height)
* src/pgtkfns.c (x_change_tool_bar_height)
(pgtk_set_tool_bar_lines): Set f->tool_bar_resized to true so
inhibiting implied resizing works for frames without initial
tool bar too.  See the thread
https://lists.gnu.org/archive/html/emacs-devel/2025-08/msg00034.html.
2025-08-05 11:08:38 +02:00
Paul Eggert
c935b68bed Port better to Linux with 1 MiB pages
* src/lisp.h: Include <sys-limits.h>.
(MAX_RW_COUNT): Remove, as it is the same thing as sys-limits.h’s
SYS_BUFSIZE_MAX.  All uses replaced by SYS_BUFSIZE_MAX.
2025-08-02 11:19:24 -07:00
Rudolf Adamkovič
6e1054a40b NS: Correct the accessibility role of Emacs windows (bug#77062)
Make the accessibility role of Emacs windows to be "standard
window" (AXWindow) instead of "text field" (AXTextField).  This matches
other applications on NS, as can be verified with any accessibility
inspector.  All widely used NS ports, such as Emacs Plus, have this
patch already applied. As for practical impact, this change makes Emacs,
for example, work with tiling window managers, such as Yabai, where many
users report problems with Emacs specifically, and are instructed to
simply avoid the official NS port of GNU Emacs due to this problem.

* src/nsterm.m: ([EmacsWindow accessibilityAttributeValue:]): Make the
accessibility role of Emacs windows to be "standard window" (AXWindow)
instead of "text field" (AXTextField).
2025-07-31 22:14:39 +01:00
Mattias Engdegård
95be144994 Refactor reader to use readbuf_t in more places
Simplify the code by using the already existing dynamic string buffer
type.  This is a refactoring; performance isn't measurably affected.

* src/lread.c (grow_read_buffer): Dissolve into...
(readbuf_grow): ...here, simplifying the code.
(add_char_to_buffer): Check for growth before adding char, not after.
(read_integer, read_string_literal): Use readbuf_t.
2025-07-30 11:04:12 +02:00
Mattias Engdegård
2d18878b96 Move keyboard input functions from lread.c to keyboard.c
These have nothing to do with the Lisp reader at all.

Suggested by Lynn Winebarger (bug#79035).

* src/lread.c (read_filtered_event, Fread_char, Fread_event)
(Fread_char_exclusive, Qascii_character): Move...
* src/keyboard.c: ...here.
* test/src/lread-tests.el (test-inhibit-interaction): Move...
* test/src/keyboard-tests.el (keyboard-inhibit-interaction): ...here.
2025-07-30 11:04:11 +02:00
Mattias Engdegård
5a9cbf24ec ; * src/bytecode.c: remove unneeded includes 2025-07-30 11:04:11 +02:00
Paul Eggert
354f9ba754 Disable Gnulib’s non-Gregorian calendars
Prepare for the next Gnulib merge by disabling the optional
support for non-Gregorian calendars recently added to Gnulib’s
nstrftime module.  This would be tricky to integrate with Emacs,
as Emacs has its own (much fancier) calendar system, one that at
least for the Persian calendar sometimes disagrees with Gnulib’s,
and it’s likely not worth the trouble of reconciling the conflicts.
* src/conf_post.h (SUPPORT_NON_GREG_CALENDARS_IN_STRFTIME):
New macro, defined to false.
* admin/merge-gnulib (GNULIB_MODULES): nstrftime → nstrftime-limited.
(AVOIDED_MODULES): Add localcharset.
Near the end, also remove the files lib/calendar-ethiopian.h,
lib/calendar-persian.h, lib/calendar-thai.h, lib/calendars.h.
2025-07-29 15:06:13 -07:00
Eli Zaretskii
4035bfa542 ; * src/pdumper.c (dump_buffer): Update HASH_buffer. 2025-07-28 19:51:06 +03:00
Eli Zaretskii
aef2d807e7 ; * src/emacs.c (default_PATH) [DOS_NT]: Add commentary. 2025-07-27 18:45:03 +03:00
Paul Eggert
64c93e188e Better default PATH on MS-Windows
* src/emacs.c (default_PATH): Use a more-reasonable default
for MS-Windows and DOS.  Problem reported by Eli Zaretskii in:
https://lists.gnu.org/r/emacs-devel/2025-07/msg00384.html
2025-07-27 08:17:25 -07:00
Po Lu
9d2c7bed66 Update Android frame param handlers
* src/androidfns.c (android_frame_parm_handlers): Add
gui_set_borders_respect_alpha_background for consistency with X.
2025-07-27 09:36:10 +08:00
Paul Eggert
547525176f Add readlink, realpath startup comments
This does not change behavior.
* src/emacs.c (follow_if_symlink): New static function, as a
vehicle for commentary explaining the deal with readlink and realpath.
(find_emacs_executable): Use it.
2025-07-26 12:52:55 -07:00
Eli Zaretskii
05dca1f51f ; * src/w32fns.c (Fx_create_frame): Fix copy/paste errors in last change. 2025-07-26 18:08:37 +03:00
Garklein
1bc338075d Add frame parameter which allows border transparency
The new 'borders-respect-alpha-background' frame parameter, when
set to 't', will make window dividers and internal borders
respect the 'alpha-background' frame parameter. This allows
transparent gaps between windows.
* doc/lispref/frames.texi (Font and Color Parameters):
Document the change.
* src/frame.c (frame_parm_table, syms_of_frame)
(gui_set_borders_respect_alpha_background):
* src/frame.h (struct frame): Add frame parameter.
* src/androidfns.c (x_create_frame, android_create_tip_frame)
(android_frame_parm_handlers):
* src/haikufns.c (haiku_create_frame, haiku_create_tip_frame)
(haiku_frame_parm_handlers):
* src/nsfns.m (ns_frame_parm_handlers, x_create_frame):
* src/w32fns.c (x_create_frame, w32_create_tip_frame)
(w32_frame_parm_handlers): Add dummy parameters for backends
that don't support opacity.
* src/pgtkfns.c (pgtk_frame_parm_handlers, x_create_frame)
(pgtk_create_tip_frame):
* src/pgtkterm.c (pgtk_draw_window_divider):
* src/xfns.c (x_create_frame, x_create_tip_frame)
(x_frame_parm_handlers)
* src/xterm.c (x_draw_window_divider)
(x_clear_under_internal_border): Implement parameter on backends
that support opacity.
2025-07-26 18:02:18 +03:00
Po Lu
aa2a83d783 ; * src/nsterm.m (ns_define_fringe_bitmap): Stylistic corrections. 2025-07-26 22:03:37 +08:00
Alan Third
5bc75585d5 Fix last commit
* src/nsterm.m (ns_draw_fringe_bitmap): Rename clearRect to bmpRect
where missed previously.
2025-07-26 12:59:10 +01:00
Alan Third
e3380669ed Fix incorrectly nested ns_focus/ns_unfocus calls
* src/nsterm.m (ns_draw_fringe_bitmap): Move the call to ns_focus out of
the if for overlay_p and rename the rect from clearRect to bmpRect to
make it's purpose clearer.
2025-07-26 12:00:02 +01:00
Alan Third
8c5378b2c2 Simplify NS fringe vectors (bug#73563)
* src/nsterm.m (ns_define_fringe_bitmap): Replace the fringe bitmap
"tracing" method to a true tracing method.  This should make the
resulting vector simpler and therefore faster to draw.
2025-07-26 12:00:02 +01:00
Alvaro Ramirez
6e64e0bd26 Enabled macOS dictation post NSTextInputClient migration in v30
* src/nsterm.m (selectedRange): Implement to fix dictation.
* etc/NEWS: Announce regression fix.
* etc/PROBLEMS: Help users recover from rejected permission.
2025-07-26 12:09:56 +02:00
Mattias Engdegård
33161e51e5 Check for end-of-file when reading character escapes (bug#79097)
* src/lread.c (read_char_escape): Add check.
* test/src/lread-tests.el (lread-char-escape-eof): New test.
2025-07-25 21:54:59 +02:00
Paul Eggert
c403bc4d51 Streamline init_callproc a bit
* src/callproc.c (init_callproc): Don’t bother testing for the
existence of ../src/ and NEWS if installation-directory is
non-nil, because in that case we will test for ../etc/NEWS anyway.
Simplify by using AUTO_STR.
2025-07-24 22:13:47 -07:00
Paul Eggert
d7e8186080 Refactor to allow nameless auto strings
* src/lisp.h (AUTO_STR, AUTO_STR_WITH_LEN): New macros.
Long ago this sort of thing would have been a no-no
because we needed to GCPRO the strings.
However, GCPRO went away a decade ago.
2025-07-24 22:13:47 -07:00
Paul Eggert
eb9ec79c13 PATH defaults now act more like GNU and POSIX
When PATH is unset or empty, use the system default,
to be consistent with GNU/Linux and with POSIX.
If there is no system default do not default to "."
as that can be dangerous.
* src/callproc.c (init_callproc_1, init_callproc):
Default PATH to the null pointer, not the empty string.
* src/emacs.c (default_PATH): New function.
(find_emacs_executable, decode_env_path): Be consistent with POSIX
and with glibc about what to do when PATH is unset or empty.
2025-07-24 22:13:47 -07:00
Paul Eggert
d59fe6dad5 Treat ‘.../emacs’ like ‘emacs’ in realpath startup
* src/emacs.c (find_emacs_executable): If the executable name
contains a slash, use the same optimization for symlink resolution
that we already use when the executable name has no slash.
2025-07-24 22:13:47 -07:00
Paul Eggert
67ea9485a6 Prefer readlink to lstat in find_emacs_executable
* src/emacs.c (find_emacs_executable): Prefer readlink to lstat
when testing whether a file is a symlink.  This avoids EOVERFLOW
issues.
2025-07-24 22:13:47 -07:00