#file #terminal-file #file-manager #terminal #cli #config-file

已撤回 hunter-media

hunter的图像/视频/音频文件预览生成器

0.1.0 2019年7月1日

#39 in #terminal-file

WTFPL 许可证

20KB
449

hunter

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

默认情况下,它将安装一个功能齐全的版本,支持媒体预览。您可以使用功能标志imgvideo来控制此操作。可以通过在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