7 个版本
0.3.3 | 2021年9月7日 |
---|---|
0.3.1 | 2018年3月28日 |
0.2.2 | 2018年3月11日 |
0.2.1 | 2017年11月27日 |
0.1.0 | 2017年2月11日 |
#2088 在 命令行工具
每月 34 次下载
28KB
591 行
run-or-raise 🏃
run-or-raise
是一个用于启动应用程序或在它们已运行时聚焦其窗口的工具。当调用时,run-or-raise
会尝试找到一个匹配指定条件的窗口并聚焦它,如果没有找到匹配的窗口,则执行指定的程序。
这可以与像 i3 这样的布局窗口管理器或像 xbindkeys 这样的通用键盘快捷键管理器结合使用,允许将任意命令绑定到快捷键上。在这种设置中,人们可以使用 run-or-raise
来,例如,通过单次按键启动或聚焦一个网页浏览器。
run-or-raise
是为与基于 X11 的 Linux 系统一起使用而设计的。
安装
run-or-raise
可以使用 cargo 安装
cargo install run-or-raise
编译和运行 run-or-raise
需要 libxcb 库已安装。
要获取 run-or-raise
的最新开发版本,可以将 cargo 指向从 git 仓库安装
cargo install --git 'https://github.com/Soft/run-or-raise.git'
注意 cargo 不会安装 man 页面。要安装 run-or-raise
以及其手册,在项目目录中调用 make install
。默认情况下,安装脚本会将文件放置在 /usr/local/
层次结构下。
用法
run-or-raise CONDITION PROGRAM [ARGS...]
当调用时,run-or-raise
会根据 CONDITION
匹配现有的窗口。如果找到匹配的窗口,则聚焦它。如果没有窗口匹配条件,则 run-or-raise
执行 PROGRAM
并将其任何 ARGS
作为参数传递给它。
条件
条件基于窗口的属性选择窗口。在 X11 中,每个窗口都可以与任何数量的属性相关联。窗口属性示例包括 name(通常在窗口标题栏中可见),class(一个标识符,通常用于选择特定应用程序的窗口)和 role(窗口逻辑角色的表示,例如,网页浏览器)。可以使用 xprop 工具来检查窗口及其属性。
最简单的窗口匹配条件只是比较一个属性与一个值。
run-or-raise 'name = "Spotify"' spotify
这可以找到并聚焦标题为“Spotify”的窗口,或者运行命令 spotify
。
条件支持两种比较运算符:=
用于与字符串字面量进行精确相等比较,以及 ~
用于使用 正则表达式 进行比较。
可以使用逻辑运算符组合比较:&&
用于逻辑 AND,||
用于逻辑 OR,以及 !
用于逻辑 NOT。匹配表达式中的运算符是左结合的,且 !
(非)比 &&
(与)具有更强的绑定力,而 &&
(与)又比 ||
(或)具有更强的绑定力。可能的属性有 class
、name
和 role
。此外,可以使用括号来改变评估顺序。字符串和正则表达式用双引号书写。如果多个窗口符合条件,则选择第一个匹配的窗口。
以下是一些如何使用条件以不同方式选择窗口的示例
# Launch or focus emacs
run-or-raise 'class = "Emacs"' emacs
# You can also use regular expressions for matching.
# Match windows with title ending with the string "Firefox"
run-or-raise 'name ~ ".*Firefox$"' firefox
# You can combine multiple comparisons with logical operators.
# Match windows with the role "browser" that do not have the class "Chromium".
run-or-raise 'role = "browser" && ! class = "Chromium"' firefox
# Even more complex conditions are possible.
# This is getting silly
run-or-raise '! name ~ ".*\d+.*" || role = "browser" && ! class = "Emacs"' urxvt
外部工具集成
run-or-raise
可以与几乎任何允许在按键事件响应中执行任意命令的工具结合使用。以下是一些关于配置 run-or-raise
以与各种应用程序一起工作的提示
xbindkeys 键盘快捷键管理器
xbindkeys 是一个基于按键事件执行命令的应用程序。通过将 run-or-raise
与它结合使用,可以仅当应用程序尚未运行时才启动应用程序。例如,要按 Shift+Mod4+b
启动或聚焦 Firefox,可以使用以下 xbindkeys
配置
"run-or-raise 'role = \"browser\"' firefox"
Shift+Mod4+b
i3 窗口管理器
i3 是一个平铺窗口管理器,它支持将任意命令绑定到任意按键。要使用 i3 将 run-or-raise
调用绑定到按键,可以在 i3 的配置文件中指定如下内容
bindsym Mod4+Shift+b exec --no-startup-id \
run-or-raise 'role = "browser"' firefox
KDE 自定义快捷键
KDE 允许使用 自定义快捷键管理器 将任意命令绑定到按键。通过此图形配置实用程序,可以使用 run-or-raise
启动或聚焦应用程序。
桌面条目
桌面条目 用于定义出现在应用程序菜单和启动器中的快捷方式。除了应用程序名称和图标外,它们还定义了在启动应用程序时应该执行哪些命令。run-or-raise
可以用作桌面文件的一部分,强制只启动特定应用程序的一个实例。例如,Linux 上的 Spotify 当前不强制只启动应用程序的一个实例,这很烦人,因为通常不希望同时打开多个音频播放器。将 run-or-raise
集成到桌面文件中意味着用调用 run-or-raise
来检查应用程序是否正在运行的命令替换 Exec
键
[Desktop Entry]
Name=Spotify
Exec=run-or-raise 'class = "Spotify"' spotify %U
...
依赖项
~7MB
~122K SLoC