Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ugrep for openSUSE:Factory checked 
in at 2023-08-16 14:17:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ugrep (Old)
 and      /work/SRC/openSUSE:Factory/.ugrep.new.11712 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ugrep"

Wed Aug 16 14:17:34 2023 rev:48 rq:1104080 version:3.12.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/ugrep/ugrep.changes      2023-08-08 
15:55:08.177069080 +0200
+++ /work/SRC/openSUSE:Factory/.ugrep.new.11712/ugrep.changes   2023-08-16 
14:17:37.823201866 +0200
@@ -1,0 +2,9 @@
+Tue Aug 15 18:20:54 UTC 2023 - Andreas Stieger <andreas.stie...@gmx.de>
+
+- update to 3.12.7:
+  * compatibility improvement with one of GNU grep's idiosyncrasies:
+    unpaired ) in regex are matched literally. This behavior is
+    automatically in effect when the grep and egrep aliases of
+    ugrep are used or explicitly with option -Y.
+
+-------------------------------------------------------------------

Old:
----
  ugrep-3.12.6.tar.gz

New:
----
  ugrep-3.12.7.tar.gz

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

Other differences:
------------------
++++++ ugrep.spec ++++++
--- /var/tmp/diff_new_pack.ad2Zyv/_old  2023-08-16 14:17:38.647207635 +0200
+++ /var/tmp/diff_new_pack.ad2Zyv/_new  2023-08-16 14:17:38.651207663 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           ugrep
-Version:        3.12.6
+Version:        3.12.7
 Release:        0
 Summary:        Universal grep: a feature-rich grep implementation with focus 
on speed
 License:        BSD-3-Clause

++++++ ugrep-3.12.6.tar.gz -> ugrep-3.12.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/README.md new/ugrep-3.12.7/README.md
--- old/ugrep-3.12.6/README.md  2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/README.md  2023-08-14 20:03:34.000000000 +0200
@@ -5,6 +5,10 @@
 
 Ugrep is like grep, but faster, user-friendly, and equipped with must-have 
features.  Ugrep's speed and features beat grep, ripgrep, silver searcher, ack, 
sift, etc.
 
