github sxyazi/yazi v0.2.4

latest releases: v0.3.3, shipped, v0.3.2...
8 months ago

This version adds support for cross-directory selection, which means you can select files from multiple different directories and perform operations on them.

Yazi's accessibility also has been greatly improved, including adding color to icons, a new file selection counter, improved visibility of hovered files, enhanced keyword recognition in finds, long path truncation, and a new color system.

As for the plugin system, we have rewritten Yazi's Lua binding using Unsafe Rust, making the initialization process of plugins very inexpensive by lazy-loading app data. This fundamentally solves the difficulty of cross-tab data access, making future plans for dual-pane/tree-view possible, as they can be efficiently implemented as a plugin!

In addition, loaded plugins are now cached, meaning that plugin loading speed will be faster. The improvement in plugin performance directly reflects the overall performance of Yazi because in Yazi, plugins are first-class citizens, with most UI being drawn by built-in UI plugins, and previews and preloads also being done through plugins, which is the biggest driving force for us to constantly improve plugin performance.

Finally, we have added some new APIs that we hope plugin developers will find useful:

  • ya.input(): Request user input;
  • ya.notify(): Send a foreground notification to the user, which is useful for background tasks;
  • ya.hide(): Request terminal control and hide Yazi in the background. This is useful for calling interactive programs like fzf, zoxide, etc., in plugins;
  • ui.Clear(): Clear a specific UI area, which is useful for implementing custom UI layouts.

To implement ya.notify(), we have added a new Vim-like notification component:

Vim-like.notification.mp4

For more changes, please read "What's Changed" below.

Heads up

The exec property will be deprecated in the next major version, v0.3, and will be replaced by run.

Please replace all instances of exec = ... with run = ... in your yazi.toml and keymap.toml if any.

What's Changed

  • perf: cheaper sync context initialization by @sxyazi in #643
  • feat: allows access to complete app data for all tabs by @sxyazi in #644
  • feat: add <Home> and <End> to [input] keymap by @grig-iv in #655
  • feat: add <Delete> to [input] keymap by @grig-iv in #665
  • ci: add clippy/rustfmt workflow by @uncenter in #663
  • feat: enable the ability to sort the which key by @abhaysp95 in #662
  • refactor: tab-specific selection by @sxyazi in #653
  • feat: Vim-like notification by @sxyazi in #659
  • feat: add prepend_rules and append_rules for [icon] by @grig-iv in #670
  • feat: add new scrolloff option to [manager] by @dedukun in #679
  • feat: add color to icons by @Andy-W-Developer in #683
  • feat: expose selected/yanked files as API by @sxyazi in #674
  • feat: add new file marked state by @sxyazi in #682
  • feat: add counter component to the header for displaying currently selected/yanked items by @Rolv-Apneseth in #646
  • feat: add icons for Scala, Elm and Java (.jar & .class) by @jpaju in #684
  • feat: add a new option --hovered to the open command by @fakerepic in #687
  • refactor: using definite patterns to simplify keybindings by @sxyazi in #690
  • feat: nested selection conflict detection by @evpeople in #689
  • feat: cross-directory selection by @sxyazi in #693
  • fix: allow running ya.sync in a sync plugin call by @dedukun in #702
  • fix: ignore further classified mime-types by @sxyazi in #707
  • perf: cache loaded plugins by @sxyazi in #710
  • feat: add icons for C#, KDL and Nushell by @lpnh in #711
  • feat: better accessibility by @sxyazi in #719
  • fix: rendering fails when no file type style is matched by @sxyazi in #721
  • fix: skip when the mime-type cannot match due to file permissions by @sxyazi in #725
  • refactor: new yazi-boot crate by @sxyazi in #728
  • fix: initialize logs right after configurations by @dedukun in #708
  • refactor: prefer Display over ToString by @sxyazi in #734
  • feat: add hovered as $0 for shell and opener by @rrveex in #738
  • feat: add a new [notify] section to the theme.toml to configure the notify component's style by @evpeople in #749
  • feat: add prepend_rules and append_rules for [open] in yazi.toml by @lpnh in #754
  • feat: support YAZI_FILE_ONE environment variable for file(1) path by @ndtoan96 in #752
  • perf: apply add_many()/remove_many() to the visual mode items for selection conflict detecting by @sxyazi in #758
  • feat: support %0 as the hovered file for Windows by @sxyazi in #761
  • feat: ya.input() plugin API by @sxyazi in #762
  • feat: add musl linux build targets by @uznog in #759
  • fix: nested conflict detection exception when performing cross-level searches by @sxyazi in #769
  • refactor: add new run property by @sxyazi in #773
  • feat: add Ctrl-[ as an escape key by @hankertrix in #763
  • feat: ya.notify() plugin API by @sxyazi in #780
  • feat: ui.Clear component for UI plugins by @sxyazi in #786
  • feat: add <C-p> and <C-n> to the select component for moving the cursor up/down by @hankertrix in #779
  • feat: send a foreground notification to the user when the process fails to run by @hqwuzhaoyi in #775
  • feat: cx.yanked plugin API by @sxyazi in #788
  • fix: track the latest file changes for the selected, yanked state when available by @sxyazi in #791
  • feat: truncate path for deeply nested directories by @yixiaojiu in #787
  • feat: ya.hide() plugin API by @sxyazi in #792

New Contributors

Full Changelog: v0.2.3...v0.2.4

Don't miss a new yazi release

NewReleases is sending notifications on new releases.