Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package emacs for openSUSE:Factory checked 
in at 2026-04-26 21:10:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/emacs (Old)
 and      /work/SRC/openSUSE:Factory/.emacs.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "emacs"

Sun Apr 26 21:10:53 2026 rev:218 rq:1349130 version:30.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/emacs/emacs.changes      2026-04-21 
12:43:01.165937190 +0200
+++ /work/SRC/openSUSE:Factory/.emacs.new.11940/emacs.changes   2026-04-26 
21:11:59.111067467 +0200
@@ -1,0 +2,22 @@
+Fri Apr 24 12:46:33 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Modify patch emacs-30.2-tree-sitter-0.26.8.patch
+  * Let find the tree-sitter code find the libraries below
+    %{_libdir}/tree-sitter/ without using LD_LIBRARY_PATH 
+
+-------------------------------------------------------------------
+Thu Apr 23 08:46:16 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Add patch emacs-30.2-boo1262611.patch
+  * Fix CVE-2026-6861: Memory corruption vulnerability when
+    processing SVG CSS (boo#1262611)
+
+-------------------------------------------------------------------
+Tue Apr 21 08:02:23 UTC 2026 - Dr. Werner Fink <[email protected]>
+
+- Let treesit test find its ruby shared library
+- Modify patch emacs-30.2-tree-sitter-0.26.8.patch
+  * Add commit to reflect new syntax ot tree-sitter like :equal
+    changed to :eq?
+
+-------------------------------------------------------------------

New:
----
  emacs-30.2-boo1262611.patch

----------(New B)----------
  New:
- Add patch emacs-30.2-boo1262611.patch
  * Fix CVE-2026-6861: Memory corruption vulnerability when
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ emacs.spec ++++++
--- /var/tmp/diff_new_pack.2qu5yF/_old  2026-04-26 21:12:00.495124056 +0200
+++ /var/tmp/diff_new_pack.2qu5yF/_new  2026-04-26 21:12:00.499124219 +0200
@@ -258,6 +258,7 @@
 Patch56:        0016-Change-native-comp-async-report-warnings-errors-to-s.patch
 Patch57:        emacs-30.2-fix-zoom.patch
 Patch58:        emacs-30.2-tree-sitter-0.26.8.patch
+Patch59:        emacs-30.2-boo1262611.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %{expand: %%global include_info %(test -s /usr/share/info/info.info* && echo 0 
|| echo 1)}
@@ -437,6 +438,7 @@
 %patch -P56 -p1
 %patch -P57 -p1
 %patch -P58 -p1
+%patch -P59 -p1
 %patch -P1  -p0 -b .xauth
 %if %{with memmmap}
 %patch -P2  -p0 -b .glibc
@@ -540,6 +542,7 @@
 "
 %endif
  CFLAGS="${RPM_OPT_FLAGS} -D_GNU_SOURCE -DGDK_DISABLE_DEPRECATION_WARNINGS 
-DGLIB_DISABLE_DEPRECATION_WARNINGS"
+ CFLAGS="${CFLAGS} -DTREESIT_SYSTEM_GRAMMAR_DIR='\"%{_libdir}/tree-sitter/\"'"
 LDFLAGS=
   cflags -pipe                 CFLAGS
   cflags -Wno-pointer-sign     CFLAGS
@@ -1085,6 +1088,7 @@
     echo No checks within chroot environment
     exit 0
 fi
+# This is treesit test to make it find its ruby lib
 # This is patch emacs-30.2-fix-zoom.patch
 ZOOM_IMAGE_TESTS=broken
 export ZOOM_IMAGE_TESTS

++++++ emacs-30.2-boo1262611.patch ++++++
>From 8f535370b9efbc91673b20c6987a5cae4f6dc562 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii <[email protected]>
Date: Sat, 18 Apr 2026 10:35:05 +0300
Subject: [PATCH] * src/image.c (svg_load_image): Fix off-by-one mistake
 (bug#80851).

---
 src/image.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/image.c b/src/image.c
index b5b7de3351f..d98c63f06c6 100644
--- a/src/image.c
+++ b/src/image.c
@@ -12052,7 +12052,7 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
     {
       css = xmalloc (SBYTES (lcss) + 1);
       strncpy (css, SSDATA (lcss), SBYTES (lcss));
-      *(css + SBYTES (lcss) + 1) = 0;
+      *(css + SBYTES (lcss)) = 0;
     }
 #endif
 
-- 
2.51.0


++++++ emacs-30.2-tree-sitter-0.26.8.patch ++++++
--- /var/tmp/diff_new_pack.2qu5yF/_old  2026-04-26 21:12:00.751134523 +0200
+++ /var/tmp/diff_new_pack.2qu5yF/_new  2026-04-26 21:12:00.767135177 +0200
@@ -19,7 +19,7 @@
 index 0ba6c733d64..8c586109b2d 100644
 --- a/src/treesit.c
 +++ b/src/treesit.c
-@@ -22,6 +22,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
+@@ -22,6 +22,7 @@ along with GNU Emacs.  If not, see <http
  #include <config.h>
  #include "lisp.h"
  #include "buffer.h"
@@ -27,7 +27,7 @@
  
  #include "treesit.h"
  
-@@ -541,6 +542,15 @@ treesit_debug_print_parser_list (char *msg, Lisp_Object 
parser)
+@@ -538,6 +539,15 @@ treesit_debug_print_parser_list (char *m
  
  /*** Loading language library  */
  
@@ -43,7 +43,7 @@
  /* Translate a symbol treesit-<lang> to a C name treesit_<lang>.  */
  static void
  treesit_symbol_to_c_name (char *symbol_name)
-@@ -625,7 +635,7 @@ treesit_load_language_push_for_each_suffix (Lisp_Object 
lib_base_name,
+@@ -637,7 +647,7 @@ treesit_load_language_push_for_each_suff
  
     If error occurs, return NULL and fill SIGNAL_SYMBOL and SIGNAL_DATA
     with values suitable for xsignal.  */
@@ -52,7 +52,7 @@
  treesit_load_language (Lisp_Object language_symbol,
                       Lisp_Object *signal_symbol, Lisp_Object *signal_data)
  {
-@@ -676,6 +686,7 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -688,6 +698,7 @@ treesit_load_language (Lisp_Object langu
    dynlib_handle_ptr handle;
    const char *error;
    Lisp_Object error_list = Qnil;
@@ -60,7 +60,7 @@
  
    tail = path_candidates;
    error = NULL;
-@@ -700,7 +711,7 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -712,7 +723,7 @@ treesit_load_language (Lisp_Object langu
           mismatch.  */
        *signal_symbol = Qtreesit_load_language_error;
        *signal_data = Fcons (Qnot_found, Fnreverse (error_list));
@@ -69,7 +69,7 @@
      }
  
    /* Load TSLanguage.  */
-@@ -722,7 +733,7 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -734,7 +745,7 @@ treesit_load_language (Lisp_Object langu
      {
        *signal_symbol = Qtreesit_load_language_error;
        *signal_data = list2 (Qsymbol_error, build_string (error));
@@ -78,7 +78,7 @@
      }
    TSLanguage *lang = (*langfn) ();
  
-@@ -735,9 +746,14 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -747,9 +758,14 @@ treesit_load_language (Lisp_Object langu
        *signal_symbol = Qtreesit_load_language_error;
        *signal_data = list2 (Qversion_mismatch,
                            make_fixnum (ts_language_version (lang)));
@@ -95,7 +95,7 @@
  }
  
  DEFUN ("treesit-language-available-p", Ftreesit_language_available_p,
-@@ -754,7 +770,9 @@ If DETAIL is non-nil, return (t . nil) when LANGUAGE is 
available,
+@@ -766,7 +782,9 @@ If DETAIL is non-nil, return (t . nil) w
    treesit_initialize ();
    Lisp_Object signal_symbol = Qnil;
    Lisp_Object signal_data = Qnil;
@@ -106,7 +106,7 @@
      {
        if (NILP (detail))
        return Qnil;
-@@ -800,9 +818,9 @@ Return nil if a grammar library for LANGUAGE is not 
available.  */)
+@@ -812,9 +830,9 @@ Return nil if a grammar library for LANG
      {
        Lisp_Object signal_symbol = Qnil;
        Lisp_Object signal_data = Qnil;
@@ -119,7 +119,7 @@
        if (ts_language == NULL)
        return Qnil;
        uint32_t version =  ts_language_version (ts_language);
-@@ -810,6 +828,30 @@ Return nil if a grammar library for LANGUAGE is not 
available.  */)
+@@ -822,6 +840,30 @@ Return nil if a grammar library for LANG
      }
  }
  
@@ -150,7 +150,7 @@
  
  /*** Parsing functions  */
  
-@@ -1401,8 +1443,9 @@ treesit_ensure_query_compiled (Lisp_Object query, 
Lisp_Object *signal_symbol,
+@@ -1449,8 +1491,9 @@ treesit_ensure_query_compiled (Lisp_Obje
    Lisp_Object language = XTS_COMPILED_QUERY (query)->language;
    /* This is the main reason why we compile query lazily: to avoid
       loading languages early.  */
@@ -162,7 +162,7 @@
    if (treesit_lang == NULL)
      return NULL;
  
-@@ -1573,8 +1616,9 @@ an indirect buffer.  */)
+@@ -1604,8 +1647,9 @@ an indirect buffer.  */)
    Lisp_Object signal_symbol = Qnil;
    Lisp_Object signal_data = Qnil;
    TSParser *parser = ts_parser_new ();
@@ -174,7 +174,7 @@
    if (lang == NULL)
      xsignal (signal_symbol, signal_data);
    /* We check language version when loading a language, so this should
-@@ -4369,6 +4413,7 @@ applies to LANGUAGE-A will be redirected to LANGUAGE-B 
instead.  */);
+@@ -4352,6 +4396,7 @@ the symbol of that THING.  For example,
    defsubr (&Streesit_language_available_p);
    defsubr (&Streesit_library_abi_version);
    defsubr (&Streesit_language_abi_version);
@@ -206,7 +206,7 @@
 index a353bc942d3..68de843ce4d 100644
 --- a/lisp/treesit.el
 +++ b/lisp/treesit.el
-@@ -4297,7 +4297,7 @@ instead of emitting a warning."
+@@ -3059,7 +3059,7 @@ instead of emitting a warning."
          (pcase-let ((`(,available . ,err)
                       (treesit-language-available-p lang t)))
            (when (not available)
@@ -219,7 +219,7 @@
 index 3a19e0cb282..de74e41c89a 100644
 --- a/src/treesit.c
 +++ b/src/treesit.c
-@@ -757,6 +757,7 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -704,6 +704,7 @@ treesit_load_language (Lisp_Object language_symbol,
    error = NULL;
    handle = NULL;
  
@@ -227,7 +227,7 @@
    FOR_EACH_TAIL (tail)
      {
        char *library_name = SSDATA (XCAR (tail));
-@@ -764,7 +765,10 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -711,7 +712,10 @@ treesit_load_language (Lisp_Object language_symbol,
        handle = dynlib_open (library_name);
        error = dynlib_error ();
        if (error == NULL)
@@ -239,7 +239,7 @@
        else
        error_list = Fcons (build_string (error), error_list);
      }
-@@ -808,9 +812,15 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -755,9 +759,15 @@ treesit_load_language (Lisp_Object language_symbol,
    ts_parser_delete (parser);
    if (!success)
      {
@@ -257,7 +257,7 @@
        return loaded_lang;
      }
  
-@@ -5091,7 +5101,7 @@ syms_of_treesit (void)
+@@ -4241,7 +4251,7 @@ syms_of_treesit (void)
  
    DEFSYM (Qnot_found, "not-found");
    DEFSYM (Qsymbol_error, "symbol-error");
@@ -340,7 +340,7 @@
  #define ts_node_child fn_ts_node_child
  #define ts_node_child_by_field_name fn_ts_node_child_by_field_name
  #define ts_node_child_count fn_ts_node_child_count
-@@ -711,6 +727,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Object 
lib_base_name,
+@@ -642,6 +658,22 @@ treesit_load_language_push_for_each_suffix (Lisp_Object 
lib_base_name,
      }
  }
  
@@ -363,7 +363,7 @@
  /* Load the dynamic library of LANGUAGE_SYMBOL and return the pointer
     to the language definition.
  
-@@ -832,7 +864,7 @@ treesit_load_language (Lisp_Object language_symbol,
+@@ -763,7 +795,7 @@ treesit_load_language (Lisp_Object language_symbol,
        build_string ("%s's ABI version is %d, but supported versions are 
%d-%d");
        Lisp_Object formatted_msg =
        CALLN (Fformat_message, fmt, loaded_lib,
@@ -372,7 +372,7 @@
               make_fixnum (TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION),
               make_fixnum (TREE_SITTER_LANGUAGE_VERSION));
        *signal_symbol = Qtreesit_load_language_error;
-@@ -914,7 +946,7 @@ Return nil if a grammar library for LANGUAGE is not 
available.  */)
+@@ -845,7 +877,7 @@ Return nil if a grammar library for LANGUAGE is not 
available.  */)
        TSLanguage *ts_language = lang.lang;
        if (ts_language == NULL)
        return Qnil;
@@ -384,4 +384,334 @@
 -- 
 2.51.0
 
+From b01435306a36e4e75671fbe7bacea351f89947d5 Mon Sep 17 00:00:00 2001
+From: Yuan Fu <[email protected]>
+Date: Sun, 2 Nov 2025 16:16:50 -0800
+Subject: [PATCH] Change tree-sitter query predicate names (bug#79687)
+
+Latest tree-sitter library throws a syntax error if the
+predicate names in a query don't end with question mark.  So we
+made the following change:
+
+:equal changed to :eq?
+:match changed to :match?
+:pred changed to :pred?
+
+Old names are transparently converted to new names when
+expanding patterns.
+
+:match predicate can now take the regexp and the node in any
+order: it'll figure out which is which automatically. This way
+it works with current Emacs convention (regexp first), as well
+as tree-sitter's match convention (regexp second).
+
+* doc/lispref/parsing.texi (Pattern Matching): Update manuel to
+use new predicate names.
+* src/treesit.c:
+(Ftreesit_pattern_expand):
+(Ftreesit_query_expand):
+(treesit_predicate_match):
+(treesit_eval_predicates):
+(syms_of_treesit): Use new predicate names.
+* test/src/treesit-tests.el (treesit-query-api): Update test.
+---
+ doc/lispref/parsing.texi  |   34 ++++++++++-------
+ src/treesit.c             |   90 
++++++++++++++++++++++++----------------------
+ test/src/treesit-tests.el |    6 +--
+ 3 files changed, 71 insertions(+), 59 deletions(-)
+
+--- a/doc/lispref/parsing.texi
++++ b/doc/lispref/parsing.texi 2026-04-21 11:28:33.986819462 +0000
+@@ -1375,7 +1375,7 @@ example, with the following pattern:
+ @group
+ (
+  (array :anchor (_) @@first (_) @@last :anchor)
+- (:equal @@first @@last)
++ (:eq? @@first @@last)
+ )
+ @end group
+ @end example
+@@ -1384,24 +1384,32 @@ example, with the following pattern:
+ tree-sitter only matches arrays where the first element is equal to
+ the last element.  To attach a predicate to a pattern, we need to
+ group them together.  Currently there are three predicates:
+-@code{:equal}, @code{:match}, and @code{:pred}.
++@code{:eq?}, @code{:match?}, and @code{:pred?}.
+ 
+-@deffn Predicate :equal arg1 arg2
++@deffn Predicate :eq? arg1 arg2
+ Matches if @var{arg1} is equal to @var{arg2}.  Arguments can be either
+ strings or capture names.  Capture names represent the text that the
+-captured node spans in the buffer.
++captured node spans in the buffer.  Note that this is more like
++@code{equal} in Elisp, but @code{eq?} is the convention used by
++tree-sitter.  Previously we supported the @code{:equal} predicate but
++it's now considered deprecated.
+ @end deffn
+ 
+-@deffn Predicate :match regexp capture-name
++@deffn Predicate :match? capture-name regexp
+ Matches if the text that @var{capture-name}'s node spans in the buffer
+ matches regular expression @var{regexp}, given as a string literal.
+-Matching is case-sensitive.
++Matching is case-sensitive.  The ordering of the arguments doesn't
++matter.  Previously we supported the @code{:match} predicate but it's
++now considered deprecated.
+ @end deffn
+ 
+-@deffn Predicate :pred fn &rest nodes
++@deffn Predicate :pred? fn &rest nodes
+ Matches if function @var{fn} returns non-@code{nil} when passed each
+ node in @var{nodes} as arguments.  The function runs with the current
+-buffer set to the buffer of node being queried.
++buffer set to the buffer of node being queried.  Be very careful when
++using this predicate, since it can be expensive when used in a tight
++loop.  Previously we supported the @code{:pred} predicate but it's now
++considered deprecated.
+ @end deffn
+ 
+ Note that a predicate can only refer to capture names that appear in
+@@ -1456,9 +1464,9 @@ Anchor @code{:anchor} is written as @sam
+ @item
+ @samp{:+} is written as @samp{+}.
+ @item
+-@code{:equal}, @code{:match} and @code{:pred} are written as
+-@code{#equal}, @code{#match} and @code{#pred}, respectively.
+-In general, predicates change their @samp{:} to @samp{#}.
++@code{:eq?}, @code{:match?} and @code{:pred?} are written as
++@code{#eq?}, @code{#match?} and @code{#pred?}, respectively.  In
++general, predicates change the @samp{:} to @samp{#}.
+ @end itemize
+ 
+ For example,
+@@ -1467,7 +1475,7 @@ For example,
+ @group
+ '((
+    (compound_expression :anchor (_) @@first (_) :* @@rest)
+-   (:match "love" @@first)
++   (:match? "love" @@first)
+    ))
+ @end group
+ @end example
+@@ -1479,7 +1487,7 @@ is written in string form as
+ @group
+ "(
+   (compound_expression . (_) @@first (_)* @@rest)
+-  (#match \"love\" @@first)
++  (#match? \"love\" @@first)
+   )"
+ @end group
+ @end example
+--- a/src/treesit.c
++++ b/src/treesit.c    2026-04-21 11:21:26.262613893 +0000
+@@ -432,17 +432,17 @@ static Lisp_Object Vtreesit_str_dot;
+ static Lisp_Object Vtreesit_str_question_mark;
+ static Lisp_Object Vtreesit_str_star;
+ static Lisp_Object Vtreesit_str_plus;
+-static Lisp_Object Vtreesit_str_pound_equal;
+-static Lisp_Object Vtreesit_str_pound_match;
+-static Lisp_Object Vtreesit_str_pound_pred;
++static Lisp_Object Vtreesit_str_pound_eq_question_mark;
++static Lisp_Object Vtreesit_str_pound_match_question_mark;
++static Lisp_Object Vtreesit_str_pound_pred_question_mark;
+ static Lisp_Object Vtreesit_str_open_bracket;
+ static Lisp_Object Vtreesit_str_close_bracket;
+ static Lisp_Object Vtreesit_str_open_paren;
+ static Lisp_Object Vtreesit_str_close_paren;
+ static Lisp_Object Vtreesit_str_space;
+-static Lisp_Object Vtreesit_str_equal;
+-static Lisp_Object Vtreesit_str_match;
+-static Lisp_Object Vtreesit_str_pred;
++static Lisp_Object Vtreesit_str_eq_question_mark;
++static Lisp_Object Vtreesit_str_match_question_mark;
++static Lisp_Object Vtreesit_str_pred_question_mark;
+ static Lisp_Object Vtreesit_str_empty;
+ 
+ /* This is the limit on recursion levels for some tree-sitter
+@@ -2690,12 +2690,12 @@ See Info node `(elisp)Pattern Matching'
+     return Vtreesit_str_star;
+   if (BASE_EQ (pattern, QCplus))
+     return Vtreesit_str_plus;
+-  if (BASE_EQ (pattern, QCequal))
+-    return Vtreesit_str_pound_equal;
+-  if (BASE_EQ (pattern, QCmatch))
+-    return Vtreesit_str_pound_match;
+-  if (BASE_EQ (pattern, QCpred))
+-    return Vtreesit_str_pound_pred;
++  if (BASE_EQ (pattern, QCequal) || BASE_EQ (pattern, QCeq_q))
++    return Vtreesit_str_pound_eq_question_mark;
++  if (BASE_EQ (pattern, QCmatch) || BASE_EQ (pattern, QCmatch_q))
++    return Vtreesit_str_pound_match_question_mark;
++  if (BASE_EQ (pattern, QCpred) || BASE_EQ (pattern, QCpred_q))
++    return Vtreesit_str_pound_pred_question_mark;
+   Lisp_Object opening_delimeter
+     = VECTORP (pattern)
+       ? Vtreesit_str_open_bracket : Vtreesit_str_open_paren;
+@@ -2726,7 +2726,9 @@ A PATTERN in QUERY can be
+     :*
+     :+
+     :equal
++    :eq?
+     :match
++    :match?
+     (TYPE PATTERN...)
+     [PATTERN...]
+     FIELD-NAME:
+@@ -2889,7 +2891,7 @@ treesit_predicate_equal (Lisp_Object arg
+   return !NILP (Fstring_equal (text1, text2));
+ }
+ 
+-/* Handles predicate (#match "regexp" @node).  Return true if "regexp"
++/* Handles predicate (#match? "regexp" @node).  Return true if "regexp"
+    matches the text spanned by @node; return false otherwise.
+    Matching is case-sensitive.  If everything goes fine, don't touch
+    SIGNAL_DATA; if error occurs, set it to a suitable signal data.  */
+@@ -2899,26 +2901,25 @@ treesit_predicate_match (Lisp_Object arg
+ {
+   if (list_length (args) != 2)
+     {
+-      *signal_data = list2 (build_string ("Predicate `match' requires two "
++      *signal_data = list2 (build_string ("Predicate `match?' requires two "
+                                         "arguments but got"),
+                           Flength (args));
+       return false;
+     }
+-  Lisp_Object regexp = XCAR (args);
+-  Lisp_Object capture_name = XCAR (XCDR (args));
++  Lisp_Object arg1 = XCAR (args);
++  Lisp_Object arg2 = XCAR (XCDR (args));
++  Lisp_Object regexp = SYMBOLP (arg2) ? arg1 : arg2;
++  Lisp_Object capture_name = SYMBOLP (arg2) ? arg2 : arg1;
++
++  if (!STRINGP (regexp) || !SYMBOLP (capture_name))
++    {
++      *signal_data = list2 (build_string ("Predicate `match?' takes a regexp "
++                                        "and a node capture (order doesn't "
++                                        "matter), but got"),
++                          Flength (args));
++      return false;
++    }
+ 
+-  /* It's probably common to get the argument order backwards.  Catch
+-     this mistake early and show helpful explanation, because Emacs
+-     loves you.  (We put the regexp first because that's what
+-     string-match does.)  */
+-  if (!STRINGP (regexp))
+-    xsignal1 (Qtreesit_query_error,
+-            build_string ("The first argument to `match' should "
+-                          "be a regexp string, not a capture name"));
+-  if (!SYMBOLP (capture_name))
+-    xsignal1 (Qtreesit_query_error,
+-            build_string ("The second argument to `match' should "
+-                          "be a capture name, not a string"));
+ 
+   Lisp_Object node = Qnil;
+   if (!treesit_predicate_capture_name_to_node (capture_name, captures, &node,
+@@ -3002,11 +3003,11 @@ treesit_eval_predicates (struct capture_
+       Lisp_Object predicate = XCAR (tail);
+       Lisp_Object fn = XCAR (predicate);
+       Lisp_Object args = XCDR (predicate);
+-      if (!NILP (Fstring_equal (fn, Vtreesit_str_equal)))
++      if (!NILP (Fstring_equal (fn, Vtreesit_str_eq_question_mark)))
+       pass &= treesit_predicate_equal (args, captures, signal_data);
+-      else if (!NILP (Fstring_equal (fn, Vtreesit_str_match)))
++      else if (!NILP (Fstring_equal (fn, Vtreesit_str_match_question_mark)))
+       pass &= treesit_predicate_match (args, captures, signal_data);
+-      else if (!NILP (Fstring_equal (fn, Vtreesit_str_pred)))
++      else if (!NILP (Fstring_equal (fn, Vtreesit_str_pred_question_mark)))
+       pass &= treesit_predicate_pred (args, captures, signal_data);
+       else
+       {
+@@ -4278,8 +4279,11 @@ syms_of_treesit (void)
+   DEFSYM (QCstar, ":*");
+   DEFSYM (QCplus, ":+");
+   DEFSYM (QCequal, ":equal");
++  DEFSYM (QCeq_q, ":eq?");
+   DEFSYM (QCmatch, ":match");
++  DEFSYM (QCmatch_q, ":match?");
+   DEFSYM (QCpred, ":pred");
++  DEFSYM (QCpred_q, ":pred?");
+ 
+   DEFSYM (Qnot_found, "not-found");
+   DEFSYM (Qsymbol_error, "symbol-error");
+@@ -4410,12 +4414,12 @@ the symbol of that THING.  For example,
+   Vtreesit_str_star = build_pure_c_string ("*");
+   staticpro (&Vtreesit_str_plus);
+   Vtreesit_str_plus = build_pure_c_string ("+");
+-  staticpro (&Vtreesit_str_pound_equal);
+-  Vtreesit_str_pound_equal = build_pure_c_string ("#equal");
+-  staticpro (&Vtreesit_str_pound_match);
+-  Vtreesit_str_pound_match = build_pure_c_string ("#match");
+-  staticpro (&Vtreesit_str_pound_pred);
+-  Vtreesit_str_pound_pred = build_pure_c_string ("#pred");
++  staticpro (&Vtreesit_str_pound_eq_question_mark);
++  Vtreesit_str_pound_eq_question_mark = build_string ("#eq?");
++  staticpro (&Vtreesit_str_pound_match_question_mark);
++  Vtreesit_str_pound_match_question_mark = build_string ("#match?");
++  staticpro (&Vtreesit_str_pound_pred_question_mark);
++  Vtreesit_str_pound_pred_question_mark = build_string ("#pred?");
+   staticpro (&Vtreesit_str_open_bracket);
+   Vtreesit_str_open_bracket = build_pure_c_string ("[");
+   staticpro (&Vtreesit_str_close_bracket);
+@@ -4426,12 +4430,12 @@ the symbol of that THING.  For example,
+   Vtreesit_str_close_paren = build_pure_c_string (")");
+   staticpro (&Vtreesit_str_space);
+   Vtreesit_str_space = build_pure_c_string (" ");
+-  staticpro (&Vtreesit_str_equal);
+-  Vtreesit_str_equal = build_pure_c_string ("equal");
+-  staticpro (&Vtreesit_str_match);
+-  Vtreesit_str_match = build_pure_c_string ("match");
+-  staticpro (&Vtreesit_str_pred);
+-  Vtreesit_str_pred = build_pure_c_string ("pred");
++  staticpro (&Vtreesit_str_eq_question_mark);
++  Vtreesit_str_eq_question_mark = build_string ("eq?");
++  staticpro (&Vtreesit_str_match_question_mark);
++  Vtreesit_str_match_question_mark = build_string ("match?");
++  staticpro (&Vtreesit_str_pred_question_mark);
++  Vtreesit_str_pred_question_mark = build_string ("pred?");
+   staticpro (&Vtreesit_str_empty);
+   Vtreesit_str_empty = build_pure_c_string ("");
+ 
+--- a/test/src/treesit-tests.el
++++ b/test/src/treesit-tests.el        2026-04-21 11:28:33.986819462 +0000
+@@ -434,10 +434,10 @@ BODY is the test body."
+                ;; String query.
+                '("(string) @string
+ (pair key: (_) @keyword)
+-((_) @bob (#match \"\\\\`B.b\\\\'\" @bob))
++((_) @bob (#match? \"\\\\`B.b\\\\'\" @bob))
+ (number) @number
+-((number) @n3 (#equal \"3\" @n3))
+-((number) @n3p (#pred treesit--ert-pred-last-sibling @n3p))"
++((number) @n3 (#eq? \"3\" @n3))
++((number) @n3p (#pred? treesit--ert-pred-last-sibling @n3p))"
+                  ;; Sexp query.
+                  ((string) @string
+                   (pair key: (_) @keyword)
+From: [email protected]
+Date: Fri, 24 Apr 2026 13:13:32 +0200
+Subject: [FIX] Let treesit find libraries below %{_libdir}/tree-sitter/
+
+---
+ src/treesit.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- emacs-30.2/src/treesit.c
++++ emacs-30.2/src/treesit.c   2026-04-24 12:06:16.936246505 +0000
+@@ -712,6 +712,15 @@ treesit_load_language (Lisp_Object langu
+     = Fexpand_file_name (concat2 (build_string ("tree-sitter/"), 
lib_base_name),
+                        Fsymbol_value (Quser_emacs_directory));
+   treesit_load_language_push_for_each_suffix (lib_name, &path_candidates);
++
++  /* --- START SUSE SYSTEM TREE-SITTER LOAD PATH --- */
++#ifdef TREESIT_SYSTEM_GRAMMAR_DIR
++  Lisp_Object sys_prefix = concat2 (build_string (TREESIT_SYSTEM_GRAMMAR_DIR),
++                         lib_base_name);
++  treesit_load_language_push_for_each_suffix (sys_prefix, &path_candidates);
++#endif
++  /* --- END SUSE SYSTEM TREE-SITTER LOAD PATH --- */
++
+   /* Then push paths from treesit-extra-load-path.  */
+   Lisp_Object tail;
+ 
 

Reply via email to