2 个版本

0.1.1 2022 年 11 月 17 日
0.1.0 2022 年 11 月 17 日

#2698命令行工具

MIT 许可证

105KB
2.5K SLoC

ate 是一个终端分页器,它解析 终端超链接 并允许您搜索、在不同之间移动并打开它们。它除了分页外还提供导航功能。虽然它像现有的终端分页器一样通过文本流分页,但 less 在此用例中具有更多功能。

观看下面的视频了解高级用法,并查看 为什么使用 ate 了解更多关于该工具的动机及其使用方法。

https://user-images.githubusercontent.com/12270/194925821-a69e749d-798f-4702-b064-1a2978aeb8f3.mp4

取消静音视频以听解说或阅读以下内容

  • 在此仓库中运行 ripgrep 对术语 render 进行搜索。我们使用 hyperer 将匹配的文件链接插入 ripgrep 中
  • 将鼠标悬停在链接上以显示插入的内容
  • 重新运行 ripgrep,将输出输入到 ate
  • 使用 n 遍历链接
  • 使用 / 搜索并缩小到单个结果
  • Enter 打开编辑器中的匹配项

安装

安装 Rust,克隆此仓库,并在克隆中运行 cargo install。或者,如果您使用的是 Nix 软件包管理器,请在此仓库中依赖 flake.nix。

如果您没有想要与 ate 一起使用的程序,您可能还需要安装一些用于 获取链接 的东西。

用法

将文本发送到 ate 的标准输入,例如通过以下管道:hyperer-rg --pretty <my_search> | ate

或类似的重定向输入

ate<my_linkful_output

在任何情况下,ate 都会显示第一屏文本并解析其中的链接。

快捷键绑定

  • n 跳转到下一个链接。
  • N 跳转到上一个链接。
  • Enter 通过在 ATE_OPENER 环境变量中以链接地址作为第一个参数启动命令,打开当前选中的链接。
  • / 打开链接搜索器,并在其中输入文本可以缩小到包含输入文本的链接。
  • ⬆️ 和 ⬇️ 在链接搜索器中向前和向后移动匹配项。
  • 链接搜索器中的 Enter 选中当前链接并返回到文本视图。
  • 链接搜索器中的 Esc 退出搜索并返回到搜索前的位置。
  • q 在普通模式下退出,而 Ctrl-C 在任何模式下退出。

环境变量

ate 的所有配置都通过环境变量完成。

ATE_OPENER

用于打开链接的程序,例如当按下 Enter 时。选定的链接作为第一个参数传递给它。链接应采用 file://hostname/path#line number 的形式,根据 终端超链接文档。不能保证程序不会发出格式不正确的链接,但 ate 打开器目前假定这种形式。

ate 预期调用此进程,并希望它在另一个窗口中打开要编辑的文件。例如,您可以使用 Vim 的远程命令emacsclient 来完成此操作。

opener_examples 包含可以作为打开器的脚本。要使用其中一个,下载它,根据您的系统进行修改,并将 ATE_OPENER 导出为脚本的完整路径。

例如,如果您将此存储库克隆到 ~/dev/ate 并使用 NeoVim,则根据您的 shell 运行不同的命令

  • 对于 zshbashexport ATE_OPENER=~/dev/ate/opener_examples/nvim_opener.bash
  • 对于 fishset -xU ATE_OPENER ~/dev/ate/opener_examples/nvim_opener.bash

对于 zshbash,您还希望将其添加到您的 shell 启动文件中,以便在新的 shell 中显示。

ATE_OPEN_FIRST

如果定义了,ate 将在启动时打开它找到的第一个链接。我使用此 Bash 脚本来运行 cargo 并编译 Rust。

# Use hyperer-cargo to link to Rust files in compilation failures, test failures, and backtraces
hyperer-cargo --color=always $* |\
# Print the cargo output to the terminal and to a temp file
  tee /tmp/hyperlinked_cargo.out

# If the cargo command failed, open the output in ate.
# If it didn't fail, we won't have anything interesting to navigate
if [[ ${PIPESTATUS[0]} -ne 0 ]] ; then
  # If it's been under 5 seconds since the script started, set ATE_OPEN_FIRST
  # This means if a compile or test was quick, we open the failure using ATE_OPENER ASAP
  # If cargo took longer, we don't immediately open a link in case we've started doing something in our editor.
  if [[ $SECONDS -lt 5  ]] ; then
    export ATE_OPEN_FIRST=
  fi
  ate < /tmp/hyperlinked_cargo.out
fi

获取链接

ate 最有用的是包含超链接的文本。终端超链接是一项相对较新的功能,因此很少有程序默认支持它们。lsgccsystemddelta 是其中一些。

在超链接支持出现在更多程序中之前,我们可以包装现有程序,检测其输出中可能被链接的内容,并在这些文本周围生成终端链接。

hypererripgrepcargo 实现了这一点。我强烈推荐安装它,并使用 ripgrep 与之结合使用,以了解 ate 的功能。它还可以作为添加其他命令链接的基础。

缺少的功能

ate 非常年轻,缺少明显的功能。我计划至少添加以下这些:

  • 搜索文本。目前它只能搜索链接。
  • 流式输入。目前它在启动时读取所有标准输入。

以下功能可能也很有意义:

  • 接受文件参数而不是仅接受标准输入。
  • 跟踪文件。

可能可以通过其他实用工具处理这些情况。如果不能,我将在 ate 中添加它们。

依赖关系

~19–28MB
~490K SLoC