Like "ls", but for images. Shows thumbnails in terminal using sixel graphics.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 年前 | ||
| 9 年前 | ||
| 3 年前 | ||
| 2 年前 |
![]()
lsix
类似 "ls",但用于图片。使用 sixel 图形在终端显示缩略图。
使用方法
lsix [ 文件名 ... ]
示例
基本用法
仅输入 lsix 将显示当前工作目录中的图片。您也可以指定文件名,当然,也可以使用壳层通配符(例如,lsix *jpg *png)。
因为 lsix 几乎使用了 ImageMagick,所以任何图片格式都将得到支持。然而,某些格式(如 PDF)渲染可能会较慢,所以 lsix 默认不会显示它们,除非您特别要求。如果您想强制显示某种类型的图片,只需指定文件名或使用通配符(如下面的 *.pdf 示例)。

展开 GIF 图片
如果命令行中指定了 GIF(实际上是任何包含多张图片的文件),所有帧将会展开并显示在一张蒙太奇中。例如,lsix nyancat.gif 将显示所有帧。请注意 GIF 存储某些帧时仅保存与前一帧不同的像素。

终端背景色检测
您可能已经注意到 PNG 和 SVG 文件在终端背景色上具有正确的透明通道。这是因为 lsix 使用终端转义序列尝试确定您的前景色和背景色。(前景色用于文本填充颜色。)
在第一个示例中,我在白色背景的黑色 xterm 中运行 lsix 后,发送了一个转义序列来交换前景色和背景色。当我再次运行它时,lsix 检测到变化并将背景色改为白色。当然,您可以自由选择任何默认颜色(例如,在第二个示例中使用了 xterm -bg blue)。

