Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ugrep for openSUSE:Factory checked in at 2026-04-30 20:32:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ugrep (Old) and /work/SRC/openSUSE:Factory/.ugrep.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ugrep" Thu Apr 30 20:32:32 2026 rev:90 rq:1350292 version:7.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ugrep/ugrep.changes 2026-04-22 17:02:40.143608606 +0200 +++ /work/SRC/openSUSE:Factory/.ugrep.new.30200/ugrep.changes 2026-04-30 20:33:42.206927973 +0200 @@ -1,0 +2,15 @@ +Thu Apr 30 17:35:40 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to version 7.8.0: + * improve TUI custom-command option --view to wait for key press + after viewing, by specifying + in --view=+COMMAND, such as + --view=+file to display file type info in the TUI with CTRL-Y + (overrides viewing the file contents) + * update TUI to block ANSI OSC escape codes, such as + ESC ] P n rr gg bb that may hang the terminal + * update the ug+ and ugrep+ scripts to end options in filter + commands with --, in case a filename starts with a - (dash) + * improve config parsing to ignore some options that do not make + sense to set in a (local) config file + +------------------------------------------------------------------- Old: ---- ugrep-7.7.0.obscpio New: ---- ugrep-7.8.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ugrep.spec ++++++ --- /var/tmp/diff_new_pack.CN4qjx/_old 2026-04-30 20:33:43.394976851 +0200 +++ /var/tmp/diff_new_pack.CN4qjx/_new 2026-04-30 20:33:43.398977016 +0200 @@ -23,7 +23,7 @@ %bcond_without fish %endif Name: ugrep -Version: 7.7.0 +Version: 7.8.0 Release: 0 Summary: Universal grep: a feature-rich grep implementation with focus on speed License: BSD-3-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.CN4qjx/_old 2026-04-30 20:33:43.490980801 +0200 +++ /var/tmp/diff_new_pack.CN4qjx/_new 2026-04-30 20:33:43.514981788 +0200 @@ -5,7 +5,7 @@ <param name="changesgenerate">enable</param> <param name="filename">ugrep</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">v7.7.0</param> + <param name="revision">v7.8.0</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="versionrewrite-replacement">\1</param> </service> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.CN4qjx/_old 2026-04-30 20:33:43.598985245 +0200 +++ /var/tmp/diff_new_pack.CN4qjx/_new 2026-04-30 20:33:43.622986232 +0200 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/Genivia/ugrep.git</param> - <param name="changesrevision">5bfa7623a98e71c4ec1f2bd3046cb084a09ff82b</param> + <param name="changesrevision">5f6f5bd4f77df74faf01076f7d2407a603464868</param> </service> </servicedata> (No newline at EOF) ++++++ ugrep-7.7.0.obscpio -> ugrep-7.8.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/bin/ug+ new/ugrep-7.8.0/bin/ug+ --- old/ugrep-7.7.0/bin/ug+ 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/bin/ug+ 2026-04-29 16:27:56.000000000 +0200 @@ -1,16 +1,16 @@ #!/bin/sh filters= if [ -x "$(command -v pdftotext)" ] && pdftotext --help 2>&1 | ugrep -qw Poppler ; then - filters="${filters}${filters:+,}pdf:pdftotext % -" + filters="${filters}${filters:+,}pdf:pdftotext -- % -" fi if [ -x "$(command -v antiword)" ] && antiword 2>&1 | ugrep -qw Adri ; then - filters="${filters}${filters:+,}doc:antiword %" + filters="${filters}${filters:+,}doc:antiword -- %" fi if [ -x "$(command -v pandoc)" ] && pandoc --version 2>&1 | ugrep -qw pandoc.org ; then - filters="${filters}${filters:+,}odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -" + filters="${filters}${filters:+,}odt,docx,epub,rtf:pandoc --wrap=preserve -t plain -o - -- %" fi if [ -x "$(command -v exiftool)" ] ; then - filters="${filters}${filters:+,}gif,jpg,jpeg,mpg,mpeg,png,tiff:exiftool %" + filters="${filters}${filters:+,}gif,jpg,jpeg,mpg,mpeg,png,tiff:exiftool -- %" fi if [ -n "$filters" ]; then ug --filter="${filters}" "$@" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/bin/ugrep+ new/ugrep-7.8.0/bin/ugrep+ --- old/ugrep-7.7.0/bin/ugrep+ 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/bin/ugrep+ 2026-04-29 16:27:56.000000000 +0200 @@ -1,16 +1,16 @@ #!/bin/sh filters= if [ -x "$(command -v pdftotext)" ] && pdftotext --help 2>&1 | ugrep -qw Poppler ; then - filters="${filters}${filters:+,}pdf:pdftotext % -" + filters="${filters}${filters:+,}pdf:pdftotext -- % -" fi if [ -x "$(command -v antiword)" ] && antiword 2>&1 | ugrep -qw Adri ; then - filters="${filters}${filters:+,}doc:antiword %" + filters="${filters}${filters:+,}doc:antiword -- %" fi if [ -x "$(command -v pandoc)" ] && pandoc --version 2>&1 | ugrep -qw pandoc.org ; then - filters="${filters}${filters:+,}odt,docx,epub,rtf:pandoc --wrap=preserve -t plain % -o -" + filters="${filters}${filters:+,}odt,docx,epub,rtf:pandoc --wrap=preserve -t plain -o - -- %" fi if [ -x "$(command -v exiftool)" ] ; then - filters="${filters}${filters:+,}gif,jpg,jpeg,mpg,mpeg,png,tiff:exiftool %" + filters="${filters}${filters:+,}gif,jpg,jpeg,mpg,mpeg,png,tiff:exiftool -- %" fi if [ -n "$filters" ]; then ug --filter="${filters}" "$@" Binary files old/ugrep-7.7.0/bin/win32/ug.exe and new/ugrep-7.8.0/bin/win32/ug.exe differ Binary files old/ugrep-7.7.0/bin/win32/ugrep-indexer.exe and new/ugrep-7.8.0/bin/win32/ugrep-indexer.exe differ Binary files old/ugrep-7.7.0/bin/win32/ugrep.exe and new/ugrep-7.8.0/bin/win32/ugrep.exe differ Binary files old/ugrep-7.7.0/bin/win64/ug.exe and new/ugrep-7.8.0/bin/win64/ug.exe differ Binary files old/ugrep-7.7.0/bin/win64/ugrep-indexer.exe and new/ugrep-7.8.0/bin/win64/ugrep-indexer.exe differ Binary files old/ugrep-7.7.0/bin/win64/ugrep.exe and new/ugrep-7.8.0/bin/win64/ugrep.exe differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/bash/ug new/ugrep-7.8.0/completions/bash/ug --- old/ugrep-7.7.0/completions/bash/ug 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/bash/ug 2026-04-29 16:27:56.000000000 +0200 @@ -332,7 +332,7 @@ -u, --ungroup Do not group multiple pattern matches on the same matched line. -V, --version Display version with linked libraries and exit. -v, --invert-match Selected lines are those not matching any of the specified patterns. ---view[=COMMAND] Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y. +--view[=[+]COMMAND] Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated. -W, --with-hex Output binary matches in hexadecimal, leaving text matches alone. -w, --word-regexp The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character. --width[=NUM] Truncate the output to NUM visible characters per line. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/fish/ug+.fish new/ugrep-7.8.0/completions/fish/ug+.fish --- old/ugrep-7.7.0/completions/fish/ug+.fish 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/fish/ug+.fish 2026-04-29 16:27:56.000000000 +0200 @@ -110,7 +110,7 @@ complete -c ug+ -s u -l ungroup -d 'Do not group multiple pattern matches on the same matched line' complete -c ug+ -s V -l version -d 'Display version with linked libraries and exit' complete -c ug+ -s v -l invert-match -d 'Selected lines are those not matching any of the specified patterns' -complete -c ug+ -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y' +complete -c ug+ -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated' complete -c ug+ -s W -l with-hex -d 'Output binary matches in hexadecimal, leaving text matches alone' complete -c ug+ -s w -l word-regexp -d 'The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character' complete -c ug+ -l width -d 'Truncate the output to NUM visible characters per line' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/fish/ug.fish new/ugrep-7.8.0/completions/fish/ug.fish --- old/ugrep-7.7.0/completions/fish/ug.fish 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/fish/ug.fish 2026-04-29 16:27:56.000000000 +0200 @@ -110,7 +110,7 @@ complete -c ug -s u -l ungroup -d 'Do not group multiple pattern matches on the same matched line' complete -c ug -s V -l version -d 'Display version with linked libraries and exit' complete -c ug -s v -l invert-match -d 'Selected lines are those not matching any of the specified patterns' -complete -c ug -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y' +complete -c ug -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated' complete -c ug -s W -l with-hex -d 'Output binary matches in hexadecimal, leaving text matches alone' complete -c ug -s w -l word-regexp -d 'The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character' complete -c ug -l width -d 'Truncate the output to NUM visible characters per line' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/fish/ugrep+.fish new/ugrep-7.8.0/completions/fish/ugrep+.fish --- old/ugrep-7.7.0/completions/fish/ugrep+.fish 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/fish/ugrep+.fish 2026-04-29 16:27:56.000000000 +0200 @@ -110,7 +110,7 @@ complete -c ugrep+ -s u -l ungroup -d 'Do not group multiple pattern matches on the same matched line' complete -c ugrep+ -s V -l version -d 'Display version with linked libraries and exit' complete -c ugrep+ -s v -l invert-match -d 'Selected lines are those not matching any of the specified patterns' -complete -c ugrep+ -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y' +complete -c ugrep+ -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated' complete -c ugrep+ -s W -l with-hex -d 'Output binary matches in hexadecimal, leaving text matches alone' complete -c ugrep+ -s w -l word-regexp -d 'The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character' complete -c ugrep+ -l width -d 'Truncate the output to NUM visible characters per line' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/fish/ugrep.fish new/ugrep-7.8.0/completions/fish/ugrep.fish --- old/ugrep-7.7.0/completions/fish/ugrep.fish 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/fish/ugrep.fish 2026-04-29 16:27:56.000000000 +0200 @@ -110,7 +110,7 @@ complete -c ugrep -s u -l ungroup -d 'Do not group multiple pattern matches on the same matched line' complete -c ugrep -s V -l version -d 'Display version with linked libraries and exit' complete -c ugrep -s v -l invert-match -d 'Selected lines are those not matching any of the specified patterns' -complete -c ugrep -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y' +complete -c ugrep -l view -d 'Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated' complete -c ugrep -s W -l with-hex -d 'Output binary matches in hexadecimal, leaving text matches alone' complete -c ugrep -s w -l word-regexp -d 'The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character' complete -c ugrep -l width -d 'Truncate the output to NUM visible characters per line' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/zsh/_ug new/ugrep-7.8.0/completions/zsh/_ug --- old/ugrep-7.7.0/completions/zsh/_ug 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/zsh/_ug 2026-04-29 16:27:56.000000000 +0200 @@ -117,7 +117,7 @@ {-u,--ungroup}'[Do not group multiple pattern matches on the same matched line]' {-V,--version}'[Display version with linked libraries and exit]' {-v,--invert-match}'[Selected lines are those not matching any of the specified patterns]' ---view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y]' +--view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated]' {-W,--with-hex}'[Output binary matches in hexadecimal, leaving text matches alone]' {-w,--word-regexp}'[The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character]' --width'[Truncate the output to NUM visible characters per line]' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/zsh/_ug+ new/ugrep-7.8.0/completions/zsh/_ug+ --- old/ugrep-7.7.0/completions/zsh/_ug+ 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/zsh/_ug+ 2026-04-29 16:27:56.000000000 +0200 @@ -117,7 +117,7 @@ {-u,--ungroup}'[Do not group multiple pattern matches on the same matched line]' {-V,--version}'[Display version with linked libraries and exit]' {-v,--invert-match}'[Selected lines are those not matching any of the specified patterns]' ---view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y]' +--view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated]' {-W,--with-hex}'[Output binary matches in hexadecimal, leaving text matches alone]' {-w,--word-regexp}'[The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character]' --width'[Truncate the output to NUM visible characters per line]' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/zsh/_ugrep new/ugrep-7.8.0/completions/zsh/_ugrep --- old/ugrep-7.7.0/completions/zsh/_ugrep 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/zsh/_ugrep 2026-04-29 16:27:56.000000000 +0200 @@ -117,7 +117,7 @@ {-u,--ungroup}'[Do not group multiple pattern matches on the same matched line]' {-V,--version}'[Display version with linked libraries and exit]' {-v,--invert-match}'[Selected lines are those not matching any of the specified patterns]' ---view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y]' +--view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated]' {-W,--with-hex}'[Output binary matches in hexadecimal, leaving text matches alone]' {-w,--word-regexp}'[The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character]' --width'[Truncate the output to NUM visible characters per line]' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/completions/zsh/_ugrep+ new/ugrep-7.8.0/completions/zsh/_ugrep+ --- old/ugrep-7.7.0/completions/zsh/_ugrep+ 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/completions/zsh/_ugrep+ 2026-04-29 16:27:56.000000000 +0200 @@ -117,7 +117,7 @@ {-u,--ungroup}'[Do not group multiple pattern matches on the same matched line]' {-V,--version}'[Display version with linked libraries and exit]' {-v,--invert-match}'[Selected lines are those not matching any of the specified patterns]' ---view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y]' +--view'[Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y, +COMMAND waits for a key press after COMMAND terminated]' {-W,--with-hex}'[Output binary matches in hexadecimal, leaving text matches alone]' {-w,--word-regexp}'[The PATTERN is searched for as a word, such that the matching text is preceded by a non-word character and is followed by a non-word character]' --width'[Truncate the output to NUM visible characters per line]' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/configure new/ugrep-7.8.0/configure --- old/ugrep-7.7.0/configure 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/configure 2026-04-29 16:27:56.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for ugrep 7.7.0. +# Generated by GNU Autoconf 2.72 for ugrep 7.8.0. # # Report bugs to <https://github.com/Genivia/ugrep/issues>. # @@ -606,8 +606,8 @@ # Identity of this package. PACKAGE_NAME='ugrep' PACKAGE_TARNAME='ugrep' -PACKAGE_VERSION='7.7.0' -PACKAGE_STRING='ugrep 7.7.0' +PACKAGE_VERSION='7.8.0' +PACKAGE_STRING='ugrep 7.8.0' PACKAGE_BUGREPORT='https://github.com/Genivia/ugrep/issues' PACKAGE_URL='https://ugrep.com' @@ -1383,7 +1383,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures ugrep 7.7.0 to adapt to many kinds of systems. +'configure' configures ugrep 7.8.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1454,7 +1454,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ugrep 7.7.0:";; + short | recursive ) echo "Configuration of ugrep 7.8.0:";; esac cat <<\_ACEOF @@ -1632,7 +1632,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ugrep configure 7.7.0 +ugrep configure 7.8.0 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2186,7 +2186,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ugrep $as_me 7.7.0, which was +It was created by ugrep $as_me 7.8.0, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3696,7 +3696,7 @@ # Define the identity of the package. PACKAGE='ugrep' - VERSION='7.7.0' + VERSION='7.8.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -11875,7 +11875,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ugrep $as_me 7.7.0, which was +This file was extended by ugrep $as_me 7.8.0, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11948,7 +11948,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -ugrep config.status 7.7.0 +ugrep config.status 7.8.0 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/configure.ac new/ugrep-7.8.0/configure.ac --- old/ugrep-7.7.0/configure.ac 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/configure.ac 2026-04-29 16:27:56.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([ugrep],[7.7.0],[https://github.com/Genivia/ugrep/issues],[ugrep],[https://ugrep.com]) +AC_INIT([ugrep],[7.8.0],[https://github.com/Genivia/ugrep/issues],[ugrep],[https://ugrep.com]) AM_INIT_AUTOMAKE([foreign subdir-objects dist-xz no-dist-gzip]) AC_CONFIG_HEADERS([config.h]) AC_COPYRIGHT([Copyright (C) 2019-2026 Robert van Engelen, Genivia Inc.]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/man/ug.1 new/ugrep-7.8.0/man/ug.1 --- old/ugrep-7.7.0/man/ug.1 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/man/ug.1 2026-04-29 16:27:56.000000000 +0200 @@ -1,4 +1,4 @@ -.TH UGREP "1" "April 21, 2026" "ugrep 7.7.0" "User Commands" +.TH UGREP "1" "April 29, 2026" "ugrep 7.8.0" "User Commands" .SH NAME \fBugrep\fR, \fBug\fR -- file pattern searcher .SH SYNOPSIS @@ -892,8 +892,9 @@ Selected lines are those not matching any of the specified patterns. .TP -\fB\-\-view\fR[=\fICOMMAND\fR] -Use COMMAND to view/edit a file in \fB\-Q\fR query TUI by pressing CTRL\-Y. +\fB\-\-view\fR[=[+]COMMAND] +Use COMMAND to view/edit a file in \fB\-Q\fR query TUI by pressing CTRL\-Y, ++COMMAND waits for a key press after COMMAND terminated. .TP \fB\-W\fR, \fB\-\-with\-hex\fR Output binary matches in hexadecimal, leaving text matches alone. @@ -970,7 +971,8 @@ xz (.xz, .txz) and lzma (requires suffix .lzma, .tlz), zstd (.zst, .zstd, .tzst), lz4 (requires suffix .lz4), -brotli (requires suffix .br). +brotli (requires suffix .br), +bzip3 (requires suffix .bz3). .TP \fB\-\-zmax\fR=\fINUM\fR When used with option \fB\-z\fR or \fB\-\-decompress\fR, searches the contents of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/man/ugrep-indexer.1 new/ugrep-7.8.0/man/ugrep-indexer.1 --- old/ugrep-7.7.0/man/ugrep-indexer.1 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/man/ugrep-indexer.1 2026-04-29 16:27:56.000000000 +0200 @@ -1,4 +1,4 @@ -.TH UGREP-INDEXER "1" "April 21, 2026" "ugrep-indexer 7.7.0" "User Commands" +.TH UGREP-INDEXER "1" "April 29, 2026" "ugrep-indexer 7.8.0" "User Commands" .SH NAME \fBugrep-indexer\fR -- file indexer to accelerate recursive searching .SH SYNOPSIS @@ -147,7 +147,8 @@ lzma and xz (requires suffix .lzma, .tlz, .xz, .txz), lz4 (requires suffix .lz4), zstd (requires suffix .zst, .zstd, .tzst), -brotli (requires suffix .br). +brotli (requires suffix .br), +bzip3 (requires suffix .bz3). .TP \fB\-\-zmax\fR=\fINUM\fR When used with option \fB\-z\fR (\fB\-\-decompress\fR), indexes the contents of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/man/ugrep.1 new/ugrep-7.8.0/man/ugrep.1 --- old/ugrep-7.7.0/man/ugrep.1 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/man/ugrep.1 2026-04-29 16:27:56.000000000 +0200 @@ -1,4 +1,4 @@ -.TH UGREP "1" "April 21, 2026" "ugrep 7.7.0" "User Commands" +.TH UGREP "1" "April 29, 2026" "ugrep 7.8.0" "User Commands" .SH NAME \fBugrep\fR, \fBug\fR -- file pattern searcher .SH SYNOPSIS @@ -892,8 +892,9 @@ Selected lines are those not matching any of the specified patterns. .TP -\fB\-\-view\fR[=\fICOMMAND\fR] -Use COMMAND to view/edit a file in \fB\-Q\fR query TUI by pressing CTRL\-Y. +\fB\-\-view\fR[=[+]COMMAND] +Use COMMAND to view/edit a file in \fB\-Q\fR query TUI by pressing CTRL\-Y, ++COMMAND waits for a key press after COMMAND terminated. .TP \fB\-W\fR, \fB\-\-with\-hex\fR Output binary matches in hexadecimal, leaving text matches alone. @@ -970,7 +971,8 @@ xz (.xz, .txz) and lzma (requires suffix .lzma, .tlz), zstd (.zst, .zstd, .tzst), lz4 (requires suffix .lz4), -brotli (requires suffix .br). +brotli (requires suffix .br), +bzip3 (requires suffix .bz3). .TP \fB\-\-zmax\fR=\fINUM\fR When used with option \fB\-z\fR or \fB\-\-decompress\fR, searches the contents of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/src/query.cpp new/ugrep-7.8.0/src/query.cpp --- old/ugrep-7.7.0/src/query.cpp 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/src/query.cpp 2026-04-29 16:27:56.000000000 +0200 @@ -42,6 +42,7 @@ #include <iostream> #include <fstream> #include <thread> +#include <chrono> #include <fcntl.h> #ifdef OS_WIN @@ -2370,13 +2371,14 @@ } // if no viewer, then give up - if (flag_view == NULL || *flag_view == '\0') + if (flag_view == NULL || *flag_view == '\0' || (*flag_view == '+' && flag_view[1] == '\0')) { Screen::alert(); return; } - std::string command(flag_view); + bool keypress = (*flag_view == '+'); + std::string command(flag_view + keypress); int ref = select_ >= 0 ? select_ : row_; size_t line_number = 0; @@ -2492,6 +2494,35 @@ std::wstring wcommand; #endif + Screen::clear(); + Screen::invert(); + Screen::put(command.c_str()); + Screen::put(' '); + Screen::put(filename.c_str()); + if (!partname.empty()) + { + Screen::put('{'); + Screen::put(partname.c_str()); + Screen::put('}'); + } + Screen::normal(); + Screen::setpos(1, 0); + +#ifndef OS_WIN + // normal tty mode + VKey::cleanup(); +#endif + + // executing the command is OK, unless checks fail, pipe fails, or command fails + bool ok = true; + + // file was changed when viewed, e.g. by an editor? + bool changed = false; + + // track elapsed time: if the command terminates very quickly within 100ms, then wait 1s + reflex::timer_type et; + reflex::timer_start(et); + if (flag_stdin && filename == flag_label) { // standard input is viewed via a pipe to the pager @@ -2521,8 +2552,7 @@ catch (...) { // this should never happen, but just in case we ignore errors - Screen::alert(); - return; + ok = false; } } } @@ -2532,66 +2562,54 @@ if (filename.empty() || filename.at(0) == '/' || filename.find('"') != std::string::npos) { // illegal filename in Windows, should never happen, but just in case - Screen::alert(); - return; + ok = false; + } + else + { + // view file in the pager using Windows _wsystem() call + command.append(" \"").append(filename).append("\""); + // Windows system() does not support non-ASCII, instead we use a wide string with _wsystem() + wcommand = utf8_decode(command); + // flush before calling _wsystem(), according to the Window's system API documentation + // _flushall(); removed because this may cause the TUI to freeze } - // view file in the pager using Windows _wsystem() call - command.append(" \"").append(filename).append("\""); - // Windows system() does not support non-ASCII, instead we use a wide string with _wsystem() - wcommand = utf8_decode(command); - // flush before calling _wsystem(), according to the Window's system API documentation - // _flushall(); removed because this may cause the TUI to freeze #else if (filename.find('\'') != std::string::npos) { // incorrect filename - Screen::alert(); - return; + ok = false; + } + else + { + // view file in the pager using system() call, double -- ends options + command.append(" -- '").append(filename).append("'"); } - // view file in the pager using system() call, double -- ends options - command.append(" -- '").append(filename).append("'"); -#endif - } - - Screen::clear(); - Screen::put("Waiting on "); - Screen::put(command.c_str()); - Screen::put(" to finish"); - Screen::home(); - - // pipe to pager was OK or executing the command is OK - bool ok; - - if ((flag_stdin && filename == flag_label) || !partname.empty()) - { - ok = (pager != NULL); - } - else - { -#ifdef OS_WIN - ok = (_wsystem(wcommand.c_str()) == 0); -#else - ok = (system(command.c_str()) == 0); #endif } if (ok) { -#ifdef OS_WIN - if (strcmp(flag_view, "more") == 0) + if ((flag_stdin && filename == flag_label) || !partname.empty()) { - Screen::setpos(Screen::rows - 1, 0); - Screen::put("(END) press a key"); - Screen::alert(); - VKey::flush(); - VKey::get(); + // popen() pipe to pager is OK? + ok = (pager != NULL); + + if (ok) + { + // close the pipe to the pager + pclose(pager); + pager = NULL; + } } + else + { + // execute command, check if OK +#ifdef OS_WIN + ok = (_wsystem(wcommand.c_str()) == 0); +#else + ok = (system(command.c_str()) == 0); #endif - bool changed = false; - - if (pager == NULL) - { // check if file was changed by the pager (when it is an editor) #ifdef OS_WIN _WIN32_FILE_ATTRIBUTE_DATA attr_after; @@ -2609,28 +2627,49 @@ #endif #endif } - else - { - // close the pipe to the pager - pclose(pager); - pager = NULL; - } + } - if (changed) - { - // file is changed, update the search results - search(); - jump(ref); - } - else - { - redraw(); - } +#ifndef OS_WIN + // resume RAW tty mode and flush the key buffer + VKey::setup(VKey::TTYRAW); +#else + // flush the key buffer + VKey::flush(); +#endif + +#ifdef OS_WIN + if (ok && (keypress || strcmp(flag_view, "more") == 0)) +#else + if (ok && keypress) +#endif + { + Screen::setpos(Screen::rows - 1, 0); + Screen::invert(); + Screen::put("(END)"); + Screen::normal(); + Screen::put(" press a key "); + VKey::get(); + } + else if (reflex::timer_elapsed(et) < 100) + { + // command terminated very quickly within 100ms + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + + if (changed) + { + // file is changed, update the search results + search(); + jump(ref); } else { - Screen::alert(); redraw(); + } + + if (!ok) + { + Screen::alert(); message(std::string("failed: ").append(command)); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/src/screen.cpp new/ugrep-7.8.0/src/screen.cpp --- old/ugrep-7.7.0/src/screen.cpp 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/src/screen.cpp 2026-04-29 16:27:56.000000000 +0200 @@ -567,11 +567,11 @@ break; default: - if (*text == '\033' && text + 1 < end && (text[1] == '[' || text[1] == ']')) + if (*text == '\033' && text + 2 < end && (text[1] == '[' || (text[1] == ']' && text[2] == '8'))) { - if (text + 1 < end && text[1] == '[') + if (text[1] == '[') { - // CSI \e[... sequence + // ANSI CSI \e[... sequence next = text; next += 2; while (next < end && (*next < 0x40 || *next > 0x7e)) @@ -586,7 +586,7 @@ } else { - // OSC \e]...BEL|ST sequence + // ANSI OSC \e]8...BEL|ST sequence (hyperlink) next = text; next += 2; while (next < end && *next != '\a' && (*next != '\033' || (next + 1 < end && next[1] != '\\'))) @@ -703,11 +703,11 @@ break; default: - if (*ptr == '\033' && ptr + 1 < end && (ptr[1] == '[' || ptr[1] == ']')) + if (*ptr == '\033' && ptr + 2 < end && (ptr[1] == '[' || (ptr[1] == ']' && ptr[2] == '8'))) { if (ptr[1] == '[') { - // CSI \e[... sequence + // ANSI CSI \e[... sequence if (mono) put(text, ptr - text); ptr += 2; @@ -728,7 +728,7 @@ } else { - // OSC \e]...BEL|ST sequence + // ANSI OSC \e]8...BEL|ST sequence (hyperlink) if (mono) put(text, ptr - text); ptr += 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/src/ugrep-indexer.cpp new/ugrep-7.8.0/src/ugrep-indexer.cpp --- old/ugrep-7.7.0/src/ugrep-indexer.cpp 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/src/ugrep-indexer.cpp 2026-04-29 16:27:56.000000000 +0200 @@ -35,7 +35,7 @@ */ // DO NOT ALTER THIS LINE: updated by makemake.sh and we need it physically here for MSVC++ build from source -#define UGREP_VERSION "7.7.0" +#define UGREP_VERSION "7.8.0" // use a task-parallel thread to decompress the stream into a pipe to search, also handles nested archives #define WITH_DECOMPRESSION_THREAD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/src/ugrep.cpp new/ugrep-7.8.0/src/ugrep.cpp --- old/ugrep-7.7.0/src/ugrep.cpp 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/src/ugrep.cpp 2026-04-29 16:27:56.000000000 +0200 @@ -4803,12 +4803,13 @@ // if config file was parsed before, then only try parsing the home dir config file bool home = flag_config_files.find(flag_config) != flag_config_files.end(); + bool wdir = !home; // open a config file in the working dir or in the home directory std::string config_file(flag_config); FILE *file = NULL; - if (!home) + if (wdir) { // try opening a config file in the working directory if (fopen_smart(&file, flag_config, "r") == 0) @@ -4861,6 +4862,8 @@ if (file == NULL) { + wdir = false; + // if not in the working directory, then check the home directory if (Static::home_dir != NULL && *flag_config != '~' && *flag_config != PATHSEPCHR) { @@ -4958,6 +4961,17 @@ ++lineno; } + // clear flags that don't make sense for config, confusing + flag_save_config = NULL; + flag_query = false; + flag_pager = NULL; + if (wdir) + { + flag_view = NULL; + flag_filter.clear(); + flag_filter_magic_label.clear(); + } + if (ferror(file)) error("error while reading", config_file.c_str()); @@ -5090,12 +5104,6 @@ else fprintf(file, "no-view\n\n"); - fprintf(file, "# Enable a pager for terminal output, default: no-pager\n"); - if (flag_pager != NULL && *flag_pager != '\0') - fprintf(file, "pager=%s\n\n", flag_pager); - else - fprintf(file, "# pager=less\n\n"); - fprintf(file, "# Enable pretty output to the terminal, default: pretty\n%s\n\n", flag_pretty != NULL ? "pretty" : "no-pretty"); fprintf(file, "# Enable directory tree output to the terminal for -l (--files-with-matches) and -c (--count)\n%s\n\n", flag_tree ? "tree" : "no-tree"); @@ -14689,8 +14697,9 @@ -v, --invert-match\n\ Selected lines are those not matching any of the specified\n\ patterns.\n\ - --view[=COMMAND]\n\ - Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y.\n\ + --view[=[+]COMMAND]\n\ + Use COMMAND to view/edit a file in -Q query TUI by pressing CTRL-Y,\n\ + +COMMAND waits for a key press after COMMAND terminated.\n\ -W, --with-hex\n\ Output binary matches in hexadecimal, leaving text matches alone.\n\ This option is equivalent to the --binary-files=with-hex option.\n\ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ugrep-7.7.0/src/ugrep.hpp new/ugrep-7.8.0/src/ugrep.hpp --- old/ugrep-7.7.0/src/ugrep.hpp 2026-04-21 19:29:26.000000000 +0200 +++ new/ugrep-7.8.0/src/ugrep.hpp 2026-04-29 16:27:56.000000000 +0200 @@ -38,7 +38,7 @@ #define UGREP_HPP // DO NOT ALTER THIS LINE: updated by makemake.sh and we need it physically here for MSVC++ build from source -#define UGREP_VERSION "7.7.0" +#define UGREP_VERSION "7.8.0" // disable mmap because mmap is almost always slower than the file reading speed improvements since 3.0.0 #define WITH_NO_MMAP ++++++ ugrep.obsinfo ++++++ --- /var/tmp/diff_new_pack.CN4qjx/_old 2026-04-30 20:33:45.679070823 +0200 +++ /var/tmp/diff_new_pack.CN4qjx/_new 2026-04-30 20:33:45.683070988 +0200 @@ -1,5 +1,5 @@ name: ugrep -version: 7.7.0 -mtime: 1776792566 -commit: 5bfa7623a98e71c4ec1f2bd3046cb084a09ff82b +version: 7.8.0 +mtime: 1777472876 +commit: 5f6f5bd4f77df74faf01076f7d2407a603464868
