Changes ======= v0.6.0 - UNRELEASED [Breaking Changes] * Migrated terminal backend from termbox-go to tcell (#567). * Removed deprecated config fields `Matcher`, `InitialMatcher`, and `CustomMatcher`. Use `InitialFilter` and `CustomFilter` instead. Note: `CustomFilter` uses a different format than `CustomMatcher`: Before: "CustomMatcher": { "MyFilter": ["/path/to/cmd", "$QUERY"] } After: "CustomFilter": { "MyFilter": { "Cmd": "/path/to/cmd", "Args": ["$QUERY"] } } * Removed deprecated CLI option `--initial-matcher`. Use `--initial-filter` instead. * The action `ViewArround` has been renamed to `ViewAround` (fix typo). The old name still works but shows a deprecation notice. If you have `"ViewArround"` in your config, please update it to `"ViewAround"`. * Removed `Use256Color` config field. After the tcell migration, 256-color and truecolor support is automatic via terminfo detection. Existing configs with this field will continue to load without error. * Shift+Tab is now mapped to Tab internally. Use `M-[,Z` in your keymap config if you need a distinct Shift+Tab binding. * Default key bindings for `GoToNextSelection` and `GoToPreviousSelection` have changed. `GoToNextSelection` was previously unbound (it silently conflicted with `KillEndOfLine` on Ctrl+K in v0.5.x) and is now bound to Alt+j. `GoToPreviousSelection` was previously bound to Ctrl+J and is now bound to Alt+k. * Query terms starting with `-` are now interpreted as negative (exclusion) filters. In v0.5.x, `foo -bar` searched for lines matching both "foo" and literal "-bar"; in v0.6.0 it searches for "foo" while excluding lines containing "bar". To match a literal hyphen prefix, escape it with a backslash: `\-bar`. [Features] * Added YAML configuration file support. You can now use `~/.config/peco/config.yaml` in addition to JSON (#576). * Added negative filter terms. Prefix a search term with `-` to exclude matching lines, e.g. `-unittests SSO` matches "SSO" but excludes lines containing "unittests" (#434, #592). * Added `peco.Freeze` / `peco.Unfreeze` / `peco.ToggleFreeze` actions. Freezing locks the current result set so you can clear the query, switch filters, and continue filtering against the frozen subset (#424, #596). * Added `--height` option for inline display. Limits peco to the specified number of terminal rows instead of taking over the full screen (#471, #598). * Added `peco.ZoomIn` / `peco.ZoomOut` actions that expand visible context around matched lines, showing surrounding lines (#289, #600). * Added ANSI color rendering support. Colored output from tools like `git log --color` or `rg --color` is now displayed with colors preserved (#398, #602). * Added `IRegexp` filter for case-insensitive regexp matching, so you no longer need to manually type `(?i)` in regex queries (#564). * Added `--exit-0` option to immediately exit with non-zero status when the input is empty, analogous to `--select-1` (#538, #582). * Added Ctrl+Shift key modifier and CSI u / fixterms escape sequence support for modern terminals (#529, #581). * Added Page Up/Down and Home/End key support (#428, #584). * Added a new layout type: top-down list with query prompt at the bottom (#445, #595). * Added man page (`peco.1`) for offline documentation (#467, #587). * Added support for ANSI color codes in the `--prompt` string (#294, #586). * Added `QueryCursor` style for explicit control over the query prompt cursor appearance. When not configured, the cursor is derived from the `Query` style by swapping fg/bg colors. [Bugs/Fixes] * Fixed `ToggleQuery` (C-t) not working correctly (#563). * Fixed fuzzy sort producing incorrect order with >1000 lines of input due to chunk-size boundary (#557, #589). * Fixed matched highlight style bleeding to the right edge of the terminal (#460, #583). * Fixed screen not being properly redrawn when stderr output from piped commands corrupts the display (#455, #588). * Suppressed flickering "Running query..." status message (#511, #585). * Fixed `--null` not working correctly with custom filters (#312, #577). * Fixed `doGoToNextSelection` and `doGoToPreviousSelection` sharing the same default key binding (#575, #579). `GoToNextSelection` is now bound to Alt+j and `GoToPreviousSelection` to Alt+k. The previous Ctrl+J and Ctrl+K bindings have been removed (Ctrl+K remains bound to `KillEndOfLine`). If you relied on Ctrl+J or Ctrl+K for selection navigation, update your keymap config. * Fixed `GoToPreviousSelection` being registered with a malformed internal name (`\tdoGoToPreviousSelection`) in v0.5.x. Users who had `"peco.GoToPreviousSelection"` in their config keymap will find that it now correctly binds to the action. * Fixed `lastLine` tracking variable not being updated (#574, #578). * Fixed tab rendering off-by-one error (#672). * Fixed various internal race conditions, resource leaks, and potential deadlocks. [Performance] * Optimized filtering for large inputs with parallelized workers, achieving 7-30x speedup for ~1M lines (#454, #590). * Reduced overall memory consumption (#572). [Miscellaneous] * Large-scale internal refactoring and cleanup. * Documented horizontal scrolling in README (#480). v0.5.11 - 21 Mar 2023 [Features] * Added new option for "FuzzyLongestSort" flag that can be specified in your config file as ``` { "FuzzyLongestSort": true, ... } ``` allows you to sort matched lines with the following ordering precedence (#539): 1. longer substring 2. earlier (left positioned) substring, and 3. shorter line. [Miscellaneous] * Posted project status at https://github.com/peco/peco/discussions/540 v0.5.10 - 08 Jun 2021 * Previous release was botched. No code change except for version string, and Makefile typo. v0.5.9 - 08 Jun 2021 * Remove support for 386 arch * Add go.sum * Add darwin-arm * Fix double cursor issue (#513) v0.5.8 - 18 Jul 2020 Features: * Add support for 256-colors in the configuration. You must first enable this in the config file by specifying "Use256Colors": true v0.5.7 - 10 Jan 2020 Bugs/Fixes: * Code introduced in v0.5.5 introduced a bug where if the input is coming from standard input and is possibly infinite, the user would see the query being "stuck" after the first character is entered. If peco was applied on a finite set of data, this did not manifest itself. (#494 fixed by #495) v0.5.6 - 07 Jan 2020 Miscellaneous: * I completely messed up the release process. Retagging and uploading binaries properly. No code changes except for the version number (#493) v0.5.5 - 02 Jan 2020 Features: * Properly exit out of pec if --select-1 and --query are both specified, and the query produces exactly one result (#490) v0.5.4 - 19 Dec 2019 Miscellaneous: * Properly set cursor position (#450) * Update termbox-go version (#487/#488) * Update go version to go 1.13 v0.5.3 - 12 Mar 2018 Features: * New --print-query option prints out the query upon successful exit * New actions ScrollFirstItem and ScrollLastItem Miscellaneous: * Update termbox-go version (#447) * Documentation fixes (#444) * Build peco using go1.10 v0.5.2 - 08 Dec 2017 Backwards Incompatible Change: * --version flag now prints out the Go version used to build the binary Micellaneous: * Various doc fixes * Build peco using go1.9.2. * There have apparently been problems running the stock peco binary in MacOS High Sierra, with an error message like "failed MSpanList_Insert...", which can averted by compiling the binary with a newer Go. Reports suggest that peco v0.5.1 is not affected by this problem, but we're making this release anyway just to make sure that we're building on a new-ish Go, and that users have a way to see what Go version was used to build their binaries v0.5.1 - 17 Mar 2017 Bugs/Fixes * When --exec is used, and you come back from the external command, you lost your selected location in the peco view. #410 Backwards Incompatible Change: * --tty has been removed. it was not being used anyways. Miscellaneous * When scrolling right, you could potentially keep on scrolling infinitely. This has been addressed by #409, #412 * External commands specified in --exec now receive PECO_FILENAME, PECO_LINE_COUNT, PECO_QUERY, and PECO_MATCHED_LINE_COUNT as environment variables * Removed unused structs * Fixed glide related Makefile actions v0.5.0 - 06 Mar 2017 Backwards Incompatible Change: * ExecuteCommand has been removed. Features: * A new command line option `--exec` has been added. This allows you to execute external commands via shell, and should be used as replacement to `ExecuteCommand` * A new configuration option `MaxScanBufferSize` has been added. Whereas bufio.Scanner (which peco internally relies on) only accepts lines that are < 64kb when reading the input, specifying this option in the config allows you to change this limit. The default MaxScanBuferSize is 256kb. Bugs/Fixes * When executing external commands, the screen and the capturing of user input would interfere when getting back to peco. v0.4.9 - 01 Mar 2017 Bugs/Fixes * SavedSelection under `--selection-prefix` was not properly working (#388) * An outstanding bug from v0.4.0 where specifying `--query` for a large enough input would lose results in the first query execution has been fixed (#389) v0.4.8 - 26 Feb 2017 Features: * A new command line option `--on-cancel` has been added. This allows you to determine if the user has canceled the query, which can be useful in a pipeline of commands. * `OnCancel` does the equivalent of `--on-cancel` in the config file. * A new command line option `--selection-prefix` has been added. This allows you to use a string prefix instead of highlighting currently selected lines. * `SelectionPrefix` does the equivalent of `--selection-prefix` in the config file. Miscellaneous * Build using go 1.8 v0.4.7 - 17 Dec 2016 Bugs/Fixes * A regression of #363 appeared again, because the test was not testing for the correct behavior (#376) Miscellaneous * Internal house cleaning v0.4.6 - 14 Dec 2016 Features: * A new fuzzy filter has now been added. See README for details (#369, #370) Bugs/Fixes * A very subtle timing issue that causes the search to be reset has been resolved (#368) v0.4.5 - 30 Oct 2016 Bugs/Fixes * v0.4.4 broke --select-1 :/ (#363) v0.4.4 - 23 Oct 2016 Bugs/Fixes * Fix to force a redraw of the screen when the query becomes empty (#346) * Fix blocking when read from an slow input source is interrupted in the middle (#359) * Remove gratuitous use of panic that could happen occasionally when we bail out of setup (like the scenario above) v0.4.3 - 05 Oct 2016 Bugs/Fixes * Fix to apply InitialFilter setting from config file (#343) * Fix --buffer-size option * Fix --prompt option * Fix deadlock when certain actions are combined in the custom action sequence. This bug probably existed for a long time, but probably nobody bothered to report or didn't use the combinations that causes the deadlock (#345) * Force redraw when SelectNone/RefreshScreen is called (#346) v0.4.2 - 23 Aug 2016 Bugs/Fixes * Fix single key jump mode (#331, #332) v0.4.1 - 21 Aug 2016 Bugs/Fixes * Fix a panic that went unnoticed (#328, #329) v0.4.0 - 19 Aug 2016 Miscellaneous: * There is no real user visible change for this release * Build using go 1.7 * LOTS of internal cleanup * Eliminated (hopefully) all of potential races * Remove silly embedded structs that existed all over the place * New pipeline mechanism should allow slightly faster filtering * Many fixes to properly release resources acquired by goroutines v0.3.6 - 11 May 2016 Features: * Implement way to execute arbitrary commands via ExecuteCommand config Bugs/Fixes: * Fixed wrong default value for LayoutType * Fixed wrong (actually lack of) extension for Windows binary Miscellaneous: * Changed textual cursor representation * Changed dependency manager to glide * Changed build system to... make. Yes. Make. * Compile with go1.6 v0.3.5 - 30 Oct 2015 Features: * Implement --select-1 option (#278) Bugs/Fixes: * Do not switch lines when there's no output (#274) Miscellaneous: * Fix automatic gzip generation (#275) v0.3.4 - 29 Sep 2015 Features: * Implemented SingleKeyJump mode, a.k.a. hit-a-hint Bugs/Fixes: * Fix a problem where lines were sometimes not highlighted * Executing a query may sometimes result in a shorter list of entries such that the page you were at before the query is no longer valid. The cursor would now move to the closest page instead of an empty buffer Miscellaneous: * Only support go1.5 (we now use cross compilation and internal packages) * `go run build/make.go build` will now build all of the peco release files v0.3.3 - 11 Jul 2015 Features: * Implemented ScrollLeft/ScrollRight, to read long lines * Implemented BackToInitialFilter, to make it easier to create combined actions that change the filter type Bugs/Fixes * Build properly on *BSDs v0.3.2 - 24 Mar 2015 Bugs/Fixes * Filtered results could be wrong when QueryExecutionDelay is set to 0 (#241) v0.3.1 - 24 Mar 2015 Bugs/Fixes * Regexp filter was accidentally disabled (#239/#240). Now it's back v0.3.0 - 20 Mar 2015 * BEWARE! 50% of the code has been rewritten! Features * Matchers are now known as Filters * Added StickySelection configuration option * Added QueryExecutionDelay configuration option * Added CustomFilter.BufferThreshold option * For Windows, an extra space at the bottom has been added to facilitate those users using an IM (which consumes an extra line) Deprecations * --no-ignore-case has been completely removed * InitialMatcher configuration option has been deprecated. Use InitialFilter * CustomMatcher configuration option has been deprecated. Use CustomFilter * RotateMatcher action has been deprecated. Use RotateFilter Miscellaneous * To enable trace logs, compile with `-tags debug`, and enable the logs via PECO_TRACE environment variable. e.g. `PECO_TRACE=1 peco ...` v0.2.12 - 27 Feb 2015 Bugs/Fixes * Lines with tabs didn't display properly. * Matches that would fail to hilight certain parts of the text depending on the term order * SelectNext/SelectPrevious actions were reversed (however, these were deprecated anyways) Miscellaneous * You no longer need to tap our custom tap for peco to be installed from homebrew. * Custom matcher processing is fater now v0.2.11 - 16 Dec 2014 Features * Add a InvertSelection action. Not default keymapping has been assigned as of this change, so you need to explicitly set one in your config file. * Display total entries in additin to number of pages * Add experimental ToggleQuery action which enables/disables the current query. Miscellaneous * Massive refactoring to avoid possible race conditions. Note that I am not aware of any breakage caused by previous builds of peco. Even without these changes you most likely did not see a race or it was something you could totally ignore by simply redrawing the page. However, since I was in the mood, and since go is awesome for providing us the `-race` switch, I decided to silence these warnings. * Fix handling of --layout option when no config file is not present. v0.2.10 - 24 Sep 2014 Bugs/Fixes * There was a race condition in the way status messages were cleared, which could leave a message to be not cleared. This has no serious practical impact as it's just the status message, but has been fixed. Miscellaneous * We stopped using godep because it no longer allowed us to use -copy=false. This should have no effect on users. * Update termbox-go dependency * Remove stdout hack v0.2.9 - 08 Sep 2014 Features * Add SmartCase matcher, which automatically toggles between case sensitive and insensitive modes depending on the case of your query. * Ctrl-l is now "peco.RefreshScreen", which basically runs the current query again Bugs/Fixes * User prompt is now draw *before* the filtering is executed. * Be more strict about checking invalid matchers. * Add more tests (work in progress...) v0.2.8 - 01 Sep 2014 Bugs/Fixes * Fix in v0.2.7 was apparently not enough. Things should be fixed now. * Long standing bugs against DeleteForwardWord/DeleteBackwardWord have been fixed v0.2.7 - 01 Sep 2014 Bugs/Fixes * A regression introduced in v0.2.6 for DeleteForwardChar/DeleteBackwardChar has been fixed * Some entries in the Keymap section of the README was wrong, and has been fixed v0.2.6 - 30 Aug 2014 Bugs/Fixes * --prompt option was not properly working Miscellaneous * Bunch of internal cleanups to make testing easier v0.2.5 - 18 Aug 2014 Features * Add --layout option, which allows you to switch between `top-down` and `bottom-up` layout mode. This is equivalent of percol's `--prompt-bottom --result-bottom-up`. Default is `top-down`. The same option can be specified in the config file as "Layout" Miscellaneous * Because of the layout option, SelectNext/SelectPrevious and SelectNextPage/SelectPreviousPage no longer made sense. Now all of these are DEPRECATED, and are aliases to different action names. See the README for the details. In particular, you would need to configure your key bindings using these if you want to use the `bottom-up` layout v0.2.4 - 13 Aug 2014 Features * Add --initial-matcher command line option to specify which matcher type to use upon start up. --no-ignore-case is deprecated * Add InitialMatcher option to the config file. Matcher option is deprecated. Miscellaneous * Binaries are now built using go1.3.1 v0.2.3 - 28 Jul 2014 Bugs/Fixes * Escape sequences are now stripped from input, so for example, colored output can now be fed into peco. Filtering is done against this stripped down buffer, but the original line is used for output. * Some color specification combinations caused weird color variations and in some worst cases caused crashes on Windows. v0.2.2 - 23 Jul 2014 Bugs/Fixes * Fixed display of characters with ambigous width Features * on_bold style attribute has been added. v0.2.1 - 15 Jul 2014 Features * Added the ability to setup custom combined keymap. You can now assign multiple commands to one key sequence. * Key sequence that is being processed currently is displayed in the status message bar v0.2.0 - 07 Jul 2014 Bugs/Fixes * Keymaps have gone through an overhaul. Hopefully it's easier for people who want to modify it to hack on it than before. * Piping multiple commands that use stdin now works properly (v0.1.12 was affected) * After multiple lines are selected, typing Enter (or "peco.Finish") prints out only the selected lines, and no longer adds the line where the cursor currently is placed on Features * --initial-index option has been added * --buffer-size option has been added * --prompt option has been added * Background color can now be changed * SelectAll/SelectNone/SelectVisible has bee added * Keymaps can now handle key sequences. For example, "C-x,C-c" can now be mapped to "peco.Cancel" for Emacs-like behavior * Selection by range is implemented. Now you can start a selection, move the cursor around, and select everything between the starting line and the last line the cursor was on. No default keys are available at this point, so assign peco.ToggleRangeMode to your favorite key v0.1.12 - 01 Jul 2014 Bugs/Fixes * Properly report an error if specified file does not exist Features * Previously peco only read from fixed size input, but now it can read from streaming input such as the result of tail -f . Do note that this buffer does take up memory, so you do not want to be running it for large data. v0.1.11 - 30 Jun 2014 Bugs/Fixes * CustoMatchers are now verified, i.e., exec.LookPath() is applied to the first argument to check if the command is actually executable * Exit code upon receiving signals are now non-zero, as it should have been to start with * Cross-compilation introduced problems with binary builds for darwin. This has now been fixed, but if you do get your hands on peco binaries before v0.1.11, don't expect it to read your config file. * A panic that may occur when you send new queries in very fast succession has been fixed for custom matchers. Features * C-c has been added to the default key binding. It causes peco to cancel the operation (exits with a non-zero status code) v0.1.10 - 25 Jun 2014 Bugs/Fixes * A panic that may occur when you send new queries in very fast succession has been fixed * Fixed the problem where Windows binaries were not able to handle Esc/Alt correctly v0.1.9 - 25 Jun 2014 Bugs/Fixes * Change the base go version to build binary to 1.3 v0.1.8 - 25 Jun 2014 Bugs/Fixes * Check for terminal update errors while drawing. Features * Support Alt key prefixes to keybindings (Note: currently does not work on windows) v0.1.7 - 22 Jun 2014 Bugs/Fixes: * Moved repository to a GitHub organization: http://github.com/peco/peco * Because of the above change, a lot of links, imports needed fixing. Features: * Automatically set GOMAXPROCS to NumCPU. If you would like to avoid this behavior, you can explicitly set GOMAXPROC env var to 1 (or whatever desired value) Miscellaneous * If you have cool uses for peco, please share them on the wiki: https://github.com/peco/peco/wiki/Sample-Usage v0.1.6 - 18 Jun 2014 Bugs/Fixes: * (You know you will get a bug report only AFTER you release a new version :) * Highlighting wide characters had some issues. This has been there since the first release, apparently v0.1.5 - 18 Jun 2014 Features: * Add experimental --null option v0.1.4 - 17 Jun 2014 Bugs/Fixes: * Check for ev.Ch and ev.Key (should fix input problems) * Fix crashing issue on empty match Features: * In your config, setting the value to "-" will remove the binding. * Default ToggleSelect binding has been changed to ToggleSelectAndSelectNext v0.1.3 - 17 Jun 2014 Bugs/Fixes: * When dealing with fast/successive user input on large buffers, peco was taking too long to execute queries. * XDG style config directories are now searched, and if all fails, falls back to the original ~/.peco/config.json * Some internal cleanup Features: * Multiple line selection has been implemented. Ctrl-Space will toggle the currently selected line, and peco will exit after printing all the selected lines. Note that on OS X, Spotlight by default captures these keys. You may need to reconfigure your settings. * Custom matchers via external processes have been implemented. See the README for more details v0.1.2 - 16 Jun 2014 Bugs/Fixes: * Multiple queries were not being match fully until the end of line (i.e. matches showed up correctly, but the display was not) * Going back to previous item from first item now pages back to last item. * Sending INT/TERM to peco now properly exits. * Some synchronization issues have been fixed (although, it would have never manifested itself when we were running with non-buffered channels) * Make sure default matcher is IgnoreCase Features: * RegExp match mode. e.g. match against "^root" or "2014-[0-9]+", etc * Default match mode is now configurable. * The entire selected line is now highlighted * Styles (colors and what not) can now be configured. * Add C-d as a default keymap for ForwardDelete * Add EOF handler v0.1.1 - 12 Jun 2014 * Fix handling malformed input (e.g. cp932 or euc-jp) * Make non case sensitive matching the default. C-r allows you to toggle between match algorithms. You can also change the default behavior by passing --no-ignore-case * Fix terminal not being updated upon executing DeleteAll * Fix prompt spacing * Add more default keymappings * Add peco --version v0.1.0 - 12 Jun 2014 * Initial versioned release