./sysutils/yazi, Blazing fast terminal file manager

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 0.2.5, Package name: yazi-0.2.5, Maintainer: pin

Blazing Fast Terminal File Manager.

Yazi (duck in Chinese) is a terminal file manager written in Rust, based on
non-blocking async I/O.
It aims to provide an efficient, user-friendly, and customizable file
management experience.


Master sites:

Filesize: 710.977 KB

Version history: (Expand)


CVS history: (Expand)


   2024-04-24 08:51:22 by pin | Files touched by this commit (3) | Package updated
Log message:
sysutils/yazi: update to 0.2.5

This version introduces a new DDS (Data Distribution Service) aimed at
facilitating communication and state synchronization between multiple Yazi
instances, as well as state persistence.

It's built on a client/server architecture (without the need for running
additional server processes), and deeply integrates with a Lua-based
publish-subscribe model.

It also provides a set of new command-line options for interaction,
such as ya pub, ya pub-static, yazi --local-events, yazi --remote-events,
and currently used for:
 - Cross-process yank-paste
 - Change Yazi's CWD to PWD on subshell exit
 - Integration with the new yazi.nvim plugin: subscribing to file deletion,
   movement, and renaming events through yazi --local-events to keep Neovim's
   buffer/LSP in sync
 - bookmarks.yazi plugin: Saving bookmarks added by the user through the
   persistence feature provided by DDS

Performance optimizations
 - Reduced CPU overhead during icon matching: Icon matching accounted for 35.6%
   of CPU time during rendering, and by changing the matching algorithm, this
   proportion has been reduced by ~10%
 - Caching of each matched icon to avoid repeated calculations: By caching
   icons, further reductions in CPU usage for matching are achieved, as only a
   few new files that appear when scrolling through panes need to be matched
 - Re-implemented the file watcher in an async way: This is the only sync I/O
   operation besides configuration initialization at startup, which occurs
   during cd and scrolling through the file list. For certain slow external
   devices, Yazi would experience noticeable lagginess, which has now been
   addressed, see #877 for more details

Feature enhancements
 - Re-implemented fzf and zoxide as plugins for better flexibility: fzf and
   zoxide have added more runtime error handling. zoxide now supports the new
   update_db feature, which automatically adds Yazi's CWD to zoxide when
   navigating. To enable it, add the following to your init.lua:

   require("zoxide"):setup {
       update_db = true,
   }

 - Maintain the original modification time when copying files
 - Support smart case for cd path completion
 - Add placeholder messages when there are no files in the directory
 - Preserve the order of file selection when performing open, shell, or bulk
   rename on multiple selected files
 - Prevent copying a directory to itself

The plugin system has also seen some improvements:
 - ya.dbg() and ya.err() now support printing any type of data
 - New ps API as a carrier for DDS interaction
 - ya.manager_emit() now supports passing Url type

