Releases: Geekstrange/enhanced-ls
v0.1.4 - Enlighten. Enable. Erase.
📦 Release v0.1.4 - Enlighten. Enable. Erase.
This release refines the mode column in -l long‑format output. The symlink type character is now shown as a lowercase l in cyan, matching the symlink name color. Unset permission bits are rendered in gray, reducing noise and making the actual permissions easier to scan.
✨ New Features
- Colorized mode column in
-l- Symlink type character
Lis now displayed aslin cyan (\033[96m), consistent with the symlink file‑type color used in the name column - Placeholder
-characters are rendered in gray (\033[90m), visually receding unset permission bits and reducing visual clutter
- Symlink type character
🐛 Bug Fixes
None.
⚠️ Upgrade Notes
No breaking changes. The content of the mode column remains exactly the same (l was already used in place of L in POSIX ls output); only color codes are added. Scripts parsing raw mode strings without ANSI stripping are unaffected.
📦 发布版本 v0.1.4 - 点亮。引导。消隐。
本版本进一步细化了 -l 长格式输出中权限列的显示。符号链接类型字符现在以小写 l 青色呈现,与名称列中的符号链接颜色一致。未设置的权限位使用灰色渲染,降低视觉噪声,让有效权限更易于浏览。
✨ 新功能
-l模式权限列着色- 符号链接类型字符
L现显示为小写 青色l(\033[96m),与名称列中符号链接的文件类型颜色保持一致 - 占位符
-字符以灰色(\033[90m)渲染,让未设置的权限位视觉上退后,减少干扰
- 符号链接类型字符
⚠️ 升级注意事项
无破坏性变更。权限列的文本内容保持不变(l 本身就已经是 POSIX ls 中使用的字符);仅新增了 ANSI 颜色码。不处理颜色码的脚本不受影响。
v0.1.3 Dereference. Display. Detail.
📦 Release v0.1.3 - Dereference. Display. Detail.
This release adds symlink target display in -l long format mode. The name column now shows linkname -> target just like standard ls -l, making symlinks instantly readable without extra commands.
✨ New Features
- Show symlink targets in
-lmode- Symlink entries display as
name -> targetin the name column - Example:
info -> /usr/share/doc/info - Matches POSIX
ls -lbehavior - Non‑symlink entries remain unchanged
- Symlink entries display as
🐛 Bug Fixes
None.
⚠️ Upgrade Notes
No breaking changes. If you have scripts parsing -l output and relying on the name column containing only the filename, they may need to account for the -> suffix on symlinks.
📦 发布版本 v0.1.3 - 解引用。显示。细节。
本版本在 -l 长格式模式下增加了符号链接目标的显示。名称列现显示 链接名 -> 目标路径,与标准 ls -l 一致,无需额外命令即可看清链接指向。
✨ 新功能
-l模式显示符号链接目标- 符号链接条目在名称列中显示为
名称 -> 目标 - 示例:
info -> /usr/share/doc/info - 符合 POSIX
ls -l行为 - 非链接条目保持不变
- 符号链接条目在名称列中显示为
⚠️ 升级注意事项
无破坏性变更。如果你有解析 -l 输出且假设名称列仅包含文件名的脚本,需要留意符号链接处会增加 -> 后缀。
v0.1.2 Cycling. Coloring. Clarifying.
📦 Release v0.1.2 - Depth‑Cycling Tree Colors
This release adds a subtle but powerful visual aid to the -r tree view. Connectors (├──, ╰──, │) now cycle through six dim colors (yellow, cyan, green, magenta, blue, red) based on directory depth. The result: you can instantly see which branch a file belongs to without counting indentation.
✨ New Features
- Depth‑cycling dim colors for tree connectors (
-r)- Each directory depth level gets a distinct dim (faded) color:
- Depth 0 → yellow
- Depth 1 → cyan
- Depth 2 → green
- Depth 3 → magenta
- Depth 4 → blue
- Depth 5 → red
- Depth 6+ → cycles back from yellow
- Applies to connector symbols:
├──,╰──, and vertical line│ - File/directory names remain unaffected – only the guiding lines are colored
- Helps the eye track nesting levels without relying on indentation alone
- Each directory depth level gets a distinct dim (faded) color:
⚠️ Upgrade Notes
No breaking changes. If you have scripts that parse -r output with hardcoded ANSI sequences, note that new color codes appear on the connector lines – but the exact text of filenames and directory names is unchanged.
📦 发布版本 v0.1.2 - 树形连接符深度循环暗色
本版本为 -r 树形视图增加了一项细腻但实用的视觉辅助功能。连接符(├──、╰──、│)现在会根据目录深度循环使用六种暗色(黄、青、绿、品、蓝、红)。效果:无需数缩进,一眼就能看出文件属于哪个分支。
✨ 新功能
- 树形连接符(
-r)深度循环暗色- 每个目录深度层级获得一种独特的暗色(淡化色):
- 深度 0 → 黄色
- 深度 1 → 青色
- 深度 2 → 绿色
- 深度 3 → 品红色
- 深度 4 → 蓝色
- 深度 5 → 红色
- 深度 6+ → 从黄色重新开始循环
- 作用于连接符符号:
├──、╰──以及竖线│ - 文件/目录名称本身不受影响——只有引导线被着色
- 帮助眼睛追踪嵌套层级,不再仅靠缩进
- 每个目录深度层级获得一种独特的暗色(淡化色):
⚠️ 升级注意事项
无破坏性变更。如果你有脚本通过硬编码 ANSI 序列解析 -r 输出,请注意连接符上出现了新的颜色码——但文件名和目录名的文本内容不变。
v0.1.1 Brushing. Blushing. Bordered.
📦 Release v0.1.1 - Table Header & Tree View Style Refinements
This minor release polishes the visual details of both -l and -r outputs. The long format table now uses a shorter links header and adds permission‑character coloring (d/r/w/x). The tree output (-r) adopts rounded corners with gray borders, making the hierarchy feel softer and more modern.
✨ Style Improvements
-
Long format (
-l) table refinements- Renamed
num_linksheader to simplylinksfor cleaner display - Mode column now colorizes individual permission characters:
d(directory) → bluer(read) → yelloww(write) → redx(execute) → green
- Directory entries also receive colored mode column for better visual grouping
- Renamed
-
Tree output (
-r) rounded corners and gray borders- Replaced sharp corners with rounded
╰──style - Added gray‑colored (ANSI 90) border characters to reduce visual noise
- Replaced sharp corners with rounded
⚠️ Upgrade Notes
No breaking changes. These are purely visual tweaks; scripts relying on -l or -r text output (e.g., parsing raw strings with color codes) may need minor adjustments if they expect specific ANSI sequences.
📦 发布版本 v0.1.1 - 表头与树形视图样式细化
本小版本精细化打磨了 -l 和 -r 输出的视觉细节。长格式表格使用更简洁的 links 表头,并增加了权限字符(d/r/w/x)的颜色渲染。树形输出(-r)改用圆角加灰色边框,使层次结构看起来更柔和、更现代。
✨ 样式改进
-
长格式 (
-l) 表格细化- 将表头
num_links重命名为links,显示更简洁 - 权限列现在对单个权限字符着色:
d(目录)→ 蓝色r(读)→ 黄色w(写)→ 红色x(执行)→ 绿色
- 目录条目的权限列也会被着色,便于视觉分组
- 将表头
-
树形输出 (
-r) 圆角与灰色边框- 将尖锐角替换为圆角样式
╰── - 为边框字符增加灰色(ANSI 90)以降低视觉干扰
- 将尖锐角替换为圆角样式
⚠️ 升级注意事项
无破坏性变更。仅为视觉调整;依赖于 -l 或 -r 原始文本输出的脚本(例如解析带颜色码的字符串)可能需要小幅调整以适配新的 ANSI 序列。
v0.1.0 Breaking. Building. Borderless.
📦 Release v0.1.0 - Platform Refactoring & Nushell‑Style Output
We’re thrilled to introduce enhanced-ls v0.1.0 – a major internal cleanup that makes the codebase more maintainable and cross‑platform friendly. The highlight is a brand‑new -l output format inspired by Nushell, featuring rounded borders, space‑padded cells, and relative timestamps. This is a breaking change for scripts parsing the long format output. We also fixed several cross‑compilation type mismatches.
🚀 Highlights
- Nushell‑style
-loutput: Rounded corners (╭╮╰╯), aligned columns, and relative timestamps (e.g.,2 mins ago). - Platform code consolidation: Removed
runtime.GOOSconditionals, now using build tags for cleaner separation. - Cross‑compilation fixes: Corrected
Nlinktype mismatches on arm64, loong64, and darwin. - Executable detection refactored: Platform‑specific logic moved to dedicated files, improving Windows support.
✨ New Features
- Long format (
-l) now follows Nushellls -lstyle:- Columns: # / name / mode / num_links / user / group / size / modified
- Borders:
╭(top‑left),╮(top‑right),╰(bottom‑left),╯(bottom‑right) - Cell content is space‑padded for perfect alignment
- Timestamps are relative (e.g., “3 hours ago”, “yesterday”) instead of absolute
- Platform files
platform_unix.go/platform_windows.gonow contain all OS‑specific implementations.
🐛 Bug Fixes
- Cross‑compilation type mismatch – Converted
stat.Nlinktouint64on arm64, loong64, and darwin to satisfy Go’s strict typing. - Executable detection on Windows – Now uses
detectExecutableByExtensionconstant properly. - Symbolic link count –
getLinkCountnow calls the correct syscall on Unix (usingNlink) and returns 0 on Windows.
🧰 Maintenance & Code Health
- Removed all
runtime.GOOSchecks fromgetFileType– Replaced with build‑tag dispatched implementations. - Consolidated owner logic –
owner_unix.goandowner_windows.gomerged intoplatform_*.go. - Moved
getLinkCountto platform files – Unix uses realsyscall.Stat_t.Nlink, Windows returns 0. - Extracted executable detection –
checkExecutable()anddetectExecutableByExtensionnow live in platform files.
⚠️ Upgrade Notes (Breaking Change)
-
-loutput format is completely different:- Column order changed: previously
mode links user group size date name→ now# name mode links user group size modified - Borders and header style updated (rounded corners, space‑padding)
- Timestamps are relative rather than absolute
- Scripts that parse
enls -loutput will break – please adjust your parsers accordingly.
- Column order changed: previously
-
No changes to flags like
-r,-a,-s,-S– they behave the same as in v0.0.9.
📥 Download & Installation
| Platform | Architecture | File |
|---|---|---|
| Windows | x86_64 | windows_amd64 |
| Windows | ARM64 | windows_arm64 |
| Linux | x86_64 | linux_amd64 |
| Linux | ARM64 | linux_arm64 |
| Linux | LoongArch | linux_loong6 |
| macOS | x86_64 | darwin_amd64 |
| macOS | ARM64 | darwin_arm6 |
Note: Binary names follow the pattern
enls-<version>-<os>_<arch>.tar.gzwhen using thebuild.shscript.
🙏 Acknowledgments
Thanks to the contributors who pushed for cleaner platform abstractions and a more modern ls experience. This release brings us one step closer to a truly portable, pleasant ls alternative.
📦 发布版本 v0.1.0 - 平台重构与 Nushell 风格输出
我们激动地推出 enhanced-ls v0.1.0 – 一次重大的内部清理,使代码库更易于维护、跨平台更友好。最大亮点是全新的 -l 输出格式,灵感来自 Nushell,采用圆角边框、空格填充单元格和相对时间戳。这是一个破坏性变更,依赖旧版长格式输出的脚本需要更新。同时修复了多个交叉编译的类型不匹配问题。
🚀 核心亮点
- Nushell 风格的
-l输出:圆角边框(╭╮╰╯)、对齐列、相对时间戳(例如 “2 分钟前”)。 - 平台代码整合:移除
runtime.GOOS条件判断,改用构建标签实现清晰分离。 - 交叉编译修复:修正 arm64、loong64、darwin 上的
Nlink类型不匹配。 - 可执行文件检测重构:平台特定逻辑移至专属文件,改善 Windows 支持。
✨ 新增功能
- 长格式 (
-l) 现采用 Nushellls -l风格:- 列顺序:# / 名称 / 权限 / 硬链接数 / 用户 / 组 / 大小 / 修改时间
- 边框符号:
╭(左上)、╮(右上)、╰(左下)、╯(右下) - 单元格内容使用空格填充以实现完美对齐
- 时间戳为相对时间(如 “3 小时前”、“昨天”),不再显示绝对时间
- 平台文件
platform_unix.go/platform_windows.go现包含所有 OS 特定实现。
🐛 Bug 修复
- 交叉编译类型不匹配 – 在 arm64、loong64 和 darwin 上将
stat.Nlink转换为uint64,以满足 Go 的严格类型要求。 - Windows 可执行文件检测 – 现在正确使用
detectExecutableByExtension常量。 - 符号链接计数 –
getLinkCount在 Unix 上调用正确的系统调用(使用Nlink),在 Windows 上返回 0。
🧰 维护与代码健康
- 移除
getFileType中所有runtime.GOOS检查 – 改用构建标签分发的实现。 - 整合 owner 逻辑 –
owner_unix.go和owner_windows.go合并为platform_*.go。 - 将
getLinkCount移到平台文件 – Unix 使用真实的syscall.Stat_t.Nlink,Windows 返回 0。 - 提取可执行文件检测 –
checkExecutable()和detectExecutableByExtension现位于平台文件中。
⚠️ 升级注意事项(破坏性变更)
-
-l输出格式完全改变:- 列顺序变更:原为
权限 链接数 用户 组 大小 日期 名称→ 现为序号 名称 权限 链接数 用户 组 大小 修改时间 - 边框和标题样式更新(圆角、空格填充)
- 时间戳变为相对时间而非绝对时间
- 依赖于
enls -l输出的脚本会失效 – 请相应调整解析器。
- 列顺序变更:原为
-
其他标志如
-r、-a、-s、-S行为与 v0.0.9 一致。
📥 下载与安装
| 平台 | 架构 | 文件名 |
|---|---|---|
| Windows | x86_64 | windows_amd64 |
| Windows | ARM64 | windows_arm64 |
| Linux | x86_64 | linux_amd64 |
| Linux | ARM64 | linux_arm64 |
| Linux | LoongArch | linux_loong6 |
| macOS | x86_64 | darwin_amd64 |
| macOS | ARM64 | darwin_arm6 |
注意:使用
build.sh脚本时,二进制文件压缩包命名模式为enls-<版本>-<系统>_<架构>.tar.gz。
🙏 致谢
感谢推动更清晰平台抽象和更现代 ls 体验的贡献者。本次发布让我们距离真正便携、愉悦的 ls 替代品又近了一步。
v0.0.9 Refined. Reliable. Ready.
以下是基于本次重构内容的 Release Notes(发布说明),采用中英双语,适合在 GitHub Releases 页面或项目文档中发布。
📦 Release v0.0.9 - Comprehensive Optimization & Robustness Enhancement
Release Date: 2026-04-18
We're excited to announce enhanced-ls v0.09.0! This release focuses on stability, performance, and cross-platform polish. It addresses several long-standing bugs (especially in recursive mode) and significantly improves the user experience on Windows. We highly recommend all users upgrade.
🚀 Highlights
- Recursive Tree Fixed: No more duplicate directory names when using
-r. - Windows Improvements: Better path handling, hidden Links column, extended file type detection, and graceful ANSI color fallback.
- Performance Boost: File type detection and recursive traversal are now faster, especially for large directories.
- New
-aOption: Show hidden files (dotfiles) just likels -a. - Better Error Visibility: Permissions issues during recursion are now reported to stderr.
✨ New Features
-a/--allflag: Include hidden files (entries starting with.) in all output modes. (Contributed by the community)- Windows: The
Linkscolumn in long format (-l) is now hidden, as hard links are not a native concept on Windows. Future releases may show file attributes instead.
🐛 Bug Fixes
- Recursive mode (
-r) duplicate directory names – Directories are now printed only once, matching the standardtreecommand behavior. - Symbolic link detection – Now uses
os.LstatwithModeSymlinkfor accurate detection, preventing false positives. - Path handling on Windows – Removed redundant slash-to-backslash conversion that could corrupt UNC paths (e.g.,
\\server\share). - Mutual exclusivity of
-sand-S– Using both flags together now triggers an error instead of undefined behavior. - Time field truncation in
-l– Now displays an ellipsis (…) when the timestamp exceeds the column width.
⚡ Performance Optimizations
- File type detection – Replaced O(n) extension loops with O(1) map lookups.
- Recursive traversal – Avoids redundant
os.Lstatcalls by leveragingDirEntry.Info(). - Column width calculation – Reduced repeated calls to
formatSize()during long format rendering.
🪟 Windows‑Specific Enhancements
- ANSI color support detection – Automatically disables colors if the terminal does not support VT100 sequences.
- Extended extension lists – Added Windows‑specific types.
🧰 Maintenance & Code Health
- Extracted duplicate tree entry formatting logic into a reusable helper function.
- Defined a constant for valid type indicators (
/*@#~%) to improve maintainability. - Added unit tests for core utilities (CJK width calculation, layout algorithm, filtering, and symlink detection).
- Improved error reporting for unreadable directories during recursive traversal.
⚠️ Upgrade Notes
- Breaking Change (minor): On Windows, the
Linkscolumn is no longer displayed in-loutput. Scripts that parse this output may need adjustment. - The
-aflag is now available; previous behavior of automatically hiding dotfiles in-rmode remains the default unless-ais specified. - Simultaneous use of
-sand-Swill now cause the program to exit with an error message (previously it silently picked one).
📥 Download & Installation
| Platform | Architecture | Binary |
|---|---|---|
| Windows | x86_64 | enls_windows_amd64.exe |
| Windows | ARM64 | enls_windows_arm64.exe |
| Linux | x86_64 | enls_linux_amd64 |
| Linux | ARM64 | enls_linux_arm64 |
| Linux | LoongArch | enls_linux_loong64 |
| macOS | x86_64 | enls_darwin_amd64 |
| macOS | ARM64 | enls_darwin_arm64 |
🙏 Acknowledgments
Thank you to all users who reported issues and suggested improvements. This release is dedicated to making ls colorful, fast, and reliable everywhere.
📦 发布版本 v0.0.9 - 全面优化与健壮性提升
发布日期:2026-04-18
我们很高兴发布 enhanced-ls v0.09.0!本次更新聚焦于稳定性、性能以及跨平台体验的打磨。修复了多个长期存在的 Bug(尤其是递归模式下的显示问题),并显著改善了 Windows 平台的使用感受。强烈建议所有用户升级。
🚀 核心亮点
- 修复递归树显示:使用
-r时不再出现重复的目录名。 - Windows 体验优化:更健壮的路径处理、隐藏无意义的 Links 列、扩充文件类型识别、ANSI 颜色自动降级。
- 性能提升:文件类型检测与递归遍历速度更快,大目录下感知明显。
- 新增
-a选项:类似ls -a,可显示以.开头的隐藏文件。 - 更清晰的错误提示:递归时遇到无权限目录会输出警告信息。
✨ 新增功能
-a/--all标志:在所有输出模式中包含隐藏条目(以.开头)。- Windows 平台:长格式 (
-l) 下的Links列已隐藏(Windows 无硬链接概念),未来版本或替换为文件属性列。
🐛 Bug 修复
- 递归模式 (
-r) 目录名重复打印 — 目录名称现在仅出现一次,与标准tree命令行为一致。 - 符号链接检测 — 改用
os.Lstat结合ModeSymlink,避免误判。 - Windows 路径处理 — 移除多余的斜杠转反斜杠替换,避免破坏 UNC 路径(如
\\server\share)。 -s与-S互斥检查 — 同时指定两个标志将报错退出,而非产生未定义行为。- 长格式时间字段截断 — 当时间戳超出列宽时,末尾添加省略号 (
…) 表示截断。
⚡ 性能优化
- 文件类型检测 — 将扩展名循环匹配(O(n))替换为 map 查询(O(1))。
- 递归遍历 — 利用
DirEntry.Info()避免重复调用os.Lstat。 - 列宽计算 — 减少
formatSize()在长格式渲染中的重复调用。
🪟 Windows 专属增强
- ANSI 颜色支持检测 — 若终端不支持 VT100 序列,自动禁用颜色输出。
- 扩展名列表扩充 — 新增 Windows 特有类型。
🧰 维护与代码健康
- 抽取重复的树条目格式化逻辑为独立辅助函数。
- 定义类型指示符常量 (
/*@#~%) 以提高可维护性。 - 为核心功能添加单元测试(CJK 宽度计算、布局算法、过滤逻辑、符号链接检测)。
- 改进递归过程中对不可读目录的错误报告。
⚠️ 升级注意事项
- 细微不兼容变更:在 Windows 上,
-l输出不再包含Links列。依赖此列输出的脚本可能需要调整。 -a标志现已可用;递归模式默认仍隐藏点文件,除非显式指定-a。- 同时使用
-s和-S将导致程序报错退出(之前会静默忽略其中一个)。
📥 下载与安装
| 平台 | 架构 | 二进制文件 |
|---|---|---|
| Windows | x86_64 | enls_windows_amd64.exe |
| Windows | ARM64 | enls_windows_arm64.exe |
| Linux | x86_64 | enls_linux_amd64 |
| Linux | ARM64 | enls_linux_arm64 |
| Linux | LoongArch | enls_linux_loong64 |
| macOS | x86_64 | enls_darwin_amd64 |
| macOS | ARM64 | enls_darwin_arm64 |
🙏 致谢
感谢所有反馈问题与提出建议的用户。这个版本致力于让 ls 在任何平台上都变得多彩、快速且可靠。
v0.0.8 ∞finity
更新内容
- 标识符变更
Media file (audio/video/image)标识符变更为@
Symbolic Link标识符变更为&
- 功能更新
-r参数可以实现与-f-s-S结合使用
版本选择指南
根据您的操作系统和架构,请选择对应的安装文件以下是不同平台的版本对应关系:
| 操作系统 | 架构 | 文件名 |
|---|---|---|
| Windows | x86_64/AMD64 | enls-v0.0.6-windows_amd64.exe |
| ARM64/AArch64 | enls-v0.0.6-windows_arm64.exe |
|
| Linux | x86_64/AMD64 | enls-v0.0.6-linux_amd64 |
| ARM64/AArch64 | enls-v0.0.6-linux_arm64 |
|
| LoongArch | enls-v0.0.6-linux_loong64 |
|
| macOS | Intel (x86_64/AMD64) | enls-v0.0.6-darwin_amd64 |
| Apple Silicon (ARM64/AArch64) | enls-v0.0.6-darwin_arm64 |
v0.0.7 - Hello,LoongArch
更新内容
- 使用
-r可递归输出目录下内容 - 加入对loong64架构Linux的支持
版本选择指南
根据您的操作系统和架构,请选择对应的安装文件以下是不同平台的版本对应关系:
| 操作系统 | 架构 | 文件名 |
|---|---|---|
| Windows | x86_64/AMD64 | enls-v0.0.6-windows_amd64.exe |
| ARM64/AArch64 | enls-v0.0.6-windows_arm64.exe |
|
| Linux | x86_64/AMD64 | enls-v0.0.6-linux_amd64 |
| ARM64/AArch64 | enls-v0.0.6-linux_arm64 |
|
| LoongArch | enls-v0.0.6-linux_loong64 |
|
| macOS | Intel (x86_64/AMD64) | enls-v0.0.6-darwin_amd64 |
| Apple Silicon (ARM64/AArch64) | enls-v0.0.6-darwin_arm64 |
v0.0.6-六代登场,兼容更广,功能更爽!
更新内容
- 更详细地
-l输出 - 兼容性提升
版本选择指南
根据您的操作系统和架构,请选择对应的安装文件以下是不同平台的版本对应关系:
| 操作系统 | 架构 | 文件名 |
|---|---|---|
| Windows | x86_64/AMD64 | enls-v0.0.6-windows_amd64.exe |
| ARM64/aarch64 | enls-v0.0.6-windows_arm64.exe |
|
| Linux | x86_64/AMD64 | enls-v0.0.6-linux_amd64 |
| ARM64/aarch64 | enls-v0.0.6-linux_arm64 |
|
| macOS | Intel (x86_64) | enls-v0.0.6-darwin_amd64 |
| Apple Silicon (ARM64) | enls-v0.0.6-darwin_arm64 |
v0.0.5
-
项目由
enhanced-ls-for-powershell更名为enhanced-ls -
跳过v0.0.4
-
跨平台支持
Windows(PowerShell 7.5+)
Linux
MacOS