功能
-
检测您的终端是否可以使用 控制序列 内联显示 SIXEL 图形。
-
通过 ssh 工作得很好。非常适合在无法确切记住每个图片是什么的时候,对网络服务器上的图片进行操作。
-
非位图图形通常也能良好工作(.svg, .eps, .pdf, .xcf)。
-
自动检测您的终端(如 xterm)是否可以增加颜色寄存器的数量以改善图像质量,并执行此操作。
-
自动检测终端的前景色和背景色。
-
在支持 dtterm WindowOps 的终端中,每行的瓦片数量会根据窗口宽度适当调整。
-
如果目录中图片较多(超过 21 张),lsix 将一次显示一行图片,以便您不必等待整个蒙太奇图片创建完成。
-
如果您的文件名过长,lsix 将在传递给 ImageMagick 的
montage命令之前折行文本。(没有 lsix,montage只是将长文件名堆叠在一起。) -
您可以通过编辑文件顶部的简单变量轻松更改蒙太奇中每个瓦片的宽度、字体家族和字号等设置。(提示:尝试使用
convert -list font查看您的机器上有哪些字体。) -
如果您的字体具有所需的符号,Unicode 文件名也可以正常工作。
安装
只需将 lsix 文件放入您的路径中(例如,/usr/local/bin),然后运行即可。它只是一个 BASH Shell 脚本。
唯一需要预先安装的软件是 ImageMagick。如果您还没有安装,您的操作系统的包管理器会很容易获取到。(例如,使用 apt-get install imagemagick)。
MacOS 用户可能更愿意使用 brew install lsix 安装 lsix,这将根据需要安装 ImageMagick。
您的终端必须支持 Sixel 图形
我是使用 xterm 在 vt340 模拟模式下开发这个程序的,但我相信这应该在任何 Sixel 兼容终端上都能工作。您可以通过查看单个图片来测试您的终端,如下所示:
convert foo.jpg -geometry 800x480 sixel:-
XTerm
请注意,xterm 默认不启用 Sixel 模式,因此您需要以以下方式运行:
xterm -ti vt340
或者,将 vt340 设为 xterm 的默认终端类型。将以下内容添加到您的 .Xresources 文件中,然后运行 xrdb -merge .Xresources。
! 允许 SIXEL 图形。(试试:"convert -colors 16 foo.jpg sixel:-")。 xterm*decTerminalID : vt340
此外,某些发行版(如 Fedora)似乎没有编译带有六进制支持的 xterm。在这种情况下,请尝试使用其他终端,如 foot 或 mlterm。
SIXEL 兼容终端
- XTerm(经过测试)
- MLterm(经过测试)
- foot(经过测试)
- Wezterm(经过测试)
- Contour(经过测试)
- iTerm2 for Apple MacOS(经过测试)
- Konsole(报告)
- yakuake(报告)
- WSLtty for Microsoft Windows(报告)
- MinTTY for Cygwin(Microsoft Windows)(报告)
- Yaft for Linux framebuffer(经过测试)
- VTE(特殊编译,报告)
- sixel-tmux(tmux 的分支,报告)
- ttyd(报告)
SIXEL 不兼容终端
- MacOS Terminal, kitty
- 所有基于 libvte 的标准终端
- gnome-terminal
- terminator
- lxterm
- Alacritty(可能需要一个补丁才能工作)
配置
由于 lsix 当前设计得非常简单,因此没有命令行标志、配置文件、旋钮可调或任何可操作的部件。然而,因为这个脚本非常简单,如果您想进行更改,实际上只需通过编辑文件即可非常轻松地完成。所有内容都带有注释,最常用的默认变量位于文件顶部。
联系作者
我欢迎反馈。如果您使用 lsix 并喜欢它,或者有关于如何改进它的建议,请随时通过 GitHub 发送您的想法给我 @hackerb9。
Bugs
-
XTerm 的反视频模式(
xterm -rv)与显式指定前景色和背景色不同。存在一种方法可以检测后者,但无法检测前者。这意味着对于使用 XTerm 的 reverseVideo 资源的的用户来说,背景色将会不正确。(请参阅 issue #20)。 -
由于一个错误功能,Xterm 的屏幕宽度目前限制为 1000px,这导致它默默地不显示任何内容。一旦 xterm 能够处理大于 1000x1000 的图像,这个限制将被移除。[最后一次与 XTerm(344) 进行测试]。
-
以 "@" 开头的文件名对于 ImageMagick 来说是特殊的,如果您不加上目录前缀,它会感到困惑。(这是 ImageMagick 的 bug,不是 lsix 的)。
-
指定空字符串
""作为文件名会导致 ImageMagick 卡住。(这看起来像是 ImageMagick 的一个 bug/不合适的特性)。 -
长文件名会被折行,但折行并不智能。让这个脚本在空格、连字符、下划线和句点处折行会太复杂吗?也许。
-
命令行上指定的目录被处理得好像用户已经 cd 到该目录。实现递归并不困难,但真的有这个需求吗?我不想让这样一个简单的脚本因为命令行标志而变得复杂。
-
如果您运行
lsix foo.avi,那就是在自找麻烦。
未来问题
-
Sixel 标准似乎没有提供查询图形屏幕大小的方法。阅读 VT340 文档后,发现您的程序必须已经知道您正在渲染的设备的分辨率。
从 XTerm 版本 344 开始,增加了一个解决该问题的控制序列 ——
CSI ? Pi ; Pa ; Pv S—— 但是一些终端,例如mlterm,尚未实现它。另一种读取窗口大小的方法是使用 dtterm WindowOps 扩展,但这并不是一个完全正确的解决方案,因为 Sixel 图形屏幕的几何尺寸不一定与窗口大小相同。(例如,xterm 将图形尺寸限制为 1000x1000,尽管窗口实际上可能更大。)为了帮助像 mlterm 这样的终端,
lsix会使用 dtterm WindowOps 作为后备方案。如果这两种方案都无效,
lsix会假定您正在使用 VT340(800x480)并且每行只能容纳 6 个瓦片。 -
Sixel 标准也缺少查询可用颜色寄存器数量的方法。我使用了
xterm的扩展来实现这一目的,但我不知道它们实现了多广泛。如果终端没有响应,lsix会假定您正在使用原始的 vt340 并且只使用 16 个颜色寄存器。(抱歉,vt330 的 4 灰度用户!是时候升级了。😉) -
Kermit 项目 在 20 世纪 80 年代末至 90 年代初创建了一个广受欢迎的 MS-DOS 终端模拟器。它的 sixel 实现与 lsix 不兼容,因为它在文本之外的屏幕上显示图形。然而,我注意到了其文档中的一个特性:一个请求当前图形窗口大小和颜色的转义序列:
ESC [ ? 256 n Request screen size report
Report is ESC [ ? 256; Ph; Pw; Pc n for graphics systems
where Ph is screen height in dots
Pw is screen width in dots
Pc is number of colors (0, 1 or 16, for none, b/w, ega/vga)
Report is ESC [ ? 24; 80; 0 n for pure text mono systems.
是否有其他终端模拟器使用过这个序列?将其添加到 lsix 中是否值得?
-
libsixel 是一个编写能够输出优化 Sixel 图形命令的程序的优秀项目。因为我非常尊重这个项目,我觉得我应该解释一下为什么
lsix不使用 libsixel。-
(a) 我希望
lsix能够在任何地方轻松运行。Bash 和 ImageMagick 非常普及,所以一个 shell 脚本是一个自然的选择。 -
(b) 我希望
lsix足够简单,以便其他人(包括我自己)可以轻松地进行定制和扩展。 -
(c) ImageMagick 对于读取不同格式的支持比 stb_image(libsixel 的
img2sixel使用的库)更好。(例如:xpm、svg、16 位 png,甚至 sixel 文件都没有被 img2sixel 识别)。既然 ImageMagick 能够读取所有这些格式并直接输出 sixel,使用它来做这两件事是有意义的。 -
(d) 虽然 libsixel 经过优化,肯定比 ImageMagick 快,但它过于复杂。对于一个简单的目录列表,这样的速度已经足够快。
-
资源
- XTerm 控制序列
-
DEC STD 070 视频系统参考手册。一本内容详尽的巨著,几乎涵盖了所有细节。我主要参考了第 4 节(转义序列)和第 9 节(sixel 编程)。
-
VT340 测试,一个记录 DEC VT340 硬件实际行为的项目。
-
数字 ANSI 兼容打印协议:Level 2 编程参考手册,第 5 章:Sixel 图形。对于想要生成或解析 sixel 图形的人来说,这是一份优秀且相对清晰的讨论。
项目介绍
类似 "ls",但用于图像。通过使用六角图形在终端中显示缩略图。【此简介由AI生成】