0.1.0 |
|
---|
#39 in #terminal-file
20KB
449 行
hunter
新增
- [快速操作] 添加快速操作创建器/自定义器
- [预览] 新增并改进预览自定义
- [IRC 频道] 有问题?错误?表扬?和我们聊天:#hunter @ Freenode!
- [快速操作] 根据文件类型运行特定操作
hunter 是一个快速且无延迟的终端文件浏览器/管理器。它具有高度异步和线程化的设计,所有磁盘 I/O 都在主线程之外以非阻塞方式发生,因此 hunter 总是保持响应,即使在慢速旋转的 rust 磁盘上,即使所有预览都已启用。
它深受优秀的 ranger 启发,但略带一点 Emacs 风格,并使用 Rust 编写以确保快速启动并充分利用其强大的并发保证。它如此之快,以至于我实际上为一些部分添加了动画作为玩笑,但事实上它看起来真的很不错,并且使它看起来更加流畅。当然,这可以根据您的喜好进行禁用。
大多数您期望的功能都已实现,包括选项卡、书签(带 ranger-import)、搜索/过滤、文件/目录的预览(包括预览目录中的大小信息)、底部的小缓冲区(具有文件名完成)、多文件选择等。还有一些原创的想法,特别是在子进程处理方面。进程查看器实际上显示了已启动子进程的输出、它们的进程 ID 和退出代码,并在新输出和进程完成时发出通知。这有点像原始的 TUI shell。文件名使用原始 OsString 处理,因此没有它无法处理的文件,无论文件名包含什么垃圾信息。它还将在支持的终端上设置 tmux/终端标题为当前目录。
为了加快预览/后视图中目录元数据的加载速度,仅在主视图中加载您可以看到的文件的元数据。然而,元数据也是异步加载的,因此您有时会在浏览文件时看到它更新文件列表。我认为这比等待要好。
技术上,hunter 本身不是一个文件 "管理器"。它没有内置的文件操作原语,如删除、重命名、移动等。相反,它依赖于与其标准 CLI 工具的轻松且广泛的集成来完成其工作。为此,有各种文件名/路径替换模式,以及您要运行的可执行文件的自动完成。
它还提供了一个“快速操作”模式,您可以根据文件的MIME类型执行自定义操作。这些可以是shell脚本或其他可执行文件。在运行之前,可以要求hunter请求输入。输入将被放入环境变量中供进程使用。例如,您可以选择几个文件,运行“创建存档”操作,然后您将被要求为生成的存档命名。下面有更详细的说明。
这是一个年轻的项目,可能(肯定)有一些错误和边缘情况。它没有在许多终端上进行测试,但至少alacritty、kitty和urxvt运行良好。它应该适用于大多数由Rust支持的Unix风格的系统,但只在GNU/Linux上进行了测试。到目前为止,我还没有丢失任何文件。
非常感谢ranger及其开发者。没有它的启发,这一切都不可能实现。hunter不是一个即插即用的替代品,也不涵盖所有使用情况,特别是如果您喜欢高级自定义,因为除非修改代码,否则hunter基本上没有。但如果您需要的是速度,它可能是一个不错的选择。
特性
- 无延迟架构,始终响应
- 异步多线程IO
- 标签
- 多文件选择
- 基于文件类型的自定义快速操作
- 使用fzf等外部命令进入目录/选择文件
- ranger导入书签/标签
- 带有完成和文件名/选择/标签/目录替换的迷你缓冲区
- 子进程查看器,显示已启动子进程的输出
- 退出并cd到最后的目录,并将选定的文件放入shell变量
- 向上滑动动画,使预览更加平滑(可配置)
- 可以使用正确字体显示图标
- 可选支持使用Unicode半块绘制预览图像/视频/音频文件
已知在以下系统上工作
- GNU/Linux
- macOS
- Windows (WSL)
如果它在未列出的系统上工作,请打开一个问题。如果它在您的系统上不工作,如果您有一个合理的Unix-like系统,也请随意打开一个问题。
PREREQUISITES
- gcc
- libmagic-dev
- Rust-nighly编译器
- 用于视频/音频预览的GStreamer
PREVIEWERS
hunter包含定义以启用某些文件类型的预览。要使用此功能,您需要首先安装一些程序。您也可以定义自己的。下面是默认值。
- bat / highlight用于语法高亮
- 7z用于存档
- w3m / links / elinks / lynx用于html
- pdftotext / mutool用于pdf
Debian/Ubuntu
apt install gcc libmagic-dev gstreamer1.0-devel gst-plugins-base gst-plugins-good
INSTALLATION
编译hunter目前需要夜班Rust编译器!获取夜班编译器最简单的方法是使用rustup。如果您已安装rustup,它将在您运行cargo时自动下载并使用一个已知在运行cargo时工作的版本。
默认情况下,它将安装一个功能齐全的版本,支持媒体预览。您可以使用功能标志img
和video
来控制此操作。可以通过在cargo中调用--no-default-features
来禁用它们。然后,您可以使用--features=img
启用图像预览,并使用--feature=img,video
添加视频/音频。请注意,视频需要img!
请注意,这仅适用于hunter可以在$PATH中的某个位置找到“preview-gen”工具的情况!
安装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
media_autostart=off
media_mute=off
预览
定义预览很简单。您只需要一个shell脚本,该脚本将路径作为第一个参数,并打印出您想要在预览列中看到的内容。将此shell脚本放入
$HOME/.config/hunter/previewers/definitions
并在
$HOME/.config/hunter/previewers/
中创建一个指向它的符号链接,链接扩展名为您想要预览的文件类型。确保脚本可执行。就是这样。
快速操作
这些是您可以按a键运行的可执行文件。您可以看到哪些操作取决于您选择的文件的MIME类型。如果您选择了多个文件,hunter将尝试使用最具体的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的minibuffer输入。要请求输入,请将“?question”追加到文件名中,但在扩展名之前。hunter将设置一个以您在问号后放入的任何内容命名的环境变量。您也可以请求输入多个项目。
例如,您可以为操作命名
download_stuff?url?destination.sh
在运行您的脚本之前,hunter将请求“url”和“destination”。这些值将通过环境变量$url和$destination提供。
您还可以使操作在前台运行,这样它在运行时将接管终端。要这样做,只需在扩展名之前将“!”追加到文件名即可。它应该看起来像这样
action?query1?query2!.sh
这将询问两个问题,然后在前台运行脚本直到它退出。
在extras/actions中有一些示例。您可以将整个目录复制到~/.config/hunter/中并尝试它。
启动选项
您可以在hunter启动时设置一些选项。这些将覆盖配置文件。您还可以告诉hunter在某个目录中启动。
用法:hunter [FLAGS] [path]
**标志:** | |
---|---|
-a, --animation-off | 关闭动画 |
--help | 打印帮助信息 |
-i, --icons | 显示不同文件类型的图标 |
-h, --show-hidden | 显示隐藏文件 |
-V, --version | 打印版本信息 |
退出时进入hunter当前工作目录
要更改退出时使用Q键退出hunter的shell目录,您需要source extra/hunter_cd.sh,这是一个包装器,它运行hunter并检查~/.hunter_cwd在hunter退出后是否存在,如果存在则cd进入包含的目录。
文件名替换
模式 | 替换为 |
---|---|
$s | 选定的文件 |
$n | tab目录 |
$ns | tab中的选定文件 |
快捷键绑定
hol模式
默认情况下,hunter使用vi风格的快捷键。如果你使用类似QWERTY的键盘布局,这可能是你想要的。大多数人都会想要这个,所以我将其设置为默认值。如果你有不同的键盘布局,这可能不是最佳选择。hol分支将移动键更改为emacs快捷键,这在Colemak等布局上更为人体工程学。
主视图
键 | 操作 |
---|---|
j/k(hol:n/p) | 向下/向上移动 |
J/K(hol:N/P) | 5倍向下/5倍向上移动 |
]/[ | 在左侧列中向上/向下移动 |
< | 移动到顶部 |
> | 移动到底部 |
l/h(hol:f/b) | 打开/后退 |
S | 搜索文件 |
Alt(s) | 搜索下一个 |
Alt(S) | 搜索上一个 |
Ctrl(f) | 过滤 |
空格 | 多选文件 |
Alt(space) | 使用外部程序选择 |
v | 反转选择 |
V | 清除所有选择 |
Alt(v) | 仅显示选定文件 |
t | 切换标签 |
h | 切换显示隐藏 |
r | 反向排序 |
s | 循环排序(名称/大小/修改时间) |
K | 按修改时间选择下一个 |
k | 按修改时间选择上一个 |
d | 切换目录优先 |
~ | 转到$HOME |
/ | turbo cd |
Alt(/) | 使用外部程序进入目录 |
Q | 退出并保留目录/选择 |
L | 在后台运行 |
~ | 转到前一个当前工作目录 |
` | 转到书签 |
m | 添加书签 |
w | 显示进程 |
g holy(l) | 显示日志 |
a | 显示快速操作 |
z | 在当前工作目录中打开子shell |
c | 切换列 |
F(n) | 切换到标签 |
Alt(m) | 切换媒体暂停和自动播放 |
Alt(M) | 切换媒体静音 |
Alt(>) | 媒体快进5秒 |
Alt(<) | 媒体快退5秒 |
书签弹出中的快捷键
键 | 操作 |
---|---|
(键) | 打开书签 |
` | 转到上一个当前工作目录 |
Ctrl(c) | 取消 |
Alt(键) | 删除书签 |
进程查看器中的快捷键
键 | 操作 |
---|---|
w | 关闭进程查看器 |
d | 移除进程 |
k | 杀死进程 |
k holy(p) | 向上移动 |
j holy(n) | 向下移动 |
f | 切换跟踪输出 |
Ctrl(j) holy(Ctrl(n) | 向下滚动输出 |
Ctrl(k) holy(Ctrl(p) | 向上滚动输出 |
Ctrl(v) | 向下翻页 |
Alt(v) | 向上翻页 |
< | 滚动到底部 |
> | 滚动到顶部 |
迷你缓冲区中的快捷键
键 | 操作 |
---|---|
Esc/Ctrl(c) | 取消输入 |
Tab | 完成 |
F(n) | 插入tab替换 |
Ctrl(d) | 删除字符 |
Ctrl(b) | 向左移动光标 |
Ctrl(f) | 向右移动光标 |
Ctrl(p)/Alt(p) | 历史记录向上 |
Ctrl(n)/Alt(n) | 历史记录向下 |
Ctrl(u) | 清除行 |
Ctrl(h) | 删除单词 |
Ctrl(a) | 移动光标到行首 |
Ctrl(e) | 移动光标到行尾 |
依赖关系
~6MB
~111K SLoC