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
31KB
582 代码行
i3wsr - i3 工作区重命名器
i3wsr
是一个小程序,使用 I3 的 IPC 接口 根据工作区的内容更改工作区名称。
目录
详细信息
工作区的名称是由工作区中每个窗口的 X11 窗口属性 WM_CLASS
组成的。在实际操作中,它看起来可能像这样
需求
i3wsr 需要 XCB,如果您在编译时遇到提及 xcb
的编译错误,您可能需要安装 libxcb
。例如,在 Ubuntu 上,您会安装
sudo apt-get install libxcb1-dev
更多内容请参考 #18。
安装
Rust 和 Cargo 是必需的,并且可以使用 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"
可能的选项是class
、instance
和name
,如果不存在,则默认为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