15 个稳定版本
1.3.5 | 2020年1月22日 |
---|---|
1.3.4 | 2019年7月1日 |
1.2.1 | 2019年5月23日 |
1.1.0 | 2019年4月27日 |
#384 在 文件系统
每月下载量 72
435KB
11K SLoC
hunter
NEW
- 自定义快捷键,满足您的喜好
- 支持高质量图形,使用 SIXEL/kitty 协议
- 添加快速动作创建器和自定义器
- 改进了预览定制
- IRC 频道 有问题?错误?表扬?与我们一起聊天:#hunter @ Freenode!
hunter 是一个快速、无延迟的终端文件浏览器/管理器。它具有高度异步和多线程的设计,所有磁盘 I/O 都在主线程上以非阻塞方式执行,因此 hunter 总是保持响应,即使在重负载下也能在慢速旋转的 rust 磁盘上运行。
它深受出色的 ranger 启发,但略微带有更多的 Emacs 风味,并使用 Rust 编写以确保它快速启动并利用其强大的并发保证。它非常快,以至于我甚至为一些部分添加了动画效果作为玩笑,但实际上它看起来真的很好,使它看起来更加流畅。当然,您可以禁用这些动画。
大多数您期望的功能都已实现,包括标签、书签(带有 ranger-import)、搜索/筛选、文件/目录的预览(包括在预览的目录中包含大小信息)、底部的小型缓冲区,具有文件名完成、多文件选择等。还有一些原创想法,特别是关于子进程处理。进程查看器实际上显示了启动的子进程的输出、它们的 pid 和退出代码,并会在有新输出或进程完成时通知您。它是一种原始的 TUI shell。文件名使用原始 OsString 处理,因此没有文件它不能处理,无论文件名包含什么垃圾。
为了加快目录元数据在预览/回视中的加载速度,只有您可以看到的文件会加载元数据,但在主视图中。然而,元数据也是异步加载的,因此您在浏览文件时有时会看到文件列表在更新。我认为这比等待要好。
从技术上讲,hunter 本身不是一个文件“管理器”。它没有内置的文件操作原语,如删除、重命名、移动等。相反,它依赖于与标准 CLI 工具的简单且广泛的集成来完成其工作。为此,有各种文件名/路径替换模式以及您要运行的可执行文件的自动完成功能。
它还具备“快速操作”模式,您可以根据文件的 MIME 类型执行自定义操作。这些可以是 shell 脚本或其他可执行文件。在运行之前,可以要求 hunter 提示输入。输入将被放入环境变量中供进程使用。例如,您可以选择一些文件,运行“创建存档”操作,然后您将被提示输入结果存档的名称。下面有更详细的说明。
这是一个年轻的项目,可能(肯定)存在一些错误和边缘情况。它还没有在许多终端上进行测试,但至少 alacritty、kitty 和 urxvt 运行良好。它应该在大多数支持 Rust 的 Unix 类系统中运行,但仅在 GNU/Linux 上进行了测试。到目前为止,我还没有丢失任何文件。
非常感谢 ranger 及其开发者。没有它的启发,这不可能实现。hunter 不是一个即插即用的替代品,并且不涵盖所有使用情况,特别是如果您对高级定制感兴趣,因为除非您修改代码,否则 hunter 基本上没有。但如果你最需要的是速度,它可能是一个不错的选择。
功能
- 无延迟的架构,始终响应
- 异步多线程 IO
- 标签页
- 多文件选择
- 基于文件类型的可定制快速操作
- 使用外部命令如 fzf 进入目录/选择文件
- ranger 导入书签/标签
- 带有完成和文件名/选择/标签页/目录替换的迷你缓冲区
- 子进程查看器,显示已启动子进程的输出
- 退出并切换到最后一个目录,并将选定的文件放入 shell 变量中
- 预览的滑动动画,提供更平滑的体验(可配置)
- 可以使用合适的字体显示图标
- 可选支持使用 Unicode 半块绘制和 SIXEL 或 kitty 的图形协议预览图像(+pdf)/视频/音频文件
已知可以在以下系统上运行
- GNU/Linux
- macOS
- Windows (WSL)
如果它在未列出的系统上运行,请打开一个问题。如果您认为您的系统合理地类似于 Unix,也可以自由地打开一个问题,如果它不工作。
PREREQUISITES
- gcc
- Rust-nightly 编译器
- 用于视频/音频预览的 GStreamer(可选)
- libsixel(可选)
PREVIEWERS
hunter 包含启用某些文件类型预览的定义。要使用此功能,您首先需要安装一些程序。您也可以定义自己的。下面是默认值:
- bat / highlight 用于语法高亮
- bsdtar / 7z / atool 用于存档
- w3m / links / elinks / lynx 用于 html
- pdftotext / mutool 用于 pdf 或图形模式下 pdftoppm
Debian/Ubuntu
apt install gcc libgstreamer-插件-base1.0-dev gstreamer1.0-插件-good libgstreamer-插件-bad1.0-dev libsixel-bin
INSTALLATION
编译 hunter 目前需要 nightly Rust 编译器!获取 nightly 编译器最简单的方法是使用 rustup。如果您已安装 rustup,则它将自动下载并使用当您运行 cargo 时已知可工作的版本。
默认情况下,它将安装一个具有媒体预览支持的完整功能版本。您可以使用功能标志 img
、video
和 sixel
来控制这一点。您可以通过在 cargo 中调用 --no-default-features
来禁用这些功能。然后,您可以使用 --features=img
启用图像预览,并使用 --feature=img,video
添加视频/音频。请注意,视频需要 img!
请注意,只有在 hunter 能够在 $PATH 中找到 "hunter-media" 工具时,媒体预览才会生效!
安装 rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
使用 cargo 构建
cargo install (--no-default-features --features=...) hunter
从源码构建
// Clone the git repo
git clone https://github.com/rabite0/hunter.git
// Go into the repos directory
cd {source_dir}/hunter/
// (Optional) Build
// cargo build --release (--no-default-features --features=...)
// Install
cargo install (--no-default-features --features=...) --path .
配置
hunter 在启动时读取 $XDG_CONFIG_HOME/hunter/config。在 macOS 上,它直接读取 ~/.config/hunter/config。有一些选项可以设置。配置文件是异步读取的,所以如果 hunter 在读取配置文件之前开始绘制,您将看到其默认配置,直到读取配置文件。选项可以设置如下(默认配置)
animation=on
show_hidden=off
select_cmd=find -type f | fzf -m
cd_cmd=find -type d | fzf
icons=off
ratios=20,30,49
animation_refresh_frequency=60
media_autostart=off
media_mute=off
media_previewer=hunter-media
graphics_mode=auto (other choices: kitty/sixel/unicode)
键
键可以在 ~/.config/hunter/keys
中进行配置。某些操作可以进一步使用参数进行自定义。例如,您可以指定一个硬编码的 Up(n)
,其中 n 是一个正数,用于向上移动 n 次。这可以看起来像 Up(10)
=K``` 以一次性向上移动 10 次。
一些键(如 F1-F12)表示为枚举,如下所示: F(n)
。您可以将那个数字 n 放入 GotoTab(n)
动作中,使用一个占位符绑定,如下所示: GotoTab(_)=F_
。这样,所有 F(n) 键都将绑定到从 F(n) 键提取的标签页编号。
这同样适用于键组合,因此您可以将 C-_
指定以绑定所有 Ctrl- 组合到某个操作,如删除(_)书签。要将 _
本身绑定,请将其转义,如下所示: \_
。有关更多示例,请参阅默认配置。
注意
hunter 解析 M-
和 A-
作为 Alt,因此您可以使用您最喜欢的任何一个。默认情况下,它使用 M-
,因为它很自然,我认为 A-
看起来很奇怪 ;).
预览
定义预览很简单。您只需要一个 shell 脚本,它接受一个路径作为第一个参数,并打印出您想要在预览列中显示的内容。将此 shell 脚本放入
$HOME/.config/hunter/previewers/definitions
并在
$HOME/.config/hunter/previewers/
中创建指向它的符号链接,链接扩展名为您想要预览的文件类型。确保脚本具有可执行权限。就是这样。
可以通过在符号链接名称后附加 .g
来创建图形预览器。它应该打印生成的图像文件的路径。如果您希望在显示后删除文件,请在 /tmp/hunter-preview
目录中创建它。
快速操作
这些是可以通过按 a
运行的可执行文件。你可以看到哪些操作取决于你选择的文件的 MIME 类型。如果你选择了多个文件,猎人将尝试使用最具体的 MIME 类型。例如,如果你选择了一组不同类型的图片,你将看到“image/”的操作。你可以在标题栏中看到计算出的 MIME 类型。
存在“通用”、“基本类型”和“子类型”操作。这些存储在
~/.config/hunter/actions/<base-type>/<sub-type>/
通用操作始终可用。这些存储在“actions”目录中。“基本类型”操作存储在“text”、“image”、“video”等目录中。这些对应于完整 MIME 类型如“image/png”中“/”左侧的部分。这些将适用于所有“text”、“image”或“video”文件。这个列表并不全面,基本类型还有很多。此外,你可以在这些基本类型目录中创建一个目录来存储“子类型”操作,这些操作仅适用于特定文件类型。
例如,如果你想定义仅对 PNG 图像有效的操作,你可以将其存储在
~/.config/hunter/actions/image/png/custom_pngcrush.sh
在运行这些操作之前,你也可以请求输入。这个输入将通过 hunter 的迷你缓冲区输入。要请求输入,请将“?question”附加到文件名上,但在扩展名之前。然后 hunter 将设置一个以你输入的内容命名的环境变量。你也可以请求输入多个内容。
例如,你可以命名一个操作
download_stuff?url?destination.sh
在运行你的脚本之前,hunter 会询问“url”和“destination”。这些值将通过 $url 和 $destination 环境变量提供。
你还可以使操作在前台运行,这样它将在运行时接管终端。为此,只需在扩展名之前将“!”附加到文件名即可。它应该看起来像这样
action?query1?query2!.sh
这将询问两个问题,然后在前台运行脚本,直到它退出。
在 extras/actions 中有一些示例。你可以将整个目录复制到 ~/.config/hunter/ 并尝试它。
启动选项
当 hunter 启动时,你可以设置一些选项。这些将覆盖配置文件。你还可以告诉 hunter 以特定目录启动。
用法:hunter [FLAGS] [路径]
标志 | |
---|---|
-a, --animation-off | 关闭动画 |
--help | 打印帮助信息 |
-i, --icons | 显示不同文件类型的图标 |
-h, --show-hidden | 显示隐藏文件 |
-u, --update-config | 更新预览器/操作 |
-V, --version | 打印版本信息 |
警告
如果你对内置的预览器/操作做了任何更改,当使用 -u
时,这些更改将会丢失。在这种情况下,最好只删除你想要更新的预览器/操作。在下次启动时,hunter 将自动重新安装缺少的文件。
退出时进入 hunter 当前工作目录
要更改退出 hunter 时 shell 的目录,你需要 source extra/hunter_cd.sh,这是一个包装器,它在 hunter 运行后检查 ~/.hunter_cwd,并在存在时切换到包含的目录。
文件名替换
模式 | 替换为 |
---|---|
$s | 选定的文件(们) |
$n | 制表符目录 |
$ns | 制表符中的选定文件 |
快捷键绑定
注意:_
表示任何键。
移动
操作 | 键 |
---|---|
上(1) | k, Up |
下(1) | j, Down |
左 | b, Left |
右 | f, Right |
顶 | <, Home |
底 | >, End |
上(10) | K |
下(10) | J |
PageUp | C-v, PageUp |
PageDown | M-v, PageDown |
文件浏览器(全局效果)
操作 | 键 |
---|---|
退出 | q |
带目录退出 | Q |
左列下移 | ] |
左列上移 | [ |
跳转到首页 | ~ |
快速光盘 | / |
选择外部 | M-Space |
进入外部目录 | M-/ |
后台运行 | F |
跳转到前一个工作目录 | - |
显示书签 | ` |
添加书签 | b |
显示进程 | w |
显示日志 | g |
显示快速操作 | a |
运行子shell | z |
切换列 | c |
执行命令 | ! |
文件列表(影响当前目录)
操作 | 键 |
---|---|
搜索 | C-s |
搜索下一个 | M-s |
搜索上一个 | M-S |
过滤 | C-f |
选择 | Space |
反转选择 | v |
清除选择 | V |
过滤选择 | M-V |
切换标签 | t |
切换隐藏 | h |
逆序排序 | r |
循环排序 | s |
到下一个修改时间 | K |
到前一个修改时间 | k |
切换目录优先 | d |
标签页
操作 | 键 |
---|---|
新建标签页 | C-t |
关闭标签页 | C-w |
下一个标签页 | Tab |
上一个标签页 | BackTab |
跳转到标签页(_) | F_ |
媒体
操作 | 键 |
---|---|
切换暂停 | M-m |
切换静音 | M-M |
向前搜索 | M-> |
向后搜索 | M- |
书签
操作 | 键 |
---|---|
跳转到上一个工作目录 | ` |
跳转到(_) | _ |
删除(_) | M-_ |
进程
操作 | 键 |
---|---|
关闭 | w, Esc |
移除 | d |
杀死 | k |
跟随输出 | f |
向上滚动输出 | C-p |
向下滚动输出 | C-n |
向上滚动输出一页 | C-V |
向下滚动输出一页 | C-v |
向上滚动输出到顶部 | C-< |
向下滚动输出到底部 | > |
MiniBuffer
操作 | 键 |
---|---|
插入字符(_) | _ |
插入制表符(_) | F_ |
取消 | C-c, Esc |
完成 | Enter |
完成 | Tab |
删除字符 | C-d, Delete |
向后删除字符 | 退格 |
光标左移 | C-b, Left |
光标右移 | C-f, Right |
历史记录向上 | C-p, M-p, Up |
历史记录向下 | C-n, M-n, Down |
清除行 | C-u |
删除单词 | C-h |
光标到起始位置 | C-a, Home |
光标到末尾 | C-e, End |
折叠
操作 | 键 |
---|---|
切换折叠 | t, Tab |
日志
操作 | 键 |
---|---|
关闭 | g, Esc |
快速操作
操作 | 键 |
---|---|
关闭 | a, Esc, C-a |
选择或运行(_) | _ |
依赖
~14–29MB
~373K SLoC