#workspace #window-manager #i3-wm #class-name #linux #arch-linux

bin+lib i3wsr

根据其内容更改 i3-wm 工作区名称

14 个稳定版本

2.1.1 2022年3月15日
2.0.1 2021年4月24日
1.3.1 2021年2月4日
1.3.0 2020年6月11日
1.0.0 2017年12月19日

#1096命令行工具

每月下载量:39

MIT 许可证

31KB
582 代码行

i3wsr - i3 工作区重命名器

Build Status Crates.io

i3wsr 是一个小程序,使用 I3IPC 接口 根据工作区的内容更改工作区名称。

目录

详细信息

工作区的名称是由工作区中每个窗口的 X11 窗口属性 WM_CLASS 组成的。在实际操作中,它看起来可能像这样

需求

i3wsr 需要 XCB,如果您在编译时遇到提及 xcb 的编译错误,您可能需要安装 libxcb。例如,在 Ubuntu 上,您会安装

sudo apt-get install libxcb1-dev

更多内容请参考 #18

安装

RustCargo 是必需的,并且可以使用 cargo 如下安装 i3wsr

cargo install i3wsr

或者,您也可以构建一个发行版二进制文件

cargo build --release

然后,将构建的二进制文件(位于 target/release/i3wsr),放置在您的 $path 上的某个位置。

Arch Linux

如果您运行的是 Arch,您可以从 AUR 安装稳定版或最新版,归功于 Reddit 用户 u/OniTux

用法

只需启动程序即可。如果您正在运行 I3,另一个选项是将以下内容放入您的 i3 配置中

# cargo
exec_always --no-startup-id $HOME/.cargo/bin/i3wsr
# AUR
exec_always --no-startup-id /usr/bin/i3wsr

i3 配置

此程序依赖于编号的工作区,因为我们不断地更改工作区名称。因此,您的 I3 配置需要反映这一点

bindsym $mod+1 workspace number 1
assign [class="(?i)firefox"] number 1

如果您像我一样,不一定将工作区绑定到仅数字,或者您想保持名称的一部分不变,您可以这样做

bindsym $mod+q workspace number 1:[Q]
assign [class="(?i)firefox"] number 1:[Q]

这样修改后,工作空间看起来可能就像这样

1:[Q] Emacs|Firefox

您可以通过使用修剪工作空间编号的条带来进一步扩展这个功能,从而只保留

[Q] Emacs|Firefox

配置/选项

i3wsr的配置可以使用cmd标志或配置文件完成。配置文件允许进行更细致的设置,并且是配置图标和别名所必需的。默认情况下,i3wsr会在$XDG_HOME/.config/i3swr/config.toml$XDG_CONFIG_HOME/i3swr/config.toml查找配置文件。要指定另一个路径,请在调用时传递--config选项

i3wsr --config ~/my_config.toml

示例配置可以在这里找到

别名

有时窗口管理器的属性可能会过于冗长,因此可以将类名与别名匹配

[aliases]

# Exact match
"^Google-chrome-unstable$" = "Chrome-dev"

# Substring match
firefox = "Firefox"

# Escape if you want to match literal periods
"Org\\.gnome\\.Nautilus" = "Nautilus"

别名键使用正则表达式进行匹配,因此可以发挥创意

# This will match gimp regardless of version number reported in class
"Gimp-\\d\\.\\d\\d" = "Gimp"

请记住,除了[a-zA-Z]之外,都要使用引号,并且要转义你的斜杠。由于rust字符串转义,如果你想使用字面量反斜杠,请使用两个斜杠\\d

WM 属性

目前i3wsr支持3个窗口属性

[general]

wm_property = "instance"

可能的选项是classinstancename,如果不存在,则默认为class

您也可以提供cmd参数

i3wsr --wm-property instance

这是默认值,也是最简洁的。

实例

在分配工作空间名称时,使用WM_INSTANCE而不是WM_CLASS,实例通常更具体。i3wsr会尝试匹配实例与图标,如果失败,将回退到类。

此选项的一个用例是启动chromium --app="https://web.whatsapp.com",然后在您的配置文件中为whatsapp分配不同的图标

[icons]
"WhatsApp" = "🗩"

别名也会在实例上匹配

[aliases]
"web\\.whatsapp\\.com" = "WhatsApp"

名称

使用WM_NAME而不是WM_CLASS,此选项非常冗长,并且依赖于正则表达式匹配别名才有用。

一个用例是运行某些终端应用程序,默认情况下,i3wsr将只显示类,而不管终端中运行了什么。

所以你可以这样做

[general]
wm_property = "name"

[aliases]
".*mutt$" = "Mutt"

你可以显示终端正在运行的任何内容,但有一个缺点:i3无法知道终端中发生了什么,比如启动mutt不会触发任何IPC事件。别名将在i3接收到窗口或工作空间事件时生效。

应该可以编写一个启动器脚本,将您运行的任何命令包装在自定义的i3 ipc触发事件中。如果有人找到了一个好的方法,请告诉我。

图标

您可以为WM属性配置图标,已经配置了一个基本的font-awesome预设,要启用它请使用选项--icons awesome(需要安装font-awesome)。

可以通过使用配置文件来设置更深入的图标配置。在那里,您可以定义您想要的任何标题的图标。

[icons]
Firefox = "🌍"

# Use quote when matching anything other than [a-zA-Z]
"Org.gnome.Nautilus" = "📘"

i3wsr会首先尝试匹配别名与图标,然后回退到窗口类,因此这样的配置是有效的

[aliases]
"Gimp-\\d\\.\\d\\d" = "Gimp"

[icons]
Gimp = "📄"

提供图标的字体当然推荐,如font-awesome。请确保您的栏已配置该字体。

分隔符

通常i3wsr使用管道字符|在工作空间中的类名之间,但可以在配置文件中配置自定义分隔符

[general]
separator = ""

默认图标

要使用默认图标,当没有其他定义时,请使用

[general]
default_icon = "💀"

无图标名称

要仅当图标不可用时显示名称,可以使用--no-icon-names标志,或在其配置文件中启用它

[options]
no_icon_names = true

无名称

如果您不想让i3wsr显示名称,可以使用--no-names标志,或在其配置文件中启用它

[options]
no_names = true

删除重复项

如果您想从工作空间中移除重复项,请使用标志 --remove-duplicates,或在配置文件的 options 部分中配置它。

[options]
remove_duplicates = true

Sway

检查 Pedro Scaff 的端口 swaywsr

测试

要本地运行测试,需要 Vagrant。运行 script/run_tests.sh 在 ubuntu xenial 上运行测试。

归属

没有以下内容,这个程序将无法实现:i3ipc-rs,一个用于通过其 IPC 接口控制 i3-wm 的 Rust 库,以及 rust-xcb,一组 Rust 绑定和包装器,用于 XCB

依赖项

~9.5MB
~158K SLoC