#终端文件 #文件管理器 #文件 #终端

nightly app hunter

快速、无延迟的终端文件浏览器

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文件系统

Download history 5/week @ 2024-03-07 2/week @ 2024-03-14 64/week @ 2024-03-28 32/week @ 2024-04-04

每月下载量 72

许可协议 WTFPL 许可协议

435KB
11K SLoC

hunter

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 时已知可工作的版本。

默认情况下,它将安装一个具有媒体预览支持的完整功能版本。您可以使用功能标志 imgvideosixel 来控制这一点。您可以通过在 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