What's Changed
 - fix: use BTreeSet for selected files to maintain order by @sxyazi in #799
 - refactor: wrap Opener with Cow to avoid unnecessary memory reallocations
   when opening files by @sxyazi in #805
 - fix: respond to the SIGTERM signal even when Yazi is in the background and
   has passed control of the terminal to the spawned process by @sxyazi in #797
 - refactor: switch to stderr by @sxyazi in #819
 - feat: fix all dependencies to specific version numbers to allow non---locked
   builds by @sxyazi in #821
 - fix: adjust calculation for number of lines in a notification message
   by @Rolv-Apneseth in #828
 - fix: disable ANSI encoding for formatted events for the tracing_subscriber
   to clean up the logs by @Rolv-Apneseth in #832
 - feat: enhance the ya.dbg() and ya.err() debugging functions
   by @sxyazi in #835
 - perf: accelerate kitty graphics protocol encoding by avoiding string
   reallocation by @sxyazi in #837
 - fix: mime-type for xz archives by @sxyazi in #841
 - feat: time-based selection order preservation by @sxyazi in #843
 - feat: add support for YAZI_FILE_ONE to the built-in file previewer
   by @sxyazi in #846
 - fix: Windows cmd.exe not responding to correct CSI sequences due to ConPTY
   by @sxyazi in #845
 - perf: add BufWriter to Stderr to avoid frequent system calls and increase
   rendering frame rate by @sxyazi in #849
 - feat: DDS (Data Distribution Service) by @sxyazi in #826
 - perf: port require() and ya.sync() to Rust to avoid plugin information
   initialization process by @sxyazi in #853
 - feat: readable toml parsing error by @SoloJacobs in #854
 - feat: add a new sender property to the DDS payload by @sxyazi in #855
 - feat: the cd event in DDS will now also be triggered when the tab is first
   created by @sxyazi in #861
 - feat: detect CSI u through Stderr to allow using Stdout as the carrier of DDS
   payload without an ANSI sequence response timeout by @sxyazi in #867
 - fix: a race condition in DDS static messages sent as internal events
   by @sxyazi in #868
 - feat: add is_exec and is_sticky to Cha bindings by @sxyazi in #875
 - perf: re-implement file watcher in an async way by @sxyazi in #877
 - fix: CJK text rendering issue where the input popup component overlaps with
   images by @sxyazi in #879
 - feat: re-implement fzf as a built-in plugin by @sxyazi in #884
 - feat: add new --orphan option to the shell command by @sxyazi in #887
 - fix: file list expansion arguments ($@, $*) of shell command under opener
   rules are out of order by @sxyazi in #890
 - feat: add new move, trash, and delete event kinds to DDS
   by @mikavilpas in #880
 - feat: add YAZI_ID environment variable by @sxyazi in #895
 - feat: when there are no files in the list, add a placeholder message
   by @sxyazi in #900
 - feat: add loading state to directories by @sxyazi in #904
 - feat: default "Reveal" opener for Linux by @sxyazi in #907
 - perf: switch to globset to reduce CPU time spent on matching icons
   by @sxyazi in #908
 - feat: trigger path completion with both / and \ on Windows
   by @ndtoan96 in #909
 - feat: add a new ya send command to allow standalone client processes to
   communicate with DDS from the command line by @sxyazi in #913
 - feat: allow creating a tab with the startup directory when the tab_create
   command is called without specifying a path parameter by @sxyazi in #917
 - feat: generate autocomplete script for ya command by @sxyazi in #919
 - feat: allow opening interactively with the --chosen-file flag
   by @mikavilpas in #920
 - fix: rollback ratatui to v0.26.1 to avoid panicking by @sxyazi in #922
 - feat: expand the types supported by the event system by @sxyazi in #923
 - feat: change status bar percent at 100 to Bot by @AidanV in #930
 - fix: prevent pasting a directory into itself by @Rolv-Apneseth in #925
 - feat: preserve files' modified at timestamp while copying
   by @Rolv-Apneseth in #926
 - perf: cache each file's icon to avoid redundant calculations at rendering
   by @sxyazi in #931
 - feat: split ya send into ya pub and ya pub-static to make it more ergonomic
   by @sxyazi in #933
 - feat: new builtin session.lua plugin by @sxyazi in #940
   2024-03-09 22:50:33 by pin | Files touched by this commit (3) | Package updated
Log message:
sysutils/yazi: update to 0.2.4

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
   2024-02-19 08:17:55 by pin | Files touched by this commit (1)
Log message:
sysutils/yazi: satisfy pkglint

Also, fix error due to simultaneous commit.
   2024-02-19 08:05:18 by Thomas Klausner | Files touched by this commit (1)
Log message:
yazi: add missing tool
   2024-02-09 14:57:19 by pin | Files touched by this commit (3) | Package updated
Log message:
sysutils/yazi: update to 0.2.3

