v0.54.0

junegunn/fzfv0.54.0Jul 8, 2024by junegunn

Upgrading?

Release notes summary

Major release introducing line wrapping for long items, custom info commands, and significant improvements to the --sync behavior for handling initial rendering.

Key Highlights

  • Implemented line wrap of long items with --wrap option
  • Added --info-command option for customizing the info line
  • Improved --sync behavior to prevent rendering intermediate states
  • Added offset-middle action to place the current item in the middle
  • Fixed mouse support on Windows

New Features

  • Line wrapping support
  • Custom info command
  • Improved sync behavior
  • Offset-middle action
  • GET endpoint availability in actions

Full Release Notes

_Release highlights: https://junegunn.github.io/fzf/releases/0.54.0/_

- Implemented line wrap of long items
    - `--wrap` option enables line wrap
    - `--wrap-sign` customizes the sign for wrapped lines (default: `↳ `)
    - `toggle-wrap` action toggles line wrap
      ```sh
      history | fzf --tac --wrap --bind 'ctrl-/:toggle-wrap' --wrap-sign $'\t↳ '
      ```
    - fzf by default binds `CTRL-/` and `ALT-/` to `toggle-wrap`
- Updated shell integration scripts to leverage line wrap
    - CTRL-R binding includes `--wrap-sign $'\t↳ '` to indent wrapped lines
    - `kill **` completion uses `--wrap` to show the whole line by default instead of showing it in the preview window
- Added `--info-command` option for customizing the info line
  ```sh
  # Prepend the current cursor position in yellow
  fzf --info-command='echo -e "\x1b[33;1m$FZF_POS\x1b[m/$FZF_INFO 💛"'
  ```
    - `$FZF_INFO` is set to the original info text
    - ANSI color codes are supported
- Pointer and marker signs can be set to empty strings
  ```sh
  # Minimal style
  fzf --pointer '' --marker '' --prompt '' --info hidden
  ```
- Better cache management and improved rendering for `--tail`
- Improved `--sync` behavior
    - When `--sync` is provided, fzf will not render the interface until the initial filtering and the associated actions (bound to any of `start`, `load`, `result`, or `focus`) are complete.
      ```sh
      # fzf will not render intermediate states
      (sleep 1; seq 1000000; sleep 1) |
        fzf --sync --query 5 --listen --bind start:up,load:up,result:up,focus:change-header:Ready
      ```
- GET endpoint is now available from `execute` and `transform` actions (it used to timeout due to lock conflict)
  ```sh
  fzf --listen --sync --bind 'focus:transform-header:curl -s localhost:$FZF_PORT?limit=0 | jq .'
  ```
- Added `offset-middle` action to place the current item is in the middle of the screen
- fzf will not start the initial reader when `reload` or `reload-sync` is bound to `start` event. `fzf < /dev/null` or `: | fzf` are no longer required and extraneous `load` event will not fire due to the empty list.
  ```sh
  # Now this will work as expected. Previously, this would print an invalid header line.
  # `fzf < /dev/null` or `: | fzf` would fix the problem, but then an extraneous 
  # `load` event would fire and the header would be prematurely updated.
  fzf --header 'Loading ...' --header-lines 1 \
      --bind 'start:reload:sleep 1; ps -ef' \
      --bind 'load:change-header:Loaded!'
  ```
- Fixed mouse support on Windows
- Fixed crash when using `--tiebreak=end` with very long items
- zsh 5.0 compatibility (thanks to @LangLangBart)
- Fixed `--walker-skip` to also skip symlinks to directories
- Fixed `result` event not fired when input stream is not complete
- Built-in reader of the Windows binary will print forward slashes on MSYS and WSL (thanks to @charlievieth)
- New tags will have `v` prefix so that they are available on https://proxy.golang.org/

Related Repositories