Repository navigation
lez v0.28.5
Features & Enhancements
- NUL-Separated Stdin: Add
--stdin0, which reads paths separated by NUL as written byfind -print0orfd -0, whateverLEZ_STDIN_SEPARATORsays. The last of--stdinand--stdin0wins (#143). - Styled Link Targets: Combine
ln=targetwith style attributes, both inLS_COLORS/LEZ_COLORS(ln=target;3) and intheme.yml(foreground: targetwithis_italic: true). Broken links (or=) are unaffected (#135, #136). - Odin Icon: Give Odin source files an icon (#149).
Behaviour Changes
- Shell-Safe Quoting:
--quotes=autoquotes every name a shell would read differently, as GNUlsdoes, and writes a name holding a control character in ANSI-C quotes ($'new\nline'), which a shell reads back as the same name.--quotes=neverand Windows keep the old escapes (#149). - JSON Output:
--jsonwrites every separator without a space, leaves the table's padding out of dates, ends the document with a newline, and leaves a link's target out under--no-symlink-targets(#149). - Environment Values Are Checked:
TIME_STYLEis read as GNUlsreads it,localeandposix-STYLEincluded. An invalidTIME_STYLEorLEZ_MIN_LUMINANCEis now an error (exit 3) instead of a silent fallback (#149). - Strict Mode: Accept the flags a view prints without
--long(--total-size,--print-total, and the tree's--extendedand--mounts), and refuse a layout flag beside--code, which replaces every layout (#149). - Security Context on Every Platform:
-Zshows a?column on macOS and Windows instead of being dropped silently (#149). - Locale-Aware Numbers: macOS and Windows group digits the way the locale does, so macOS under
LANG=Cprints15003rather than15,003(#149).
Bug Fixes & Hardening
- Multi-Hop Symlink Chains: Resolve each hop from its own link's directory, so
a -> b -> file.pdfis followed to the end. A revisited link or a chain longer than 32 links counts as broken, andln=targetcolours a link by the end of its chain (#138, #147). - Classify Indicators on Targets: A link to
/no longer prints-> //, a target keeps the trailing slash it was written with, and-XFclassifies a link by the end of its chain (dir/,run*) (#140, #147). - Absolute Paths of Links:
--absolute=followkeeps a link's own name in the long view instead of printing its target on both sides of the arrow, and gives a broken link in the working directory an absolute path, as--hyperlinknow does too (#141, #142, #145, #147). - Link Target Colours: Paint the path after
->in its file-kind colour, so directories, executables, pipes, sockets and devices keep theirs (#137, #144). - Dereference (
-X): Every column that describes the target (type, permissions, size, blocks, owner, links, inode and timestamps) reads the same file, a broken link falls back to its own permissions,--only-dirs -Xkeeps links to directories, and--only-files -Xkeeps links that end at a regular file (#139, #146). - Missing Targets (
mi=):mi=inLS_COLORSnow colours the missing path a broken link points to, falling back toorwhen unset. An empty,0or00value ofmi,caormh, asdircolorswrites them, reads as unset (#141, #145, #149). - Themes and Icons: The
lin the permissions column keeps only the link's attributes underln=target. Built-in icons are kept when a theme sets default ones, totals stay bold when a theme leavescolourfulout, an icon is painted in its name's colour, and the user's folders get their icons from a relative path (#149). - Tree, Grid and Colour Scale:
lez -lT --color-scalewithout a path shades the whole tree,-T -fdraws the edges of the whole tree, and the grid-details view spaces its columns and headers like the long view (#149). - Archives: Entry sizes come from the archive, PAX records included, and a listing cut short ends with
… (more than 500 entries)instead of a made-up entry (#149). - Lines of Code: A followed link's language is named after its target, nested block comments stay whole, Perl POD that opens with any command is counted, and here-documents in shell, Ruby, Perl and PHP count as text (#149).
- Options and Configuration: Error messages name the variable a bad value came from,
--total-sizecosts no recursive I/O in a view that never prints sizes, a discovered config file that does not parse is reported, theabsolutekey takes effect, and an emptyLEZ_CONFIG_FILEis passed over (#149). - Output: The listing is flushed before a message on stderr,
--warn-hiddensays "1 hidden item", a plist keeps its newlines, and a directory no longer holds its descriptor open after it is read (#149).
Documentation
- Docs Checked Against the Binary: The README and the man pages stop documenting what lez does not read (a
recenttime style,CLICOLOR,LEZ_OVERRIDE_AUTO_COLOR, theiccolour key) and start documenting what it does (relative-recent:DAYS,LEZ_DEBUG, exit status 2, thehwand Finder-tag colour keys, every accepted ANSI code).--spacinggets its real range, the theme outline its missing keys, the theme schema accepts styled symlinks, and-O's help names Linux (#152).
Testing & Quality Assurance
- Test Audit Against Independent Oracles: Every test that compared a fragment of the output now compares the whole of it against an independent source (
read_dirorder,stat,GetFileAttributesW,locale -k, and GNUlswhere it is the reference), and each fix fails its test against the old code. Line coverage rises from 91.98% to 93.35% (#149).
Distribution & CI Automation
- CI Gates: A single
CI resultcheck stands for the whole run, the stable rows build with stable Rust, Clippy runs on macOS and Windows, every cargo command uses--locked, the fuzz targets are compiled in the lint job, RustSec advisories are scanned weekly, and actions are pinned to commits with read-only tokens (#150, #151). - Release Dry Run: Run by hand or by a pull request that changes it, the release workflow builds and packages every target without publishing (#151).
- crates.io Publishing: The release workflow publishes the crate to crates.io once the GitHub release is out, by Trusted Publishing, so no registry token is stored; a dry run checks the package (#152).
- Release Notes from the Changelog: The GitHub release notes are this file's section for the version, and a tag that does not match
Cargo.tomlstops the release before anything is published. The Homebrew bump runs in a job of its own, so a tap token that cannot write no longer marks the release failed (#152). - Dependency Bumps: The weekly bump now pushes its branch and opens its pull request with a CI run, the Nix canary substitutes from cache.nixos.org, and the flake inputs are current (#148).
Checksums
0ee8b997da32e085932f8774f7beff8221f15c852b4a74fe25376a43c7c5f546 ./completions-v0.28.5.tar.gz
d95541016c1a76cdaf9cf8ac9873574d94a12b477cb3f027b1c5238580a90337 ./lez_0.28.5-1_amd64.deb
c4585a10d0177324fc491ef9a434b37abaf55245531a98dd5cff26306981bba9 ./lez_aarch64-apple-darwin.tar.gz
f3fb2d943ba19ff23b74a259e86f54b0a0e0c584db37f40e253f048f7e6ed1e5 ./lez_aarch64-pc-windows-msvc.zip
bf06267894de84116c1b4c4de9a9f0d138807909a6e7b5241cd91d31b56152a0 ./lez_x86_64-apple-darwin.tar.gz
f41652c592db2b3632ef4bcde226d462a22bcf9c7afb751d80958bf6952aef46 ./lez_x86_64-pc-windows-msvc.zip
6d7df36bb424fb576a1501255f59f4fbbe28c5580e237e20dc87a5bf10a614ab ./lez_x86_64-unknown-linux-gnu.tar.gz
9d1fd6c62f64e1a6df876f01e17ed86e2dbdc4724a772ad022038cb4587a9f23 ./man-v0.28.5.tar.gz