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

47962 commits

Author SHA1 Message Date
Eli Zaretskii
9074103fbf ; Fix recent change in documentation of "device number"
* src/dired.c (Ffile_attributes):
* lisp/files.el (buffer-file-number, file-attribute-file-number):
Fix wording of the doc strings.

* etc/NEWS:
* doc/lispref/buffers.texi (Buffer File Name):
* doc/lispref/files.texi (File Attributes): Fix a typo and
wording.  (Bug#58446)
2022-10-14 10:12:03 +03:00
Yuan Fu
bc66ff9875
* src/treesit.c (Ftreesit_query_language): New function. 2022-10-13 14:39:51 -07:00
Michael Albinus
cbd04ad3d5 Clarify structure of file-attribute's device number
* doc/lispref/buffers.texi (Buffer File Name): Fix description of
buffer-file-number.

* doc/lispref/files.texi (File Attributes): Clarify type of device
number.  Describe file-attribute-file-number.  (Bug#58446)

* etc/NEWS: Mention file-attribute-file-number.

* lisp/files.el (buffer-file-number, file-attribute-device-number)
(file-attribute-collect): Fix docstring.
(file-attribute-file-number): New defsubst.
(find-buffer-visiting, find-file-noselect)
(set-visited-file-name, basic-save-buffer):
* lisp/startup.el (normal-top-level-add-subdirs-to-load-path):
* lisp/eshell/em-unix.el (eshell-shuffle-files): Use it.

* src/dired.c (Ffile_attributes): Fix docstring.
2022-10-13 21:13:45 +02:00
Paul Eggert
10f55975d3 Improve checks for recent "File exists" fixup
* src/fileio.c (Finsert_file_contents): Add an assertion (bug#42431).
2022-10-13 09:34:13 -07:00
Po Lu
e6c701c8c3 Shrink client list window structure
* src/xterm.c (struct x_client_list_window): Rearrange members
for better alignment.
2022-10-13 18:48:56 +08:00
Paul Eggert
97de273dca Simplify recent "File exists" fix
* src/fileio.c (Finsert_file_contents):
Simplify previous change that fixed bug#42431.
2022-10-13 01:48:29 -07:00
Lars Ingebrigtsen
c522021a30 Fix misleading "File exists, but cannot be read" in browse-url-emacs
* src/fileio.c (Finsert_file_contents): Don't signal an error
about not being able to open the file when we're fetching things
via handlers -- in that case, modtime isn't necessarily set, and
if there's a handler, it should take care of this (bug#42431).
2022-10-13 09:00:17 +02:00
Stefan Monnier
da752c0466 src/frame.c (do_switch_frame): Fix bug#58343
* src/frame.c (do_switch_frame): Move call to `get-mru-window` outside
of the "critical region" where (selected-window) != (frame-selected-window).
* src/minibuf.c (move_minibuffers_onto_frame): Add arg `frame`.
Use it instead of `selected_frame`.  Adjust all callers.
* src/lisp.h (move_minibuffers_onto_frame): Adjust declaration.
2022-10-12 17:06:33 -04:00
Matt Armstrong
65a7b5a802 ; * src/itree.c (check_subtree): fix logical error in eassert 2022-10-12 14:01:05 -04:00
Yuan Fu
0b3f785c4a
Better signal data for treesit-load-language-error
* src/treesit.c (ts_load_language): Better formatted signal data,
(Ftreesit_langauge_available_p): Optionally return the signal data if
language not available.
* doc/lispref/parsing.texi: Document the signal data in detail.
2022-10-12 10:38:35 -07:00
Po Lu
2953d89d74 Stop relying on Xt hack to set window manager hints
* src/widget.c (get_wm_shell): Return WMShellWidget.
(update_wm_hints, widget_update_wm_size_hints): Return whether
or not size hints changed.
* src/widget.h: Delete `size_switch'.
* src/widgetprv.h (EmacsFramePart): Likewise.
* src/xterm.c (x_wm_set_size_hint): Set size hints the usual way
if Xt did not set them.  (bug#58412)
2022-10-12 15:08:01 +08:00
Matt Armstrong
fda8723be6 ; * src/itree.c (check_tree): assert that the tree root is black 2022-10-11 20:43:39 -07:00
Yuan Fu
c2ecb08775
Lazily compile tree-sitter query
See comment on struct Lisp_TS_Query for why.  Previous commits adding
python and js support for tree-sitter breaks Emacs build if language
definitions aren't available at build time.  This commit fixes that.

Now query object don't compile the query upon creation, but stores the
query source and language symbol, and compiles upon first use (in
treesit-query-capture).

I want ts_ensure_query_compiled to return signal symbol and data
rather than signaling itself, because it's a helper function not lisp
function.  But because it calls ts_load_language, I had to update
ts_load_language to also use the signal symbol/data interface.

* src/treesit.h (struct Lisp_TS_Query): Add two new field.
* src/treesit.c (ts_load_language): Return signal symbol and data
rather than signaling itself.
(Ftreesit_langauge_available_p)
(Ftreesit_parser_create): Update usage of ts_load_language

(make_ts_query): Now returns a lisp object.
(ts_query_error_to_string): Moved because it's used by
ts_compose_query_signal_data.
(ts_compose_query_signal_data)
(ts_ensure_query_compiled): New functions.
(Ftreesit_query_compile): Delay compiling the query.
(Ftreesit_query_capture): Instead of creating a query object which
compiles the query, now goes two routes: if QUERY is a query object,
make sure it is compiled and use the TSQuery; if QUERY is a cons or
string, compile directly to TSQuery, and free it after use.  Creating
a lisp query requires the language symbol, but in this function we
only have TSLanguage.
2022-10-11 09:30:42 -07:00
Stefan Monnier
12836db6e4 itree.c (check_tree): Simplify
* src/itree.c (struct check_subtree_result): Remove `complete`.
(check_subtree): Remove `max_depth` arg (and adjust callers).
Use 0 as black-depth of empty tree.
Remove redundant `node->parent` check (already performed by the caller).
(check_tree): Replace with `check_tree_common` (update all callers).
Check the root's `parent` field.
(check_tree_no_rb): Delete function, inlined in its sole caller.
(interval_tree_remove): Add call to `check_tree` (without RB checks)
before `interval_tree_remove_fix`.  Move update of `size`
field accordingly.
2022-10-11 11:17:44 -04:00
Po Lu
61b6da5ace Also avoid setting _NET_WM_USER_TIME on crossing
* src/xterm.c (handle_one_xevent): Stop setting user time prop
on crossing events.
2022-10-11 19:56:05 +08:00
Mattias Engdegård
48df8bbb1f ; * src/fns.c (HAVE_FAST_UNALIGNED_ACCESS): run faster on mainframes 2022-10-11 13:44:23 +02:00
Eli Zaretskii
4f114c0d95 Speed up scrolling when lines are very long and truncated
* src/window.c (window_scroll_for_long_lines): New function.
(window_scroll): Call 'window_scroll_for_long_lines' when lines
are very long and truncated on display.  Also, disable
'fontification-functions' during scrolling in that case.
* src/xdisp.c (redisplay_window): When recentering the window's
display, go back to the centering position using a simplified
method, if lines in the buffer are very long and truncated on
display.
2022-10-11 13:26:01 +03:00
Po Lu
163000fb59 Remove some more unnecessary calls to block_input
* src/xterm.c (x_update_opaque_region, show_back_buffer)
(XTbuffer_flipping_unblocked_hook, x_clear_under_internal_border)
(x_after_update_window_line): Remove and add calls to
block_input as required.
2022-10-11 15:46:10 +08:00
Matt Armstrong
da0387f0fe Stop reading and writing the itree_null.parent field entirely.
With this change all fields in the itree_null sentinel are read only.
This makes accessing itree_null thread safe in an obvious way.

Because it took two commits from two peole to get this right, I think
we can call this design fragile and difficult to reason about.
Another benefit of this commit is as preparation for removing sentinel
node completely, and just using NULL.

* src/itree.c (itree_null): Statically initialize itree_null.parent to
NULL.  It is never accessed.
(null_is_sane): Assert parent == NULL.
(interval_tree_remove_fix): Remove unecessary assignments to parent
from node->parent.  These were the last places itree_null.parent were
read.
(interval_tree_remove): Avoid an assignment to itree_null.parent
through min->right->parent.
(interval_tree_transplant): Avoid an assignment to itree_null.parent
through source->parent.
2022-10-10 19:37:51 -07:00
Matt Armstrong
a154259bfa Simplify itree_null initialization
* src/itree.c (null_is_sane): call eassert directly, check
REAR_ADVANCE, FRONT_ADVANCE.  Add FIXME that PARENT is still
read/write.
(itree_null): initialize statically
(itree_init): remove initialization code, call eassert(null_is_sane())
(check_tree_common): call eassert (null_is_sane())
2022-10-10 19:37:51 -07:00
Matt Armstrong
51a8e375eb Check red-black invariants in most places
Stefan recently disabled this but I happened to want it back soon
after.

* src/itree.c (check_subtree): new arg: allow_red_red
(check_tree_common): renamed from check_tree, pass allow_red_red
through.
(check_tree): new function, pass allow_red_red=false
(interval_tree_insert): check_tree -> check_tree_common with
allow_red_red=true.
2022-10-10 19:37:51 -07:00
Matt Armstrong
67b9e89a5a Improve check_subtree
* src/itree.c (struct check_subtree_result): new struct returned by
check_subtree.
(check_subtree): new function, renamed from recurse_check_tree.  Add
new black height assertions.
(check_tree): assert that the tree has non-negative size, assert that
limiting to interval_tree_max_height(tree) levels is enough to
traverses the complete tree.
2022-10-10 19:37:51 -07:00
Lars Ingebrigtsen
36ab164496 Improve error message from sqlite-execute
* src/sqlite.c (sqlite_prepare_errmsg): New function.
(Fsqlite_execute): Use it to get the same error format for both
execute and select.
(Fsqlite_select): Factored out from here.
2022-10-11 02:18:19 +02:00
Daniel Martín
57e37e9128
Fix typo in Makefile.in
* src/Makefile.in (TREE_SITTER_CFLAGS): Set the correct C flags.
2022-10-10 14:08:53 -07:00
Lars Ingebrigtsen
7e7dc74ffb Support "insert into ... returning ..." in sqlite-execute
* doc/lispref/text.texi (Database): Mention it.
* src/sqlite.c (Fsqlite_execute): Support syntax like "insert into
... returning ..." (bug#58390).
2022-10-10 10:58:33 +02:00
Lars Ingebrigtsen
7ab6ec364d Fix some indentation in Fsqlite_execute
* src/sqlite.c (Fsqlite_execute): Fix indentation.
2022-10-10 10:35:46 +02:00
Stefan Monnier
7cbeeabc7e Tighten up handling of otick
Move args between `build_overlay` and `add_buffer_overlay`,
to try and keep buffer positions together with their buffer.
Be more strict in the `otick` values passed to `interval_tree_insert`.
Move a few things around to try and reduce dependencies through `.h` files.
Fix a thinko bug in `check_tree`.

* src/alloc.c (build_overlay): Remove `begin` and `end` args.

* src/buffer.c (add_buffer_overlay): Move from `buffer.h`.
Add `begin` and `end` args.
(copy_overlays): Adjust accordingly.
(Fmake_overlay): Use BUF_BEG and BUF_Z; adjust call to `build_overlay`
and `add_buffer_overlay`.
(Fmove_overlay): Use BUF_BEG and BUF_Z; Use the new `begin` and `end`
args of `add_buffer_overlay` so we don't need to use
`interval_node_set_region` when moving to a new buffer.
(remove_buffer_overlay, set_overlay_region): Move from `buffer.h`.

* src/buffer.h (set_overlay_region, add_buffer_overlay)
(remove_buffer_overlay): Move to `buffer.c`.
(build_overlay): Move from `lisp.h`.
(maybe_alloc_buffer_overlays): Delete function (inline into its only
caller).

* src/itree.c (interval_tree_insert): Move declaration `from buffer.h`.
(check_tree): Fix initial offset in call to `recurse_check_tree`.
Remove redundant check of the `limit` value.
(interval_node_init): Remove `begin` and `end` args.
(interval_tree_insert): Mark it as static.
Assert that the new node's `otick` should already be uptodate and its
new parent as well.
(itree_insert_node): New function.
(interval_tree_insert_gap): Assert the otick of the removed+added nodes
were uptodate and mark them as uptodate again after adjusting
their positions.
(interval_tree_inherit_offset): Check that the parent is at least as
uptodate as the child.

* src/lisp.h (build_overlay): Move to `buffer.h`.

* src/itree.h (interval_node_init): Adjust accordingly.
(interval_tree_insert): Remove declaration.
(itree_insert_node): New declaration.
2022-10-09 19:45:26 -04:00
Lars Ingebrigtsen
b5dc0513d5 Make Fsqlite_select error data better
* src/sqlite.c (Fsqlite_select): Add more the more specific error
text to the error data (bug#58363).
2022-10-09 16:17:22 +02:00
Lars Ingebrigtsen
0ce91ed8b4 Clean up Fsqlite_select slightly
* src/sqlite.c (Fsqlite_select): Clean up code slightly.
2022-10-09 15:38:52 +02:00
Po Lu
22374f2122 Fix user time handling bug on GNOME Shell and Metacity
* src/xfns.c (x_window): Avoid extraneous
XChangeWindowAttributes.
* src/xterm.c (x_display_set_last_user_time): New argument
SET_PROPERTY.  Do not change the user time property if it is not
true.  All callers changed.
(handle_one_xevent): Avoid setting the user time property on
LeaveNotify and XI_Leave events.
2022-10-09 19:58:17 +08:00
Stefan Monnier
4f3f7aebc9 itree.c: Use interval_tree_inherit_offset
The insertion code tried to manipulate the offset in its own way,
and apparently there was a bug in it.  Replace that with a call to
`interval_tree_inherit_offset`, making the whole logic a bit simpler,
and fixing a bug along the way (not sure where the bug was, to be honest).

* src/itree.c (interval_tree_insert): Use `interval_tree_inherit_offset`.
Check the tree before insert_fix.
(recurse_check_tree): Don't check RB invariants.
(itree_limits_are_stable): Delete function (subsumed by `check_tree`).
2022-10-09 00:56:24 -04:00
Matt Armstrong
fe14454101 Debug check overlay tree invariants
* src/itree.c (check_tree):
(recurse_check_tree): new functions.
(interval_tree_insert): call them.
(interval_tree_remove): ditto.
(interval_tree_insert_fix): ditto.
2022-10-08 20:37:28 -07:00
Matt Armstrong
30f5220277 Comment change: explain inheriting "dirty" offsets
; * src/itree.c (interval_generator_next): explain why the code
handles inheriting offsets from dirty nodes.
2022-10-08 20:37:28 -07:00
Mattias Engdegård
e4769b20f1 Restrict string-lessp vectorisation to safe architectures
* src/fns.c (HAVE_FAST_UNALIGNED_ACCESS): New.
(Fstring_lessp): Only use word operations where safe, because string
data from purespace may be unaligned.
2022-10-08 18:48:30 +02:00
Mattias Engdegård
9af63d2e8b Better Lisp_String comments
* src/lisp.h (struct Lisp_String): Comments improved.
* src/pdumper.c (dump_string): Update hash (comment change only).
2022-10-08 18:48:30 +02:00
Mattias Engdegård
71b3a37569 Improved format string error message (bug#58168)
* src/editfns.c (styled_format): Better message when the conversion
char is non-ASCII from a unibyte format string.
2022-10-08 18:48:30 +02:00
Lars Ingebrigtsen
49160969ce Make sqlite-select signal errors when there's an error
* src/sqlite.c (load_dll_functions): Update.
(Fsqlite_select): Signal an error when there's an error preparing
the statement.
2022-10-08 15:41:14 +02:00
Po Lu
5e7e85af02 Stop passing CurrentTime to SetInputFocus
* src/xterm.c (xi_focus_handle_for_device, handle_one_xevent):
Set the last user time where required for focus to be handled
correctly.
(x_focus_frame): Do not perform actions prohibited by the ICCCM.
2022-10-08 16:38:48 +08:00
Stefan Monnier
208de5de59 itree: Try and detect non-local exits during itree iterations
* src/itree.c (itree_busy_p): New function.
* src/eval.c (signal_or_quit): Use it.
* src/itree.h (itree_busy_p): Declare it.
2022-10-07 19:15:07 -04:00
Stefan Monnier
d6831d1b0a subr.el (inhibit-point-motion-hooks): Mark it as obsolete
When Emacs-25 changed the default of `inhibit-point-motion-hooks` to t,
/etc/NEWS declared it as obsolete and so did its docstring, but
it was not marked as obsolete so as not to emit too many warnings
in code where it was impractical to remove the let-binding while
keeping backward compatibility with older Emacsen.
Those backward compatibility issues are not serious any more now that
Emacs-25 is itself considered old.

* lisp/subr.el (inhibit-point-motion-hooks): Mark it as obsolete.
* src/textprop.c (inhibit-point-motion-hooks): Don't mention it being
obsolete in the docstring any more.
* lisp/simple.el (line-move-1, line-move-finish): Silence warnings.
2022-10-07 14:15:40 -04:00
Matt Armstrong
780d3d8df2 ; * src/itree.c: Add comment describing when noverlay is O(N) 2022-10-07 09:38:49 -07:00
Matt Armstrong
c0d5026321 Use a bool instead of a bitfield
* src/itree.c (struct interval_generator): use a bool instead of a
bitfield, since space is not an issue.
2022-10-07 09:38:49 -07:00
Matt Armstrong
cab3b67652 ; * src/itree.c: change comments for clarity. 2022-10-07 09:38:49 -07:00
Matt Armstrong
0fcd6de93b ; * src/itree.h (struct interval_node): document field invariants. 2022-10-07 09:38:49 -07:00
Mattias Engdegård
def6fa4246 Speed up string-lessp for multibyte strings
Improve comparison speed when both arguments are multibyte strings,
at least one of them containing a non-ASCII character.  (All-ASCII
multibyte strings are already fast.)
The speed-up is about 2× for strings of 10 chars, 10× for strings of
100 chars.

* src/fns.c (Fstring_lessp): Quickly skip the common prefix by
comparing words.
2022-10-07 13:57:54 +02:00
Po Lu
6edb676c18 Handle IM server disconnects during preedit
* src/xterm.c (x_maybe_clear_preedit): New function.
(xim_destroy_callback): Call that function.
2022-10-07 18:39:32 +08:00
Yuan Fu
b755f45f65
* src/treesit.c (syms_of_treesit): Add Streesit_language_version. 2022-10-06 15:46:01 -07:00
Matt Armstrong
6dff825a99 ; * src/itree.h: include "lisp.h" for Lisp_Object 2022-10-06 13:27:27 -07:00
Yuan Fu
cea1e95d38
Merge branch 'master' into feature/tree-sitter 2022-10-06 11:06:07 -07:00
Gerd Möllmann
d9b026d464 Add missing staticpro (bug#58327)
* src/window.c (init_window_once): staticpro old_selected_window.
2022-10-06 10:18:59 +02:00