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
andappend_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 theopen
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
overToString
by @sxyazi in #734 - feat: add hovered as
$0
for shell and opener by @rrveex in #738 - feat: add a new
[notify]
section to thetheme.toml
to configure thenotify
component's style by @evpeople in #749 - feat: add
prepend_rules
andappend_rules
for[open]
inyazi.toml
by @lpnh in #754 - feat: support
YAZI_FILE_ONE
environment variable forfile(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
- @grig-iv made their first contribution in #655
- @abhaysp95 made their first contribution in #662
- @dedukun made their first contribution in #679
- @jpaju made their first contribution in #684
- @fakerepic made their first contribution in #687
- @evpeople made their first contribution in #689
- @lpnh made their first contribution in #711
- @rrveex made their first contribution in #738
- @uznog made their first contribution in #759
- @hankertrix made their first contribution in #763
- @hqwuzhaoyi made their first contribution in #775
- @yixiaojiu made their first contribution in #787
Full Changelog: v0.2.3...v0.2.4