v0.3.7 - 21 Apr 2024
- Support many text encodings. Previously only UTF-8 was supported. (#21)
- Add
--encoding
(-E
) command line option to specify file encoding of matched files. For example, the following command searches files encoded in Shift JIS.hgrep --encoding sjis pattern path/to/dir
- Detect file encodings from BOM. hgrep can automatically detect UTF-16LE, UTF-16BE, and UTF-8 if BOM exists in the file.
- Add
- Fix some syntax detection fails when BOM is inserted at the head of file. (#20)
- Improve performance by removing redundant
read
system calls on detecting syntax. - Improve error messages when failing to read files
v0.3.6 - 06 Apr 2024
- Add
-u
/--unrestricted
flags to built-in ripgrep (ripgrep
feature). This flag reduces the level of "smart" filtering by repeated uses (up to 2). A single flag-u
is equivalent to--no-ignore
. Two flags-uu
are equivalent to--no-ignore --hidden
. Unlike ripgrep, three flags-uuu
are not supported since hgrep doesn't support--binary
flag.# Same as `hgrep --no-ignore pattern paths...` hgrep -u pattern paths... # Same as `hgrep --no-ignore --hidden pattern paths...` hgrep -uu pattern paths...
- Allow command line options to override their previous values. For example,
hgrep --theme ayu-dark --theme OneHalfDark
specifiesOneHalfDark
theme, which previously caused a command line parse error. This new behavior is useful when you specify a default option inHGREP_DEFAULT_OPTS
and want to override the default value in a command line.# Set the default theme value export HGREP_DEFAULT_OPTS='--theme ayu-dark' # v0.3.5 caused an error and v0.3.6 now allows this hgrep --theme OneHalfDark pattern paths...
- A Debian package (
.deb
file) is now released in the release page. For example the package file for v0.3.6 can be downloaded from this link. The package can be installed viadpkg
command and managed by APT package manager. It installs the man page and bash completion file automatically. Please see the document for more details. (#17) - Fix redundant imports warning reported from a nightly compiler.
v0.3.5 - 31 Mar 2024
- Add
HGREP_DEFAULT_OPTS
environment variable to set the default command line options. For example, the following configuration enablesayu-dark
theme and background colors by default. See the document for more details.export HGREP_DEFAULT_OPTS='--theme ayu-dark --background'
- Detect the terminal color support from
TERM
environment variable in addition toCOLORTERM
environment variable. For example,xterm-256color
enables 256 colors support. See the document to know the logic of the color support detection. - Update the themes bundle to the latest.
- Update cargo dependencies including syntect v5.2.
v0.3.4 - 06 Jan 2024
- Update crates related to ripgrep. This contains the big internal change of
regex
crate and changes for ripgrep v14. - Update bat to v0.24.
- Update the assets for syntax highlighting. This adds support for WGSL and some other improvements such as more file extensions support.
- Improve error handling of
bat
printer. - Detect true color support using
windows-version
crate on Windows. True color is supported by Windows 10.0.15063 or later. - Update other dependencies to the latest.
- Replace unmaintained
dirs-next
crate withdirs
crate. - Update
syntect
crate to v5.1.0.
- Replace unmaintained
v0.3.3 - 22 Jul 2023
- Always enable 24-bit colors on Windows because 24-bit colors support is available since Windows 10.0.15063 (released on April 5, 2019).
- Add the document which explains how hgrep detects terminal color support.
- Support generating a completion script for Nushell by
--generate-completion-script nushell
. - Set
codegen-units
to 1 on release build. This made the binary size 1.14x smaller and improved the performance by 1.05x faster. - Update dependencies to the latest versions including large update of
regex
crate (v1.9.1). - Do not depend on
terminfo
crate on Windows.
v0.3.2 - 31 Mar 2023
- Update
bat
from 0.22 to 0.23. This improves performance on macOS when using-p bat
. - Add support for Ada syntax highlighting
- Update dependencies
- Remove
remove_dir_all
crate to avoid CVE-2022-21658 - Replace unmaintained
ansi_term
crate withnu-ansi-term
crate - Update clap crates to generate better completion scripts and man page
- Remove
v0.3.1 - 31 Jan 2023
- Fix parsing some command line options
- Fix
--glob
was not repeatable - Fix
--ignore-case
and--smart-case
should override each other - Fix
--line-regexp
and--word-regexp
should override each other
- Fix
v0.3.0 - 21 Jan 2023
- Update
syntect
dependency to v5.0.0. Thanks to lazy loading, this change makes loading assets at startup about 70% faster. The small benchmark showedhgrep
command was 1.7x faster when searching a small file with-p syntect
compared to v0.2.8. - Update
bat
dependency from 0.20 to 0.22. This introduces several improvements and fixes which were recently added to bat when using-p bat
. - Add
--generate-man-page
flag to generate a manual page file. Save the output to yourman
directory to show the help withman
command. If you install hgrep with Homebrew, it will be automatically generated.hgrep --generate-man-page > /usr/local/share/man/man1/hgrep.1 man hgrep
- Add several syntax highlighting for configuration files (Git configs, Fish history, SSH config, Nginx config, ...).
- Wrap the
--help
output looking at the terminal width. The output is more compact than v0.2.8. - Improve error handling when failing to enable ANSI color sequence support on Windows.
v0.2.8 - 10 Jan 2023
- Fix some command line boolean flags wrongly took an argument. (thanks @Ryooooooga, #15)
v0.2.7 - 04 Jan 2023
- Fix crash when reading from
rg --vimgrep
. Note that--vimgrep
flag is not assumed by hgrep. Please userg -nH
. (#13) - Fix errors are not reported when they are caused by the second match or later.
- Update dependencies to the latest. Especially migrating to clap v4 improved the
--help
output. - Migrate to Rust 2021 edition.
v0.2.6 - 27 May 2022
x86_64-unknown-linux-musl
release binary now links libc statically (#10)- Replace
rgb2ansi256
crate withansi_colors
crate
v0.2.5 - 23 Apr 2022
- Add pre-built binary for AArch64 Linux. (#9)
v0.2.4 - 17 Apr 2022
- Update
bat
crate dependency to v0.20.0. - Highlight clang-format configuration file.
v0.2.3 - 02 Feb 2022
- Update dependencies including
bat
v0.19 andclap
v3 - Build binaries with the latest Rust compiler v1.58.1
v0.2.2 - 11 Dec 2021
- Fix a build failure since new RC version of
clap
crate was released. - Fix a dynamic link error of pcre2 library by linking the library statically. The error could happen when you installed Homebrew to non-default location on macOS (#6).
- Add
--regex-size-limit
option for built-in grep feature. - Add
--dfa-size-limit
option for built-in grep feature. - Use Rust compiler v1.57 to build binaries.
v0.2.1 - 13 Nov 2021
- Heuristic algorithm to choose the foreground color of matched regions was improved. Now hgrep generates multiple candidates for the foreground color, and chooses one of them looking at the color distances from the background color.
- Add new
Material
theme. It is a very popular low-contrast color theme. Try it byhgrep --theme Material
. - Add new
Carbonight
theme. It is a minimal monotone color theme. Some people feel that too colorful outputs are hard to see. This color theme might fit to such people. - Built-in grep allows K/M/G suffix at
--max-filesize
option to specify a file size easily.# Search files whose size is smaller than 10 MiB hgrep --maxfilesize 10M ...
- Built-in grep adds new flag
--invert-match
for invert matching. It shows lines that do not match the given pattern. - Built-in grep adds new flag
--one-file-system
. When enabled, the search will not cross file system boundaries relative to where it started from. - Built-in grep adds new short flag
-.
as alias of long flag--hidden
. - Built-in grep adds new flag
--no-unicode
which disables Unicode-aware search. - Built-in grep improves the output from
--type-list
. Now types are printed in bold texts which is easier to see. - Syntax assets were updated to the latest. They improve some syntax highlight detection (for example,
vimrc
for Vim files) and solve some highlighting issues. - Fix a broken pipe error when
hgrep
command is piped to a pager command likeless
. This happened whenless
exits earlier thanhgrep
command, for example, when you immediately quit a pager byq
without scrolling the output to the end. In the case,hgrep
still tried to output the result to stdout even if the pipe had already been closed and it caused a broken pipe error. In v0.2.1,hgrep
correctly ignores such broken pipe errors. - Fix
--no-wrap
deprecated flag was not removed at v0.2.0. Use--wrap
instead if you used the flag. - Fix checksum of downloaded package via Homebrew on arm64 macOS.
- Fix
--type-list
flag did not print types when a pattern argument is not given. - (Dev) Move
asset-builder
tool directory toassets/builder
. - (Dev) The script to update test snapshots is now 25x faster.
- (Dev) CI job to run clippy and rustfmt is now 6x faster.
v0.2.0 - 06 Nov 2021
- BREAKING The default printer is now
syntect
. It has the following benefits. I tested it for several weeks and it seems stable. See the section in README to know the difference betweenbat
printer andsyntect
printer.- Performance is 2x to 4x faster
- Output layout and highlighting are optimized; line number highlight and matched regions at matched line
- Support background color with
--background
- Color themes are optimized
- BREAKING The default value of
--min-context
was changed from 5 to 3. And the default value of--max-context
was changed from 10 to 6. This is because it turned out that the previous default values were too large for surveying the search results. - BREAKING Since themes for
syntect
printer are now managed by ourselves (see below),syntect
printer no longer looks atBAT_THEME
andBAT_STYLE
environment variables. To set the default theme and layout, use shell's command alias. See the document for more details. syntect
printer now renders more accurate colors by considering alpha values of colors by blending them with background colors. In v0.1.9, alpha values were simply ignored. For example, gutter color withNord
theme was wrongly very light at v0.1.9.- Manage our own theme set to optimize themes for our use cases. Comparing with bat's theme assets, some themes are removed whose line highlight color and/or searched text color are obscure or hard to see. And some new famous themes are added. The theme assets are managed in
assets
directory. - Output of
--list-themes
is much improved. It shows sample outputs per theme so that users can know what they look like. Options related to outputs like--background
and--no-grid
are reflected to the sample outputs. At v0.1.9, only theme names were printed so users needed to try the themes by themselves. - Linux x86_64 musl target was added to pre-built releases. Find
hgrep-*-x86_64-unknown-linux-musl.zip
in released assets. Note that this binary is not tested. (#5) - Depend on
ansi_term
crate only when targeting Windows. It reduces number of dependencies whenbat-printer
is not enabled. - Improve a compile error when both feature
syntect-printer
andbat-printer
are disabled. - Describe the exit status of
hgrep
command and versioning of this project in the readme document. - Fix rendering
ansi
theme was broken. The theme is for old terminals which only supports 16 colors. - Fix
--first-only
did not work withbat
printer. - Fix the background color in file header when
--background
is specified
v0.1.9 - 01 Nov 2021
- Support multiple regions highlighting. In v0.1.8, matched region highlighting was added but it only highlighted the first match in the line. Now all matched regions are highlighted. Note that region highlighting is available when using hgrep in combination of
syntect-printer
andripgrep
features - Add
--ascii-lines
flag for terminals which does not support rendering unicode characters well. With this flag, unicode characters like '│' or '─' are replaced with ASCII characters '|' or '-'. This feature is only supported bysyntect-printer
(use-p syntect
). - Add
--first-only
(-f
) flag to show only the first snippet per file. This is useful when you want to look around the results. - Fallback to a minimap border color when no gutter background color is found.
- Reduce number of redundant color codes output to stdout by about 21.5% in test cases. This also improves performance by about 6%. See the commit for details.
- Performance of built-in grep was improved 20~80% when there are so many files to search. Previously the implementation collected all paths before searching a pattern in them, but with this improvement, the paths are now streamed. See the commit for details.
- Use mimalloc as global allocator for better performance. This improves performance by 0~55% in our benchmarks. See the commit for details.
- (Dev) Running unit tests is about 8.5x faster by caching assets for syntax highlighting.
v0.1.8 - 27 Oct 2021
syntect-printer
supports text-wrapping. Longer lines than terminal width are now wrapped by default. It can handle wide characters including special emojis with zero-width joiner (U+200D) like 👨👩👧👦syntect-printer
highlights matched regions in matched lines with a searched text color. Since match positions in matched lines are not included in output fromgrep -nH
, currently this is only supported by combination ofsyntect-printer
feature andripgrep
featuresyntect-printer
now uses light dashed lines for the separator of snippets:╶╶╶╶╶╶╶╶╶╶╶╶
- Add
--wrap MODE
option whereMODE
is one ofchar
ornever
(the default value ischar
). More modes may be implemented in the future - In favor of
--wrap
option,--no-wrap
flag is now deprecated and will be removed at v0.2.0. Use--wrap never
instead - When building binaries for Windows, link C runtime statically. This avoid depending on vcruntime DLL at runtime
- Critical section of
syntect-printer
was optimized. It slightly improved performance (around 4% faster in benchmarks) - Enable thin LTO for release build. It slightly improved performance (0~6% faster in benchmarks). See the commit for details
v0.1.7 - 24 Oct 2021
- Fix highlighting was broken on 256 colors terminals when using
bat-printer
. bat-printer
enables text wrapping by default asbat
command does.--no-wrap
can disable text wrapping.bat-printer
now looks at bat's cache directory when--custom-assets
flag is given. This is useful if you use some custom syntax highlighting or theme. Note that this may not work fine with some versions ofbat
command.bat-printer
automatically uses 'ansi' theme for terminals which enable only 16 colors since other themes don't work.- Add
--terminal-width
option to give the width of terminal explicitly. This is useful when piping the results to other command likeless
. - Fix build failure due to lack of assets (#4).
- Fix some newlines were missing when printing results with
syntect-printer
. - Use
terminal_size
crate directly instead of usingconsole
crate. It removes 3 dependencies whenbat-printer
feature is not enabled. - The document has been improved. Especially if you like a pager such as
less
, I recommend to check 'Set default command options' section. - (Dev) Several tests and benchmarks for
syntect-printer
were added.
v0.1.6 - 23 Oct 2021
- Add new experimental
syntect-printer
feature built with syntect library.- It is much faster than current printer built on bat (2x~4x faster).
- Its output layout is optimized for our use case. For example, line numbers at matches are highlighted in different color.
- It supports painting background colors with
--background
flag. This is useful when your favorite theme does not fit to your terminal's background color. - See
bat
printer v.s.syntect
printer section for comparison of the two printers.
- Add
--printer
(-p
) flag to specify printer to use. It takes argumentbat
orsyntect
.-p syntect
enables the new experimental printer bat
printer is now optional throughbat-printer
feature gate. Note that at leastbat-printer
orsyntect-printer
must be enabled. Both printers are enabled by default. See Feature flags section for more details.- hgrep is now available for NetBSD. See the instruction (thanks @0323pin, #3)
v0.1.5 - 20 Oct 2021
- Always use a relative path in header of output
- Fix an output is broken due to ANSI color sequence on Windows
v0.1.4 - 19 Oct 2021
- Fix compile error on
cargo install
due to new release ofclap
crate v3.0.0-beta.5 (#2) - Add how to install
hgrep
command with MacPorts. See the document for more details (thanks @herbygillot, #1)
v0.1.3 - 19 Oct 2021
- Heuristics on calculating context lines is 1.3x faster by using optimized memchr implementation when the searched file is large
- Homebrew is now supported for managing
hgrep
command on macOS or Linux. See the installation instruction for more details - Add
--grid
flag as an opposite of--no-grid
flag - Add CONTRIBUTING.md which describes the development of this project
- (Dev) Add some benchmark suites for each parts of this program to track performance
v0.1.2 - 17 Oct 2021
- Fix printing tab characters. Now default tab width is 4 (can be configured with
--tab
option). - Fix exit status is always 0 when no error happens. Grep tool should return non-zero exit status when no match was found.
- Add feature to generate shell completion scripts for Bash, Zsh, Fish, PowerShell, and Elvish. Check
--generate-completion-script
option. - Printing results is now much faster. It is 3.3x faster than previous.
v0.1.1 - 16 Oct 2021
First release 🎉
See the readme document for the usage.