6 个版本
0.3.1 | 2019年5月30日 |
---|---|
0.3.0 | 2019年5月18日 |
0.2.3 | 2019年5月16日 |
#2768 在 命令行工具
225KB
979 行
sefr (搜索引擎前端)
用于交互式打开搜索引擎/参数化URL的终端程序。它有点像 surfraw,但带有交互式建议(通过解析 opensearch json)。
动机
我经常使用自定义URL栏搜索引擎,但浏览器对这些的支持令人沮丧。
- Firefox 有一种非常复杂的定义方式,不允许指定建议端点,并且仍然不能同步。
- Chrome 使得定义它们变得容易,可以同步,但不允许指定建议端点。
- Vivaldi 使得定义它们变得容易,允许指定建议端点,但不能同步。
例如,在原始 Firefox 中,虽然你可以创建一个书签关键词,使得当你输入“r foo”到你的URL栏时,它会自动跳转到“reddit.com/r/foo”,但你无法获得补全,也无法将其设置为默认搜索引擎。
这是一个可定制的跨平台解决方案,因为它使用你的默认浏览器(更多详情),你可以通过全局热键将其集成到 GUI 工作流程中(见下文)。
安装
安装 sefr
有两种方法
- 克隆此仓库,安装 Rust 工具链,然后在克隆的目录中调用
cargo run
以试用它,或者调用cargo build
以创建位于target/debug/sefr
的二进制文件。 - 通过调用
cargo install sefr
来安装。这应该使它可以在任何地方运行。
通过将全局热键映射到在轻量级终端中启动它,方便地将它集成到您的桌面环境中,从而实现类似 rofi 的用户体验。
例如,我现在在 KDE 中使用这个(使用令人难以置信的轻量级的 suckless 终端),全局绑定到 Super+s,使用 kwin 规则隐藏 wmclass=sefr st
的窗口装饰。
st -n sefr -g 70x18 -f 'Monospace:size=14' -e ~/src/sefr/target/debug/sefr
对于i3,这效果很好。不确定为什么我必须指定 $BROWSER
。
for_window [instance="^sefr$"] floating enable, resize set 640 480, move position center
bindsym Mod4+s exec BROWSER=/usr/bin/firefox st -n sefr -f 'Monospace:size=14' -e ~/src/sefr/target/debug/sefr
配置/自定义
配置文件
在其首次启动时,sefr
将自动在由 directories crate 提供的配置目录中生成一个 TOML 配置文件。任何随后的更改都应该在其中进行。
例如,对于 Linux,配置文件将位于 ~/.config/sefr/config.toml
。
添加新引擎
警告:当前的配置格式可能在将来发生变化!
可以通过将它们添加到 config.toml
文件中来为 sefr
添加新引擎以供使用。
基本引擎定义看起来是这样的
[engines.yt]
name = "YouTube"
search_url = "https://www.youtube.com/results?q=%s"
suggestion_url = "http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=%s"
[engines.PREFIX]
定义了什么 前缀(也称为 关键字 或 触发器)激活引擎。name
是引擎的名称,用于提示文本,如果未在提示部分定义(稍后将有更多介绍)。search_url
在按下回车键时,会在您的浏览器中打开,并将%s
替换为搜索词。suggestion_url
(可选)是查询建议的端点(将%s
替换为搜索词)时。它必须返回 OpenSearch 建议架构 json。space_becomes
(可选,默认为+
)是打开目前仅当设置为search_url
之前替换空格的内容。""
时防止输入空格,因为我们现在对搜索词进行 urlencode。在默认配置中engines.wkt
(维基词典)和engines.w
(维基百科)将其设置为现在使用不同的搜索端点,不需要下划线。_
,因为维基百科就是这样在其 URL 中编码空格的。engines.r
(Subreddit)将其设置为空字符串,因为 subreddits 的名称中不能有空格(注意,此值防止在选中引擎时输入缓冲区中输入空格,以便可以使用空格选择建议而无需执行搜索)。
当未输入前缀时使用的引擎在配置中定义为 _default
,并且程序启动是必需的。示例
[engines._default]
name = "Google"
search_url = "https://www.google.com/search?q=%s"
suggestion_url = "https://www.google.com/complete/search?client=chrome&q=%s"
此外,还有一个可选的 prompt
部分,它处理当调用引擎时显示的提示。它通常看起来像这样
[engines.yt.prompt]
icon = " ▶ "
icon_bg = "Red"
icon_fg = "White"
text = " Youtube "
text_bg = "White"
text_fg = "Black"
以下字段受支持,所有都是可选的
icon
:提示中显示的图标icon_bg
:图标的背景颜色icon_fg
:图标的文字颜色text
:在提示中图标后面的文字text_bg
:文字的背景颜色text_fg
:文字的文字颜色
请注意,在示例配置中,icon
和 text
用空格填充以美观,但这不是必需的。
所有字段都是字符串,除了颜色字段(*_bg
,*_fg
)。它们可以是字符串(对应这里的颜色名称),8位数字(对应Ansi 颜色代码),或者8位RGB元组,例如[255,255,255]
如果省略了特定引擎的这一部分,将使用显示引擎名称的基本提示。
快捷键
快捷键正在开发中,但所有当前功能都可以在[keybinds]
部分重新绑定。快捷键使用类似 Vim 的语法(例如 <Down>
,<C-w>
,<F12>
),但有几点需要注意
-
绑定和动作都使用双引号括起来。因此整个绑定就像这样的一行:
"<Backspace>" = "DeleteChar"
。 -
除了单个字符之外,所有绑定都是有效的(例如,在
"p" = "Exit"
中的实际字母p
)。但为什么你会创建这样的绑定呢? -
Ctrl
用C-
表示(例如,<C-w>
表示 'control + w')。Alt
可以用A-
或M-
表示。 -
除了修饰符之后的常规键之外,所有在
<
角括号>
内的内容都是不区分大小写的。也就是说,<a-p>
,<A-p>
,<m-p>
和<M-p>
都表示相同的意思('alt + p'),但<m-P>
表示 'alt + shift + p'。 -
这意味着没有 "shift" 修饰符。要注册 'alt + shift + s',你可以写
<a-S>
或<A-S>
。 -
'shift + tab' 用
<Backtab>
表示。 -
'enter' 可以是
<CR>
或<Enter>
。'backspace' 可以是<BS>
或<Backspace>
。 -
空字符串表示
NULL
字符,无论那是什么。 -
如果您将两个函数分配给相同的键,则后来注册的将覆盖第一个。
默认配置摘录
[keybinds]
"<BackTab>" = "SelectPrev"
"<Backspace>" = "DeleteChar"
"<C-c>" = "Exit"
进度
此项目目前处于 alpha 阶段,但相对稳定。
- 提示
- 请求建议 / JSON 解析
- 可定义带有前缀、提示和端点的引擎
- 浏览器启动
- 具有前缀边缘情况的建议选择
- TOML 文件配置
- 使用真实光标渲染输入缓冲区,并能够移动它
- 可配置的快捷键
- 当建议端点行为异常时提供更好的反馈
- CLI 参数,例如通过参数提供初始输入缓冲区以进行别名化。
依赖项
~12MB
~301K SLoC