+New faster ugrep 3.12.6 and new **ugrep-indexer** tool to accelerate search 
with file system indexing.  Visit [GitHub 
ugrep-indexer](https://github.com/Genivia/ugrep-indexer) for details.
+
+See [how to install ugrep](#install) on your system.
+
 The ugrep tools include the following powerful commands:
 - **ug** for interactive use with a .ugrep configuration file with your 
preferences located in the working directory or home directory (run 'ug 
--save-config' to create a .ugrep file you can edit)
 - **ug+** for interactive use, also searches pdfs, documents, e-books, image 
metadata
@@ -15,15 +19,24 @@
 <br>
 <img src="https://www.genivia.com/images/scranim.gif"; width="438" alt="">
 
-- Written in clean and efficient C++11 for advanced features and speed, 
thoroughly tested
+Development roadmap
+-------------------
 
-- Portable (Linux, Unix, MacOS, Windows, etc), includes binaries for Windows 
in the [releases](https://github.com/Genivia/ugrep/releases)
+- my highest priority is testing and quality assurance to continue to make 
sure ugrep has no bugs and is reliable
+- make ugrep even faster, see [my latest blog 
article](https://www.genivia.com/ugrep.html) demonstrating with a reproducible 
benchmark that ugrep beats GNU grep and ripgrep in terms of raw performance
+- listen to users to continue to improve ugrep with new and updated features
+- share reproducible performance data with the community
+- improve the interactive TUI with a split screen
+- add file indexing to speed up cold search performance, see 
[ugrep-indexer](https://github.com/Genivia/ugrep-indexer)
+
+Overview
+--------
 
 - Supports all GNU/BSD grep standard options; ugrep is a faster [compatible 
replacement](#grep) for GNU/BSD grep
 
 - Matches Unicode patterns by default in UTF-8, UTF-16, UTF-32 encoded files
 
-- Matches multiple lines with `\n` and `\R` regex patterns
+- Matches multiple lines with `\n` or `\R` in regex patterns, *no special 
options are required to do so!*
 
 - Built-in help: `ug --help`, where `ug --help WHAT` displays options related 
to `WHAT` you are looking for
 
@@ -41,12 +54,6 @@
 
   💡**ProTip** `-Q` replaces `PATTERN` on the command line to type your 
patterns interactively instead.  Specify `-e PATTERN` to search and edit the 
`PATTERN` in the TUI.  For quicker search responses to keypresses, try `-Q1` 
(fast, 100ms delay) to `-Q5` (default 500ms delay).
 
-- Find approximate pattern matches with [fuzzy search](#fuzzy), within the 
specified Levenshtein distance
-
-      ug -Z PATTERN ...                      ug -Z3 PATTTERN ...
-
-  💡**ProTip** `-Zn` matches up to `n` extra, missing or replaced 
characters, `-Z+n` matches up to `n` extra characters, `-Z-n` matches with up 
to `n` missing characters and `-Z~n` matches up to `n` replaced characters.  
`-Z` defaults to `-Z1`.
-
 - Search with Google-like [Boolean query patterns](#bool) using `--bool` 
patterns with `AND` (or just space), `OR` (or a bar `|`), `NOT` (or a dash 
`-`), using quotes to match exactly, and grouping with `( )`; or with options 
`-e` (as an "or"), `--and`, `--andnot`, and `--not` regex patterns
 
       ug --bool 'A B C' ...                  ug -e 'A' --and 'B' --and 'C' ...
@@ -59,12 +66,6 @@
 
   💡**ProTip** specify `--files --bool` to apply the Boolean query to files 
as a whole: a file matches if all Boolean conditions are satisfied by matching 
patterns file-wide.  Otherwise, Boolean conditions apply to single lines by 
default, since grep utilities are generally line-based pattern matchers.  
Option `--stats` displays the query in human-readable form after the search 
completes.
 
-- Fzf-like search with regex (or fixed strings with `-F`), fuzzy matching with 
up to 4 extra characters with `-Z+4` and words only with `-w`, using `--files 
--bool` for file-wide Boolean searches
-
-      ug -Q1 --files --bool -l -w -Z+4 --sort=best
-
-  💡**ProTip** `-l` lists the matching files in the TUI, press `TAB` then 
`ALT-y` to view a file, `SHIFT-TAB` and `Alt-l` to go back to view the list of 
matching files ordered by best match
-
 - Search the contents of [archives](#archives) (cpio, jar, tar, pax, zip) and 
[compressed files](#archives) (zip, gz, Z, bz, bz2, lzma, xz, lz4, zstd)
 
       ug -z PATTERN ...                      ug -z --zmax=2 PATTERN ...
@@ -84,6 +85,18 @@
 
   💡**ProTip** the `ug+` command is the same as the `ug` command, but also 
uses filters to search PDFs, documents, and image metadata, when the 
[`pdftotext`](https://pypi.org/project/pdftotext), 
[`antiword`](https://github.com/rsdoiel/antiword), 
[`pandoc`](https://pandoc.org), and 
[`exiftool`](https://exiftool.sourceforge.net) are installed (optionally, not 
used when not installed).
 
+- Find approximate pattern matches with [fuzzy search](#fuzzy), within the 
specified Levenshtein distance
+
+      ug -Z PATTERN ...                      ug -Z3 PATTTERN ...
+
+  💡**ProTip** `-Zn` matches up to `n` extra, missing or replaced 
characters, `-Z+n` matches up to `n` extra characters, `-Z-n` matches with up 
to `n` missing characters and `-Z~n` matches up to `n` replaced characters.  
`-Z` defaults to `-Z1`.
+
+- Fzf-like search with regex (or fixed strings with `-F`), fuzzy matching with 
up to 4 extra characters with `-Z+4` and words only with `-w`, using `--files 
--bool` for file-wide Boolean searches
+
+      ug -Q1 --files --bool -l -w -Z+4 --sort=best
+
+  💡**ProTip** `-l` lists the matching files in the TUI, press `TAB` then 
`ALT-y` to view a file, `SHIFT-TAB` and `Alt-l` to go back to view the list of 
matching files ordered by best match
+
 - Search [binary files](#binary) and display hexdumps with binary pattern 
matches (Unicode text or `-U` for byte patterns)
 
       ug --hexdump -U BYTEPATTERN ...        ug --hexdump TEXTPATTERN ...
@@ -699,7 +712,7 @@
 over grep](#improvements).
 
 If you want to stick exactly to GNU/BSD grep ASCII/LATIN1 non-UTF Unicode
-patterns, use `ugrep -U` to disable full Unicode pattern matching.
+patterns, use option `-U` to disable full Unicode pattern matching.
 
 In fact, executing `ugrep` with options `-U`, `-Y`, `-.` and `--sort` makes it
 behave exactly like `egrep`, matching only ASCII/LATIN1 non-UTF Unicode
@@ -797,10 +810,10 @@
 - **ugrep** starts an interactive query TUI with option `-Q`.
 - **ugrep** matches patterns across multiple lines when patterns match `\n`.
 - **ugrep** matches full Unicode by default (disabled with option `-U`).
-- **ugrep** supports fuzzy (approximate) matching with option `-Z`.
+- **ugrep** supports Boolean patterns with AND, OR and NOT (option `--bool`).
 - **ugrep** supports gitignore with option `--ignore-files`.
+- **ugrep** supports fuzzy (approximate) matching with option `-Z`.
 - **ugrep** supports user-defined global and local configuration files.
-- **ugrep** supports Boolean patterns with AND, OR and NOT (option `--bool`).
 - **ugrep** searches compressed files and archives with option `-z`.
 - **ugrep** searches cpio, jar, pax, tar and zip archives with option `-z`.
 - **ugrep** searches cpio, jar, pax, tar and zip archives recursively stored
@@ -867,7 +880,7 @@
   searching for identifiers in source code and find matches that aren't in
   strings and comments.  Predefined `zap` patterns use negative patterns, for
   example, use `-f cpp/zap_comments` to ignore pattern matches in C++ comments.
-- **ugrep** does not the `GREP_OPTIONS` environment variable, because the
+- **ugrep** ignores the `GREP_OPTIONS` environment variable, because the
   behavior of **ugrep** must be portable and predictable on every system.  Also
   GNU grep abandoned `GREP_OPTIONS` for this reason.  Please use the `ug`
   command that loads the .ugrep configuration file located in the working
@@ -2353,7 +2366,7 @@
 
 To recursively search for approximate matches of the word `foobar` with `-Z`,
 i.e.  approximate matching with one error, e.g. `Foobar`, `foo_bar`, `foo bar`,
-`fobar`:
+`fobar` and other forms with one missing, one extra or one deleted character:
 
     ug -Z 'foobar'
 
@@ -5345,7 +5358,7 @@
 
 
 
-    ugrep 3.12.6                     August 6, 2023                         
UGREP(1)
+    ugrep 3.12.7                     August 14, 2023                        
UGREP(1)
 
 🔝 [Back to table of contents](#toc)
 
Binary files old/ugrep-3.12.6/bin/win32/ugrep.exe and 
new/ugrep-3.12.7/bin/win32/ugrep.exe differ
Binary files old/ugrep-3.12.6/bin/win64/ugrep.exe and 
new/ugrep-3.12.7/bin/win64/ugrep.exe differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/include/reflex/convert.h 
new/ugrep-3.12.7/include/reflex/convert.h
--- old/ugrep-3.12.6/include/reflex/convert.h   2023-08-06 22:29:36.000000000 
+0200
+++ new/ugrep-3.12.7/include/reflex/convert.h   2023-08-14 20:03:34.000000000 
+0200
@@ -68,7 +68,8 @@
   const convert_flag_type dotall     = 0x0080; ///< convert `.` (dot) to match 
all, same as `(?s)`
   const convert_flag_type freespace  = 0x0100; ///< convert regex by removing 
spacing, same as `(?x)`
   const convert_flag_type notnewline = 0x0200; ///< inverted character classes 
and \s do not match newline `\n`
-  const convert_flag_type permissive = 0x0400; ///< convert Unicode to compact 
UTF-8 patterns and DFA, permits some invalid UTF-8 sequences
+  const convert_flag_type permissive = 0x0400; ///< convert Unicode to compact 
UTF-8 patterns, permits some invalid UTF-8 sequences
+  const convert_flag_type closing    = 0x8000; ///< permit matching ) when it 
has no opening (
 }
 
 /// @brief Returns the converted regex string given a regex library signature 
and conversion flags, throws regex_error.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/include/reflex/pattern.h 
new/ugrep-3.12.7/include/reflex/pattern.h
--- old/ugrep-3.12.6/include/reflex/pattern.h   2023-08-06 22:29:36.000000000 
+0200
+++ new/ugrep-3.12.7/include/reflex/pattern.h   2023-08-14 20:03:34.000000000 
+0200
@@ -803,15 +803,15 @@
     Option() : b(), h(), e(), f(), i(), m(), n(), o(), p(), q(), r(), s(), 
w(), x(), z() { }
     bool                     b; ///< disable escapes in bracket lists
     bool                     h; ///< construct indexing hash finite state 
automaton
-    Char                     e; ///< escape character, or > 255 for none, '\\' 
default
-    std::vector<std::string> f; ///< output to files
+    Char                     e; ///< escape character, or > 255 for none, a 
backslash by default
+    std::vector<std::string> f; ///< output the patterns and/or DFA to files(s)
     bool                     i; ///< case insensitive mode, also `(?i:X)`
     bool                     m; ///< multi-line mode, also `(?m:X)`
     std::string              n; ///< pattern name (for use in generated code)
     bool                     o; ///< generate optimized FSM code for option f
     bool                     p; ///< with option f also output predict match 
array for fast search with find()
     bool                     q; ///< enable "X" quotation of verbatim content, 
also `(?q:X)`
-    bool                     r; ///< raise syntax errors
+    bool                     r; ///< raise syntax errors as exceptions
     bool                     s; ///< single-line mode (dotall mode), also 
`(?s:X)`
     bool                     w; ///< write error message to stderr
     bool                     x; ///< free-spacing mode, also `(?x:X)`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/lib/convert.cpp 
new/ugrep-3.12.7/lib/convert.cpp
--- old/ugrep-3.12.6/lib/convert.cpp    2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/lib/convert.cpp    2023-08-14 20:03:34.000000000 +0200
@@ -1750,19 +1750,35 @@
         else
         {
           if (lev == 1)
-            throw regex_error(regex_error::mismatched_parens, pattern, pos);
-          if (beg)
+          {
+            if (!(flags & convert_flag::closing))
+              throw regex_error(regex_error::mismatched_parens, pattern, pos);
+            if (!(flags & convert_flag::basic) || bre)
+            {
+              // translate a closing ) to \) when it has no opening (
+              regex.append(&pattern[loc], pos - loc).push_back('\\');
+              loc = pos;
+              anc = false;
+              beg = false;
+            }
+          }
+          else if (beg)
+          {
             throw regex_error(regex_error::empty_expression, pattern, pos);
-          if (lap == lev)
+          }
+          else
           {
-            // lex lookahead: translate ) to ))
-            regex.append(&pattern[loc], pos - loc).push_back(')');
-            loc = pos;
-            lap = 0;
+            if (lap == lev)
+            {
+              // lex lookahead: translate ) to ))
+              regex.append(&pattern[loc], pos - loc).push_back(')');
+              loc = pos;
+              lap = 0;
+            }
+            // terminate (?isx:...)
+            mod[lev].clear();
+            --lev;
           }
-          // terminate (?isx:...)
-          mod[lev].clear();
-          --lev;
         }
         break;
       case '|':
@@ -2005,10 +2021,6 @@
           anc = false;
           beg = false;
         }
-        else
-        {
-          throw regex_error(regex_error::mismatched_braces, pattern, pos);
-        }
         break;
       case '#':
         if ((flags & convert_flag::lex) && (flags & convert_flag::freespace))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/lib/pattern.cpp 
new/ugrep-3.12.7/lib/pattern.cpp
--- old/ugrep-3.12.6/lib/pattern.cpp    2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/lib/pattern.cpp    2023-08-14 20:03:34.000000000 +0200
@@ -493,17 +493,17 @@
           opt_.x = true;
           break;
         case 'z':
-            for (const char *t = s += (s[1] == '='); *s != ';' && *s != '\0'; 
++t)
+          for (const char *t = s += (s[1] == '='); *s != ';' && *s != '\0'; 
++t)
+          {
+            if (std::isspace(*t) || *t == ';' || *t == '\0')
             {
-              if (std::isspace(*t) || *t == ';' || *t == '\0')
-              {
-                if (t > s + 1)
-                  opt_.z = std::string(s + 1, t - s - 1);
-                s = t;
-              }
+              if (t > s + 1)
+                opt_.z = std::string(s + 1, t - s - 1);
+              s = t;
             }
-            --s;
-            break;
+          }
+          --s;
+          break;
         case 'f':
         case 'n':
           for (const char *t = s += (s[1] == '='); *s != ';' && *s != '\0'; 
++t)
@@ -596,7 +596,10 @@
         Char c = at(end);
         if (c == '\0' || c == '|')
           break;
-        if (c == '.' || c == '^' || c == '$' || c == '(' || c == ')' || c == 
'[' || c == '{' || c == '?' || c == '*' || c == '+')
+        if (c == '.' || c == '^' || c == '$' ||
+            c == '(' || c == '[' || c == '{' ||
+            c == '?' || c == '*' || c == '+' ||
+            c == ')')
         {
           end = loc;
           break;
@@ -1115,6 +1118,10 @@
           lazyset.clear();
         }
       }
+      else if (at(loc) == '\0')
+      {
+        error(regex_error::mismatched_braces, loc);
+      }
       else
       {
         error(regex_error::invalid_repeat, loc);
@@ -1381,17 +1388,13 @@
   {
     error(begin ? regex_error::empty_expression : 
regex_error::mismatched_parens, loc++);
   }
-  else if (c == '}')
-  {
-    error(regex_error::mismatched_braces, loc++);
-  }
   else if (c != '\0' && c != '|' && c != '?' && c != '*' && c != '+')
   {
     pos_add(firstpos, loc);
     pos_add(lastpos, loc);
     nullable = false;
     if (c == opt_.e)
-      (void)parse_esc(loc);
+      c = parse_esc(loc);
     else
       ++loc;
   }
@@ -4060,8 +4063,8 @@
 {
   if (!has_hfa())
     return false;
-  HFA::VisitSet visit[2]; // we alternate and swap two visit bitsets, to 
produce a new one from the previous
-  bool accept = false; // a flag to indicate that we reached an accept (or 
dead) state, i.e. a possible match is found
+  HFA::VisitSet visit[2]; // we alternate two state visit bitsets, to produce 
a new one from the previous
+  bool accept = false; // a flag to indicate that we reached an accept (= 
dead) state, i.e. a possible match is found
   for (size_t level = 0; level < HFA::MAX_DEPTH && !accept; ++level)
     if (!match_hfa_transitions(level, hfa_.hashes[level], indexed, size, 
visit[level & 1], visit[~level & 1], accept))
       return false;
@@ -4098,7 +4101,7 @@
         {
           HFA::States::const_iterator state = hfa_.states.find(next->first);
           if (state == hfa_.states.end() || state->second.empty())
-            return accept = true; // reached an accepting (dead) state (dead 
means accept in HFA)
+            return accept = true; // reached an accepting (= dead) state (dead 
means accept in HFA)
           const HFA::StateSet::const_iterator index_end = state->second.end();
           for (HFA::StateSet::const_iterator index = state->second.begin(); 
index != index_end; ++index)
             next_visit.set(*index, true);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/man/ugrep.1 new/ugrep-3.12.7/man/ugrep.1
--- old/ugrep-3.12.6/man/ugrep.1        2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/man/ugrep.1        2023-08-14 20:03:34.000000000 +0200
@@ -1,4 +1,4 @@
-.TH UGREP "1" "August 06, 2023" "ugrep 3.12.6" "User Commands"
+.TH UGREP "1" "August 14, 2023" "ugrep 3.12.7" "User Commands"
 .SH NAME
 \fBugrep\fR, \fBug\fR -- file pattern searcher
 .SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/src/query.cpp 
new/ugrep-3.12.7/src/query.cpp
--- old/ugrep-3.12.6/src/query.cpp      2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/src/query.cpp      2023-08-14 20:03:34.000000000 +0200
@@ -452,14 +452,14 @@
     Screen::put( 9, 0, "\033[7mM-Left\033[m \033[7mM-Right\033[m pan ½ page");
     Screen::put(10, 0, "\033[7mM-Up\033[m   \033[7mM-Down\033[m  scroll ½ 
pg");
 #endif
-    Screen::put(11, 0, "");
-    Screen::put(12, 0, "\033[7mHome\033[m \033[7mEnd\033[m begin/end of line");
+    Screen::put(11, 0, "\033[7mHome\033[m   \033[7mEnd\033[m     of pattern");
+    Screen::put(12, 0, "");
     Screen::put(13, 0, "\033[7m^K\033[m delete after cursor");
     Screen::put(14, 0, "\033[7m^L\033[m refresh screen");
     Screen::put(15, 0, "\033[7m^Q\033[m quick exit and output");
     Screen::put(16, 0, "\033[7m^R\033[m or \033[7mF4\033[m restore bookmark");
     Screen::put(17, 0, "\033[7m^S\033[m scroll to next file/dir");
-    Screen::put(18, 0, "\033[7m^T\033[m toggle colors on/off");
+    Screen::put(18, 0, "\033[7m^T\033[m toggle colors");
     Screen::put(19, 0, "\033[7m^U\033[m delete before cursor");
     Screen::put(20, 0, "\033[7m^V\033[m verbatim character");
     Screen::put(21, 0, "\033[7m^W\033[m scroll back one file/dir");
@@ -502,9 +502,9 @@
     if (!message_)
     {
 #ifdef WITH_MACOS_META_KEY
-      Screen::put(0, 0, "\033[7mF1\033[m help and options:        
\033[7m^\033[m=\033[7mCtrl\033[m  \033[7mS-\033[m=\033[7mShift\033[m  
\033[7mM-\033[m=\033[7mAlt\033[m/\033[7mOption\033[m or use 
\033[7m^O\033[m+key");
+      Screen::put(0, 0, "     HELP AND OPTIONS       \033[7m^\033[m=Ctrl  
\033[7mS-\033[m=Shift  \033[7mM-\033[m=Alt/Option or \033[7m^O\033[m+key");
 #else
-      Screen::put(0, 0, "\033[7mF1\033[m help and options:        
\033[7m^\033[m=\033[7mCtrl\033[m  \033[7mS-\033[m=\033[7mShift\033[m  
\033[7mM-\033[m=\033[7mAlt\033[m or use \033[7m^O\033[m+key");
+      Screen::put(0, 0, "     HELP AND OPTIONS       \033[7m^\033[m=Ctrl  
\033[7mS-\033[m=Shift  \033[7mM-\033[m=Alt or \033[7m^O\033[m+key");
 #endif
     }
 
@@ -750,6 +750,8 @@
   eof_        = true;
   buflen_     = 0;
 
+  Screen::clear();
+
   // if -e PATTERN specified, collect patterns on the line to edit
   if (!flag_regexp.empty())
   {
@@ -787,8 +789,11 @@
 
     move(len_);
   }
-
-  Screen::clear();
+  else
+  {
+    // display a brief help message
+    message("press CTRL-Z or F1 for help");
+  }
 
   set_prompt();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/src/query.hpp 
new/ugrep-3.12.7/src/query.hpp
--- old/ugrep-3.12.6/src/query.hpp      2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/src/query.hpp      2023-08-14 20:03:34.000000000 +0200
@@ -63,7 +63,7 @@
 
 // the max time that a message (to confirm a command) is shown at the query 
line, in steps of 100ms
 #ifndef QUERY_MESSAGE_DELAY
-#define QUERY_MESSAGE_DELAY 12
+#define QUERY_MESSAGE_DELAY 15
 #endif
 
 class Query {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/src/ugrep.cpp 
new/ugrep-3.12.7/src/ugrep.cpp
--- old/ugrep-3.12.6/src/ugrep.cpp      2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/src/ugrep.cpp      2023-08-14 20:03:34.000000000 +0200
@@ -7601,9 +7601,13 @@
   // reflex::Matcher options
   std::string matcher_options;
 
-  // -Y: permit empty pattern matches
+  // -Y: permit empty pattern matches and match closing ) when no opening ( 
unless -P and -F
   if (flag_empty)
+  {
+    if (!flag_perl_regexp && !flag_fixed_strings)
+      convert_flags |= reflex::convert_flag::closing;
     matcher_options.push_back('N');
+  }
 
   // -w: match whole words, i.e. make \< and \> match only left side and right 
side, respectively
   if (flag_word_regexp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ugrep-3.12.6/src/ugrep.hpp 
new/ugrep-3.12.7/src/ugrep.hpp
--- old/ugrep-3.12.6/src/ugrep.hpp      2023-08-06 22:29:36.000000000 +0200
+++ new/ugrep-3.12.7/src/ugrep.hpp      2023-08-14 20:03:34.000000000 +0200
@@ -38,7 +38,7 @@
 #define UGREP_HPP
 
 // ugrep version
-#define UGREP_VERSION "3.12.6"
+#define UGREP_VERSION "3.12.7"
 
 // disable mmap because mmap is almost always slower than the file reading 
speed improvements since 3.0.0
 #define WITH_NO_MMAP

Reply via email to