#x11 #launcher #utility #system #窗口管理

app run-or-raise

用于启动应用程序或聚焦其窗口的工具

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 次下载

GPL-3.0 许可证

28KB
591

run-or-raise 🏃‍

Build Status Latest Version GitHub release dependency status AUR version License: GPL v3

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。匹配表达式中的运算符是左结合的,且 !(非)比 &&(与)具有更强的绑定力,而 &&(与)又比 ||(或)具有更强的绑定力。可能的属性有 classnamerole。此外,可以使用括号来改变评估顺序。字符串和正则表达式用双引号书写。如果多个窗口符合条件,则选择第一个匹配的窗口。

以下是一些如何使用条件以不同方式选择窗口的示例

# 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