This version optimizes the loading speed for large directories - Yazi is now
~2.5 times faster than before.
For a directory benchmark containing 500,000 files (See #599 for details).

The release also adds support for previewing images over SSH, this allows you
to preview images directly on your local terminal by running Yazi on a server,
a highly anticipated new feature.

As for the plugin system, many improvements have been also made, such as
supporting passing arguments, plugin-specific state persistence, and listening
to key events in the plugin. During this period, we added a new Resources page
that documents plugins contributed by the community. Thanks to the lovely
plugin authors for creating and sharing these awesome plugins!

Lastly, some great news: Yazi has been featured on The Linux Cast - this is
Yazi's first appearance in video format, and I am really excited and proud to
see more and more people beginning to notice and take an interest in Yazi!

What's Changed

 - feat: customizing the number of columns of "which key" component
   by @sxyazi in #571
 - fix: input offset is not reset when renaming with --cursor=start and the
   filename is too long by @sxyazi in #575
 - feat: new image_quality and sixel_fraction options to allow users to
   configure the image preview quality by @sxyazi in #576
 - feat: allow to configure image filter by @sxyazi in #586
 - feat: support passing arguments to plugin by @sxyazi in #587
 - feat: plugin-specific state persistence by @sxyazi in #590
 - feat: preview image over SSH by @sxyazi in #585
 - perf: read directory in bulk in the background at startup, make Yazi ~2.5
   times faster than before by @sxyazi in #599
 - refactor: use Cmd instead of Exec by @sxyazi in #604
 - feat: support unyank by @15cm in #313
 - feat: make trash crate optional on Android by @sxyazi in #600
 - feat: plugin interface for key events via ya.which() by @sxyazi in #617
 - feat: app_emit and manager_emit accepts boolean, integer, and number as
   option values by @sxyazi in #625
 - fix: attach plugin args to the entry method for better future optimization
   possibilities by @sxyazi in #627
 - feat: support char device in filetype by @HE7086 in #628
 - fix: hidden attribute of files on Windows by @sxyazi in #632
 - fix: task manager not re-rendering after progress update by @sxyazi in #633
 - feat: if input is empty, close it on backspace command
   by @Rolv-Apneseth in #630
   2024-01-24 09:13:17 by pin | Files touched by this commit (1)
Log message:
sysutils/yazi: fix checksum

Fix checksum after upstream promotion of tag to release.
   2024-01-22 08:34:01 by pin | Files touched by this commit (3) | Package updated
Log message:
sysutils/yazi: update to 0.2.2

 - fix: can't clear screen and restore cursor when exit on Windows (#525)
 - fix: can't open and reveal paths with spaces on Windows (#526)
 - feat: add support for snap packages (#531)
 - feat: add desktop entry and logo (#534)
 - fix: can't display file name with invalid utf-8 (#529)
 - fix: follow symlinks when detecting mime-type on Windows (#527)
 - fix: shell input code highlighting is not adapted for the default ANSI
   theme (#536)
 - feat: add file(1) as the file fallback previewer (#543)
 - feat: add prepend_keymap and append_keymap for configuring mixing (#546)
 - feat: new host_name() API (#550)
 - fix: alternate tabs with the same path as the active tab cannot complete
   partial updates and cursor reset (#552)
 - fix: ensure that changing directories occurs before searching
 - feat: allow the spawned child processes to suspend (#556)
 - feat: support Windows ARM64 (#558)
   2024-01-16 22:30:31 by pin | Files touched by this commit (4) | Package updated
Log message:
sysutils/yazi: update to 0.2.1

Sorry, this is an urgent fix. The newly added rename --cursor=before_ext may
cause a crash when renaming files with Unicode characters, affecting new users
in CJK languages.

This version also adds support for trash v3.2.1, addressing a bug where the
trash bin couldn't be located correctly.
What's Changed
 - fix: renaming may cause a crash when encountering Unicode characters
   by @sxyazi in #519