v0.58.0

junegunn/fzfv0.58.0Jan 19, 2025by junegunn

Upgrading?

Release notes summary

Introduces granular borders for different sections and style presets for quick UI customization.

Key Highlights

  • Added style presets (`default`, `full`, `minimal`)
  • Added new border types: `--list-border`, `--input-border`, `--header-border`
  • Added `--preview-border` and new border style `line`
  • Added `change-nth` action for dynamically changing `--nth` values

New Features

  • Style presets
  • Granular borders (list, input, header)
  • `--preview-border` option
  • `toggle-multi-line` action
  • `toggle-hscroll` action
  • `change-nth` action
  • Nth text styling support
  • Single-character delimiter handling

Full Release Notes

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

This version introduces three new border types, `--list-border`, `--input-border`, and `--header-border`, offering much greater flexibility for customizing the user interface.

<img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-4-borders.png" />

Also, fzf now offers "style presets" for quick customization, which can be activated using the `--style` option.

| Preset    | Screenshot                                                                             |
| :---      | :---                                                                                   |
| `default` | <img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-default.png"/> |
| `full`    | <img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-full.png"/>    |
| `minimal` | <img src="https://raw.githubusercontent.com/junegunn/i/master/fzf-style-minimal.png"/> |

- Style presets (#4160)
    - `--style=full[:BORDER_STYLE]`
    - `--style=default`
    - `--style=minimal`
- Border and label for the list section (#4148)
    - Options
        - `--list-border[=STYLE]`
        - `--list-label=LABEL`
        - `--list-label-pos=COL[:bottom]`
    - Colors
        - `list-fg`
        - `list-bg`
        - `list-border`
        - `list-label`
    - Actions
        - `change-list-label`
        - `transform-list-label`
- Border and label for the input section (prompt line and info line) (#4154)
    - Options
        - `--input-border[=STYLE]`
        - `--input-label=LABEL`
        - `--input-label-pos=COL[:bottom]`
    - Colors
        - `input-fg` (`query`)
        - `input-bg`
        - `input-border`
        - `input-label`
    - Actions
        - `change-input-label`
        - `transform-input-label`
- Border and label for the header section (#4159)
    - Options
        - `--header-border[=STYLE]`
        - `--header-label=LABEL`
        - `--header-label-pos=COL[:bottom]`
    - Colors
        - `header-fg` (`header`)
        - `header-bg`
        - `header-border`
        - `header-label`
    - Actions
        - `change-header-label`
        - `transform-header-label`
- Added `--preview-border[=STYLE]` as short for `--preview-window=border[-STYLE]`
- Added new preview border style `line` which draws a single separator line between the preview window and the rest of the interface
- fzf will now render a dashed line (`┈┈`) in each `--gap` for better visual separation.
  ```sh
  # All bash/zsh functions, highlighted
  declare -f |
    perl -0 -pe 's/^}\n/}\0/gm' |
    bat --plain --language bash --color always |
    fzf --read0 --ansi --layout reverse --multi --highlight-line --gap
  ```
  ![](https://github.com/user-attachments/assets/203bf377-28da-4abf-a19c-d456ab1a72bb)
  - You can customize the line using `--gap-line[=STR]`.
- You can specify `border-native` to `--tmux` so that native tmux border is used instead of `--border`. This can be useful if you start a different program from inside the popup.
  ```sh
  fzf --tmux border-native --bind 'enter:execute:less {}'
  ```
- Added `toggle-multi-line` action
- Added `toggle-hscroll` action
- Added `change-nth` action for dynamically changing the value of the `--nth` option
  ```sh
  # Start with --nth 1, then 2, then 3, then back to the default, 1
  echo 'foo foobar foobarbaz' | fzf --bind 'space:change-nth(2|3|)' --nth 1 -q foo
  ```
- `--nth` parts of each line can now be rendered in a different text style
  ```sh
  # nth in a different style
  ls -al | fzf --nth -1 --color nth:italic
  ls -al | fzf --nth -1 --color nth:reverse
  ls -al | fzf --nth -1 --color nth:reverse:bold

  # Dim the other parts
  ls -al | fzf --nth -1 --color nth:regular,fg:dim

  # With 'change-nth'. The current nth option is exported as $FZF_NTH.
  ps -ef | fzf --reverse --header-lines 1 --header-border bottom --input-border \
             --color nth:regular,fg:dim \
             --bind 'ctrl-n:change-nth(8..|1|2|3|4|5|6|7|)' \
             --bind 'result:transform-prompt:echo "${FZF_NTH}> "'
  ```
  ![](https://junegunn.github.io/fzf/images/fzf-change-nth.gif)
- A single-character delimiter is now treated as a plain string delimiter rather than a regular expression delimiter, even if it's a regular expression meta-character.
    - This means you can just write `--delimiter '|'` instead of escaping it as `--delimiter '\|'`
- Bug fixes
- Bug fixes and improvements in fish scripts (thanks to @bitraid)

Related Repositories