14 个版本

0.4.9 2022年8月25日
0.4.7 2022年8月21日
0.4.6 2022年2月22日
0.4.5 2021年6月30日
0.3.4 2020年6月29日

#2476 in 命令行工具

MIT 许可证

120KB
3K SLoC

ci appveyor crates MIT Packaging status

使用 Rust 编写的 StackOverflow 终端界面

示例用法

尽管我喜欢 so 这个缩写,但这个工具实际上应该被描述为 se:StackExchange 网络的界面。它与众不同的一个特点是你可以同时搜索 StackExchange 网络中的任意多个网站

# search using your default configuration
$ so how do i reverse a list in python

# search for a latex solution
$ so --site tex how to put tilde over character

# use google to search stackoverflow.com, askubuntu.com, and unix.stackexchange.com
$ so -e google -s askubuntu -s stackoverflow -s unix how do i install linux

安装

Arch Linux

您可以通过 AUR 包 so (跟踪最新版本) 或 so-git (跟踪 master),例如:

yay -S so-git

FreeBSD

您可以通过以下方式安装包 so

pkg install so

NetBSD

您可以通过以下方式安装包 so

pkgin install so

MacOS

您可以通过 homebrew 安装 formula

brew install so

Windows

如果您有 scoop,您可以通过 extras bucket 安装

# add extras bucket
scoop bucket add extras

# install so
scoop install so

从源代码安装

对于任何操作系统,您都可以直接安装 crate so

# everything but windows
cargo install so

# windows
cargo install so --no-default-features --features windows

有关功能标志的更多信息,请参阅 选择后端

发布二进制文件

静态二进制文件可在 发布页面 上找到,适用于常见的 Linux、MacOS 和 Windows 目标。您可以使用以下命令快速将所需版本安装到 DEST 目录:

curl --proto '=https' --tlsv1.2 -sSf https://samtay.github.io/so/install.sh \
  | bash -s -- --to DEST

目前我仅构建最常用的目标,但从理论上讲,添加更多应该是很容易的,所以如果您找不到您要找的内容,只需打开一个问题,我可以为您添加。以下是支持的目标列表。如果您不知道您需要什么,您可以安装rustc,并打开一个包含rustc -Vv | grep host | cut -d' ' -f2输出的问题。

文档

配置

例如,用户Alice的配置文件可以在以下目录中找到

  • Linux: /home/alice/.config/so
  • Windows: C:\Users\Alice\AppData\Roaming\Sam Tay\so
  • MacOS: /Users/Alice/Library/Preferences/io.Sam-Tay.so

默认值

config.yml文件允许您指定CLI的默认值。所以如果您不喜欢lucky提示,总是搜索serverfault.com和unix.stackexchange.com,并希望使用最快的搜索引擎,您可以将配置文件设置如下

# config.yml
---
api_key: ~
limit: 10
lucky: false
sites:
  - serverfault
  - unix
search_engine: stackexchange

运行so --help以查看您的当前默认值。

主题

在相同的目录中,您还可以找到colors.toml,它具有自我文档。默认主题试图与您的默认终端主题融合,但您可以根据需要更改它。特别是,如果您发现当前选择难以阅读,您可能想更改highlight_text。在主题目录中也有一些主题。

系统剪贴板集成

目前有一个非常原始的集成来复制当前聚焦的问题或答案的内容到系统剪贴板。这需要您的PATH中某些可以接受stdin并管道到剪贴板的命令。在mac & windows上,默认设置分别为pbcopy & clip,将直接工作。在Linux上,我假设xclip是最受欢迎的,但如果您使用其他(例如,在wayland上使用wl-copy),则需要直接设置命令

# config.yml
---
copy_cmd: copy --option-to-take-stdin

API密钥

如果您想使用自己的StackExchange API Key,您可以通过以下方式设置它

so --set-api-key <KEY>

您还可以选择不使用密钥,通过编辑您的配置来将api_key: ~。如果由于某种原因我的API密钥全局受限,您可以在每天每个IP地址上最多使用300次无密钥的StackExchange API,我想这应该适用于大多数用户。

搜索引擎

可用的搜索引擎是StackExchange、DuckDuckGo和Google。StackExchange总是搜索最快的,因为它不需要额外的请求或任何HTML解析;然而,它也非常原始。DuckDuckGo的速度排名第二,因为它的响应HTML比Google的小得多。我发现它对我的查询表现良好,所以它是默认的搜索引擎。

有时DuckDuckGo会阻止请求,因此它不再是默认设置。

多站搜索

文档中所述,

如果一个IP每秒发送超过30个请求,新的请求将被丢弃。

因此,不要在多站搜索中滥用,因为所有操作都是并行执行的。特别是,如果你指定超过30个站点,SE可能会暂时禁止你的操作。

选择后端

如果你是从源代码安装,你可以从多个可用的后端渲染引擎中选择。请注意,为了便携性,包defaultwindows功能标志没有ncurses依赖。默认后端是termion,这是一个纯Rust的无绑定库,在Linux、MacOS、BSD和Redox上似乎表现良好。Windows后端默认是crossterm,虽然它的支持水平很高,但在性能上有所牺牲。在我的机器上,应用程序在绘制之间会有闪烁。所以如果你在Mac、Linux或Redox上,最好的选择是使用默认功能,它使用termion后端。如果你在Windows上,请使用crossterm,但要知道它会有些跳跃。

如果crossterm团队找到了一个修复方案,允许ncurses接收调整大小事件,并且你在系统上安装了ncurses,那么ncurses和pancurses后端可能是性能最高的。只需知道,目前如果你选择这个选项,并且运行了--lucky提示,你将无法在TUI打开时调整终端窗口的大小。

可用后端

  • termion-backend
  • ncurses-backend
  • pancurses-backend
  • crossterm-backend

例如,要使用ncurses-backend

cargo install so --no-default-features --features ncurses-backend

有关此选择的更多信息,请参阅此处

贡献

警告:这是我第一次编写Rust,整个项目中很可能有一些非常不自然的和丑陋的代码,所以不要来这里寻找好的Rust示例!话虽如此,我很乐意改进代码库。请查看贡献指南并提交任何重构问题或拉取请求。

致谢

感谢我的好朋友Charles为设计徽标。

依赖

~18–32MB
~534K SLoC