1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-07 06:22:32 -08:00
Commit graph

47962 commits

Author SHA1 Message Date
Eli Zaretskii
e8a89a18b6 ; Fix non-tree-sitter builds
* src/fns.c (internal_equal): Call treesit_node_eq only if
tree-sitter was compiled in.
2023-01-13 08:58:03 +02:00
Yuan Fu
956889d8ff
Equal now recognizes tree-sitter nodes (bug#60659)
Now equal uses ts_node_eq to check equality between nodes.

* doc/lispref/parsing.texi:
(Accessing Node Information): Update manual.
* src/fns.c (internal_equal): Handle tree-sitter nodes.
* src/treesit.c (treesit_node_eq): New function.
(Ftreesit_node_eq): Factor out.  Update docstring.
* src/treesit.h (treesit_node_eq): Declare new function.
2023-01-12 17:11:38 -08:00
Eli Zaretskii
cfd2b3504a Fix encoding with 'utf-8-auto'
* src/coding.c (encode_coding_utf_8): Fix encoding with
'utf-8-auto': it should produce BOM, per the documentation of
the :bom attribute.  (Bug#60750)

* lisp/international/mule.el (define-coding-system): Doc fix.

* test/src/coding-tests.el (coding-tests): Use
'with-coding-priority' instead of 'prefer-coding-system', as the
latter has global persistent effect and affects further tests.
2023-01-12 16:36:35 +02:00
Po Lu
53b47df822 Report cursor correctly on PGTK when there is a margin
* src/pgtkterm.c (pgtk_draw_window_cursor): Adjust frame_x by
the margin width as well.
2023-01-12 18:36:14 +08:00
Yuan Fu
aa9df1260c
Don't print named tree-sitter nodes with parenthesizes (bug#60696)
* src/print.c (print_vectorlike): Use empty string as delimiters if
the node is named.
2023-01-09 20:15:12 -08:00
Eli Zaretskii
ebc5263667 ; * src/callint.c (Finteractive): Doc string clarification. 2023-01-09 14:03:04 +02:00
Tad Fisher
1469aac20d ; * src/pgtkfns.c (parse_resource_key): Use recursive schema lookup
XDG_DATA_DIRS may consist of multiple directories, and
g_settings_schema_source_get_default composes these into a recursive
schema source. One must pass TRUE to g_settings_schema_source_lookup,
otherwise only the first directory in XDG_DATA_DIRS is searched.

It follows that in the case that the directory containing the compiled
GSettings schema for Emacs is not the first in XDG_DATA_DIRS,
parse_resource_key will not accept any resource key, which causes
pgtk_get_defaults_value and pgtk_set_defaults_value to fail.

This impacts systems that compose multiple GSettings schema sources
via XDG_DATA_DIRS, such Flatpak and NixOS.

Supporting GIO documentation for g_settings_schema_source_get_default:

> The returned source may actually consist of multiple schema sources
> from different directories, depending on which directories were given
> in `XDG_DATA_DIRS` and `GSETTINGS_SCHEMA_DIR`. For this reason, all
> lookups performed against the default source should probably be done
> recursively.

Bug#60565

Copyright-paperwork-exempt: yes
2023-01-08 13:48:25 +02:00
Eli Zaretskii
5cb01ac5d7 ; * src/callint.c (Finteractive): Fix the doc string (bug#60645). 2023-01-08 12:43:56 +02:00
Eli Zaretskii
ec172d748f Avoid assertion violation due to fill-column indicator face
* src/xdisp.c (extend_face_to_end_of_line): Use the original
iterator metrics for the stretch glyph, the one unaffected by the
'fill-column-indicator' face.  (Bug#60580)
2023-01-05 22:33:51 +02:00
Eli Zaretskii
16eca92415 ; * src/gnutls.c (Fgnutls_deinit): Fix typo in doc string (bug#60579). 2023-01-05 20:39:14 +02:00
Eli Zaretskii
8d530ca654 ; Fix documentation of y-or-n-p/yes-or-no-p
* lisp/subr.el (y-or-n-p):
* src/fns.c (Fyes_or_no_p): Doc fix.
2023-01-04 19:25:47 +02:00
Eli Zaretskii
d26b523886 Fix shrinking of the tab-bar
* src/haikufns.c (haiku_change_tab_bar_height):
* src/pgtkfns.c (pgtk_change_tab_bar_height):
* src/nsfns.m (ns_change_tab_bar_height):
* src/w32fns.c (w32_change_tab_bar_height):
* src/xfns.c (x_change_tab_bar_height): Don't let the number of
tab-bar lines degenerate to zero due to integer division.
(Bug#60210)
2023-01-02 17:02:05 +02:00
Eli Zaretskii
b7ad0b4014 ; Clarify doc strings of 'call-process' and 'call-process-region'
* src/callproc.c (Fcall_process, Fcall_process_region): Document
that the destination buffer can be specified by its name.
(Bug#60477)
2023-01-02 13:52:25 +02:00
Eli Zaretskii
cae528457c ; Add 2023 to copyright years. 2023-01-01 05:31:12 -05:00
Stefan Kangas
9292f595a7 ; Fix typos 2022-12-31 12:43:32 +01:00
Eli Zaretskii
bfdad6c4e5 ; Fix recent treesit-related changes
* lisp/treesit.el (treesit-language-source-alist)
(treesit--install-language-grammar-1): Doc fixes.

* src/treesit.c (Ftreesit_language_abi_version): Fix a typo in
function's Lisp name.  Doc fix.
(Ftreesit_language_available_p): Fix a typo in the function's C
name.

* doc/lispref/parsing.texi (Language Grammar): Fix wording.
2022-12-31 10:13:15 +02:00
Yuan Fu
ab1f245f1a
Show tree-sitter query source when signaling query error
* src/treesit.c (treesit_compose_query_signal_data): Add QUERY_SOURCE
parameter.
(treesit_ensure_query_compiled)
(Ftreesit_query_capture): Add query source.
2022-12-30 16:57:45 -08:00
Yuan Fu
0237c5927e
Add treesit-language-abi-version
Also rename treesit-language-version to treesit-library-abi-version,
because the old name is somewhat misleading.

* doc/lispref/parsing.texi (Language Grammar): Update.
* src/treesit.c (Ftreesit_library_abi_version): Rename.
(Ftreesit_language_abi_version): New function.
2022-12-30 02:54:13 -08:00
Juri Linkov
60418e6f09 * src/keyboard.c (echo_add_key): Use recently rebound C-h key C-q (bug#60249) 2022-12-29 19:41:41 +02:00
Eli Zaretskii
706ed85285 Avoid assertion violations in treesit.c with --enable-checking
* src/treesit.c (Ftreesit_node_first_child_for_pos)
(Ftreesit_node_descendant_for_range): Check validity of buffer
positions before converting them to byte-positions, to avoid
assertion violations in buf_charpos_to_bytepos.
2022-12-29 13:52:09 +02:00
Yuan Fu
f509246ba1
Call tree-sitter parser notifier on the first parse
* src/treesit.c (treesit_call_after_change_functions): Handle NULL
old_tree.
(treesit_ensure_parsed): Remove check for NULL tree.
2022-12-28 15:30:10 -08:00
Yuan Fu
ec6feeaa19
Fix tree-sitter parser notifier recursion
See the comment for detail.

* src/treesit.c (treesit_ensure_parsed): Move the need_reparse short
circuit to the very beginning.  Move the call to
treesit_call_after_change_functions to the very end.
2022-12-28 15:19:34 -08:00
Eli Zaretskii
b464e6c490 Make last change of w32 GUI dialogs conditional and reversible
* src/w32term.c (syms_of_w32term) <w32-yes-no-dialog-show-cancel>:
New boolean variable.
(w32_initialize): Fix query for visible system caret: 'bool' is a
single-byte data type, whereas SystemParametersInfo wants a BOOL,
which is a 32-bit int.
* src/w32menu.c (simple_dialog_show): Show "Cancel" button only if
'w32-yes-no-dialog-show-cancel' is non-nil.

* etc/NEWS: Announce the change.
2022-12-28 15:10:39 +02:00
Eli Zaretskii
2b55a48d3e * src/w32menu.c (simple_dialog_show): Use MB_YESNOCANCEL style. 2022-12-27 20:55:12 +02:00
Eli Zaretskii
8b8b791567 ; Improve documentation of TAB/SPC indentation
* lisp/indent.el (tab-to-tab-stop):
* src/indent.c (Findent_to): Mention 'indent-tabs-mode' in doc
strings.
2022-12-27 20:23:16 +02:00
Yuan Fu
a6d961ae2f
Add a new tree-sitter query predicate 'pred'
I realized that using an arbitrary function as the predicate in
queries is very helpful for some queries I'm writing for python and
javascript, and presumably most other languages[1].

Granted, we can already filter out unwanted nodes by using a function
instead of a face for the capture name, and (1) determine whether the
captured node is valid and (2) fontify that node if it's valid.

However, such approach is a bit more cumbersome and more importantly
gets in the way of another potential use of the fontification queries:
context extraction.

For example, I could use the query for the 'variable' feature to get
all the variables in a certain region.  In this use-case, we want the
filtering happen before returning the captured nodes.

Besides, the change is relatively small and straightforward: most code
are already there, I just need to add some boilerplate.

[1] For a code like aa.bb(cc), we want bb to be in function face,
because obviously its a function.  But for aa.bb, we want bb to be in
property face, because it's a property.  In the AST, bb is always a
property, the difference between the two cases is the enclosing node:
in the first case, aa.bb is in a "call_expression" node, indicating
that bb is used as a function (a method).  So we want a predicate
function that checks whether bb is used as a function or a property,
and determine whether it should be in function or property face.

* doc/lispref/parsing.texi (Pattern Matching): Update manual.
* src/treesit.c (Ftreesit_pattern_expand): Handle :pred.
(treesit_predicate_capture_name_to_node): A new function extracted
from treesit_predicate_capture_name_to_text.
(treesit_predicate_capture_name_to_text): Use the newly extracted
function.
(treesit_predicate_pred): New predicate function.
(treesit_eval_predicates): Add new predicate.  Also fix a bug: we want
to AND the results of each predicate.
* test/src/treesit-tests.el (treesit--ert-pred-last-sibling): New
helper function.
(treesit-query-api): Test #pred predicate.
2022-12-26 17:50:14 -08:00
Gregory Heytings
b14bbd108e Improve handling of tab-bar height.
* src/xdisp.c (redisplay_tab_bar): When 'auto-resize-tab-bar' is
not 'grow-only', also consider the case when the tab-bar height
needs to shrink.  Fixes bug#60210.
2022-12-26 18:39:41 +01:00
Eli Zaretskii
26b2ec7cb8 Simplify last change (bug#60311)
* src/json.c (json_available_p): Use original code.  Always return
true for !WINDOWSNT.
(ensure_json_available): Now defined only on WINDOWSNT.
(Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer): Call ensure_json_available only on
WINDOWSNT.

* lisp/subr.el (json-available-p): Simplify.
2022-12-26 15:26:48 +02:00
Mattias Engdegård
082fc6e308 Fix 'json-available-p' on MS-Windows
* src/json.c (json_available_p, ensure_json_available)
(Fjson__available_p): New functions.
(Fjson_serialize, Fjson_insert, Fjson_parse_string)
(Fjson_parse_buffer): Use ensure_json_available.
(syms_of_json): Defsubr json--available-p.

* lisp/subr.el (json-available-p): Rewrite.
2022-12-26 15:12:04 +02:00
Yuan Fu
7c7950fe00
Add maintainer stub for tree-sitter files
* lisp/treesit.el:
* src/treesit.c: Add maintainer.
2022-12-26 01:47:55 -08:00
Stefan Kangas
2608e5edcc ; Fix typos
(cherry picked from commit a5d39e1144)
2022-12-26 10:42:02 +01:00
Eli Zaretskii
d62b634d8f ; * src/process.c (Fprocess_running_child_p): Doc fix. 2022-12-25 11:23:07 +02:00
Eli Zaretskii
38866510c7 ; * src/xdisp.c (redisplay_internal): Reinstate the FRAME_LIVE_P test. 2022-12-24 12:27:17 +02:00
Yuan Fu
e30621caa2
; Add treesit_recursion_limit
* src/treesit.c (treesit_recursion_limit): New constant.
(treesit_cursor_helper)
(Ftreesit_search_subtree)
(Ftreesit_induce_sparse_tree): Use the new constant.
2022-12-24 00:33:17 -08:00
Yuan Fu
e492c21e81
Fix treesit_cursor_helper (bug#60267)
The cause of that bug is that in a particular parse tree, the node
treesit_cursor_helper tries to go to is a missing node, not only is it
a missing node, it is the first node of a subtree.  So when
treesit_cursor_helper follows the algorithm and goes down the tree, it
goes down the previous subtree (because that subtree's end = end_pos,
because the target node has zero width).

    o
    |
 o--+-o
 |    |
 +-+  +-+-+
 | |  | | |
 o x  t o o

(We ended up in x when the target is t, because t has zero width.)

One way to solve it is to go back up the tree if we are at a leaf node
and still haven't matched the target node.  That's too ugly and
finicky so I resorted to recursion.  Now one more functions will
return give up (treesit_node_parent) if we are in a werid parse tree
that is super deep.  But since we already kind of give up on this kind
of parse trees (bug#59426), it doesn't really hurt.

* src/treesit.c (treesit_cursor_helper_1): New function.
(treesit_cursor_helper): Use the new function.  Change return type to
bool, and accept a cursor pointer.

(Ftreesit_node_parent)
(Ftreesit_search_subtree)
(Ftreesit_search_forward)
(Ftreesit_induce_sparse_tree): Use the new signature.
2022-12-24 00:33:16 -08:00
Paul Eggert
4437dbedf7 Fix restart-emacs alarms (Bug#60220)
* src/emacs.c (Fkill_emacs): Turn timers off before execing,
so that the re-execed Emacs doesn’t get a timer alarm.
2022-12-24 00:23:02 -08:00
Po Lu
0e39ad6fa5 Fix crash after X error
* src/xdisp.c (redisplay_internal): Catch another crash if
gcscrollbars after an X error.
2022-12-24 14:15:04 +08:00
Eli Zaretskii
eccb813a94 Fix "C-h k" in recursive minibuffers
* lisp/subr.el (event--posn-at-point): Leave POSN alone if it
doesn't have at least 6 members.  This follows more faithfully
what 'event-start' and 'event-end' did before they started using
this function, see commit c1cead89f5.  Call posn-at-point with
the minibuffer-window when in the minibuffer.  (Bug#60252)
2022-12-23 16:41:08 +02:00
Eli Zaretskii
9bf13a3fb9 ; * src/alloc.c (Fmemory_info): Doc fix. 2022-12-22 13:02:45 +02:00
Eli Zaretskii
ec9fbad908 Fix write-region to null device on MS-Windows
* src/fileio.c (write_region) [WINDOWSNT]: Ignore EBADF errors
from fsync -- this means fsync is not supported for this file.
Happens, for example, with the null device.  (Bug#59545)
2022-12-21 21:23:51 +02:00
Philipp Stephani
8550a99378 ; * src/emacs-module.h.in (enum emacs_funcall_exit): Fix typo. 2022-12-20 13:29:49 +01:00
Po Lu
897f33bf31 Fix the MS-DOS build
* src/lread.c (syms_of_lread): Make the MS-DOS build work again.
2022-12-18 18:05:57 +08:00
Eli Zaretskii
660e941235 Avoid crashes in PGTK build due to signal in 'note_mouse_highlight'
* src/xdisp.c (string_buffer_position): Make sure the TO argument
of 'string_buffer_position_lim' is always inside [BEGV..ZV].
Otherwise 'string_buffer_position_lim' might call
'get-char-property' and friends with invalid position, which will
just signal an error and do nothing useful.  (Bug#60144)
2022-12-18 10:29:34 +02:00
Eli Zaretskii
0fc5fb2d05 Fix MS-Windows build broken by recent treesit.c changes
* src/treesit.c (init_treesit_functions, ts_tree_cursor_copy)
(ts_tree_cursor_delete): Add boilerplate for using new tree-sitter
functions.
(ts_node_parent): Delete boilerplate of unused function.
2022-12-18 07:57:34 +02:00
Yuan Fu
1fc7535546
Use cursor API in treesit-node-parent
This is the last part of the change that fixes bug#60054.  The
previous change fixes it for searching functions, this fixes for
treesit-node-parent.

* src/treesit.c (Ftreesit_node_parent): Use the new cursor API.
2022-12-17 15:33:54 -08:00
Yuan Fu
5f0286c0af
Switch to use cursor API in treesit.c
ts_node_parent has bugs (bug#60054), using cursor API avoids that.
Tree-sitter's author might remove ts_node_parent in the future, so
might as well switch to use cursors now.  We are basically
reimplementing some of the logic of ts_node_prev_sibling and
ts_node_parent in the sibling helper and cursor helper functions.

See also https://github.com/tree-sitter/tree-sitter/issues/1992

* src/treesit.c (treesit_traverse_sibling_helper)
(treesit_traverse_child_helper)
(treesit_traverse_match_predicate): Reimplemented to use the cursor API.
(treesit_search_dfs)
(treesit_search_forward): Use the new cursor helper functions.
(Ftreesit_search_subtree)
(Ftreesit_search_forward)
(Ftreesit_induce_sparse_tree): Use cursors.

* test/src/treesit-tests.el (treesit-search-subtree): New test.
(treesit--ert-search-setup): New macro.
(treesit-search-forward)
(treesit-search-forward-named-only)
(treesit-search-backward)
(treesit-search-backward-named-only)
(treesit-cursor-helper-with-missing-node): New tests.
2022-12-17 15:33:54 -08:00
Yuan Fu
a275e436df
Add treesit_assume_true and treesit_cursor_helper
This is part 1 of the change to change node API to cursor API.  See
the second part for more detail.  (I splitted the change to make the
diff more sane.)

* src/treesit.c (treesit_assume_true)
(treesit_cursor_helper): New functions.
2022-12-17 15:33:54 -08:00
Paul Eggert
8a9579ca29 Use make-directory handlers uniformly
Formerly, the code supported both make-directory and
make-directory-internal handlers. This led to confusion and meant than
in a few cases (nnmaildir, ido) remote directories could not be used in
some cases.  Fix this by using only make-directory handlers.

Perhaps there used to be a reason for why there were both
make-directory and make-directory-internal handlers, but whatever that
reason was, it seems to have vanished even before now.

There is no longer any need for make-directory-internal handlers, as
the few remaining callers that use make-directory-internal do so only
when there are no handlers.  However, this change keeps the existing
make-directory-internal handlers for now, in case this code is ever
used in older Emacs versions that still call those handlers.

* lisp/gnus/nnmaildir.el (nnmaildir--mkdir):
* lisp/ido.el (ido-file-internal):
* lisp/net/tramp-smb.el (tramp-smb-handle-make-directory):
Use make-directory, not make-directory-internal.
* lisp/net/tramp-smb.el (tramp-smb-handle-make-directory-internal):
Now obsolete.
* src/fileio.c (Fmake_directory_internal): Do not look for or
use a make-directory-internal handler.
* test/lisp/files-tests.el:
(files-tests-file-name-non-special-make-directory-internal):
Remove, as this test incorrectly assumes that make-directory-internal
must support handlers.
2022-12-17 14:24:16 -08:00
Eli Zaretskii
c9015ef55f Fix resizing of mini-windows by 'set-minibuffer-message'
* src/xdisp.c (redisplay_window): Always resize mini-windows
displaying the active minibuffer.  (Bug#60015)
2022-12-17 20:43:56 +02:00
Eli Zaretskii
b9227c502d ; Improve wording of 'format' doc string
* src/editfns.c (Fformat): Use "produce" instead of "print".
(Bug#60125)
2022-12-16 20:46:00 +02:00