#i3-wm #polybar #bspwm #xwindow #wms

app ixwindow

适用于 Polybar 的图标化 xwindow 模块(适用于 bspwm 和 i3wm)

3 个版本

0.1.2 2023 年 3 月 30 日
0.1.1 2023 年 3 月 29 日
0.1.0 2023 年 3 月 29 日

#344GUI

每月 46 次下载

MIT 许可证

52KB
1K SLoC

Ixwindow – 图标化 xwindow

crate

关于

Ixwindow 是标准 xwindow polybar 模块的一个改进版本。主要特点是 ixwindow 不仅显示活动窗口的信息,还显示其图标。它还允许您比常规 xwindow polybar 模块更多地自定义打印窗口信息。下面展示了 ixwindow 的实际运行情况。

animated

注意:基本上,它并不真正依赖于 Polybar 本身,也可以与其他任何栏一起使用,您只需实现与 Polybar 的 tail = true 相同的行为。

功能

  • 因为它是用 Rust 编写的,所以速度非常快
  • 自动生成图标
  • 显示图标质量高
  • 灵活配置要打印的内容
  • 通过 bspc-rs 库原生支持 bspwm,该库是为了这个项目而启动的

安装

Cargo 安装

您可以使用以下命令安装它:cargo install

cargo install ixwindow

但是在这种情况下,您必须自己创建配置文件(例如,请参阅 examples/ixwindow.toml 中的示例配置)。

安装脚本

安装 ixwindow 的另一种方法是使用 GitHub 仓库。首先,您必须克隆它

git clone [email protected]:andreykaere/ixwindow.git && cd ixwindow

如果您想获得最新版本,请切换到 dev 分支。

要将它安装到您的系统上,只需运行 ./install。要查看安装选项,请运行 ./install --help

设置 Polybar

在您的系统上安装 ixwindow 并为其创建配置文件后,您需要在 Polybar 配置中设置 ixwindow 模块。为此,您必须将以下内容添加到您的 Polybar config 文件中

[module/ixwindow]
type = custom/script
exec = /path/to/ixwindow
tail = true

现在您需要在栏上放置某个位置:例如,您可以将其添加到您的窗口管理器模块旁边,如下所示:modules-left = <wm> ixwindow

如果您设置了多个显示器,则需要为每个显示器创建不同的栏并创建类似的模块

[module/ixwindow1]
type = custom/script
exec = /path/to/ixwindow <name_of_monitor_1>
tail = true

[module/ixwindow2]
type = custom/script
exec = /path/to/ixwindow <name_of_monitor_2>
tail = true
...

然后将这些模块放置在相应的栏上

...
; Bar for monitor1
[bar/bar1]
...
modules-left = <wm> ixwindow1
...

; Bar for monitor2
[bar/bar2]
...
modules-left = <wm> ixwindow2
...

...

您还需要为ixwindow创建一个配置文件。该文件的示例可以在examples/ixwindow.toml中找到。更多信息请参阅以下部分。

配置

默认配置文件应位于$XDG_CONFIG_HOME/ixwindow/ixwindow.toml。如果您想将其放在其他位置,请在环境变量IXWINDOW_CONFIG_PATH中指定,或使用带有--config=<path_to_config>选项的ixwindow脚本。

在配置文件中,有许多可修改的选项(示例配置文件可以在examples/ixwindow.toml中找到),例如

# Path to folder for the cached icons 
# Note: it makes sense to keep it around `.config/polybar` folder, so you won't
# lose your custom icons, if you have them
cache_dir = "path/to/cache/directory"

# This represents the size of the icon in pixels, for example:
size = 24

# This represents background color of the polybar bar. Color should be
# specified in hex format:
color = "#RRGGBB"

# Absolute coordinates of the icon in pixels, for example: 
x = 270
y = 6

# Amound of spaces in the output of the `ixwindow`. This is needed to add
# space between previous module and the title of the window
# It's recommended to be configured together with the coordinates of the icon 
# to achieve the best result
gap = "<spaces>"


# For i3 (but if there will be request, can be easily added for bspwm as
# well). 
#
# This variable is used for calculation of the position of the icon, when the number 
# of active desktops is dynamic, i.e. is not constant and can be changed when
# new nodes are added. This setting is optional and if it is not set, it
# means, that the icon position will be static.
# 
# For more accurate configuration, floating numbers are acceptable. For
# example:
gap_per_desk = 24.0

要更改您的配置,只需编辑您的配置文件。要使新设置生效,您必须重新启动polybar(例如使用polybar-msg cmd restart)。

生成图标

ixwindow使用X11原子_NEW_WM_ICON自动生成图标。大多数情况下它都会正常工作,但对于某些应用程序,此字段可能为空,无法自动生成。在这种情况下,如果您想为这些应用程序添加图标,则必须手动添加。

已知问题和限制

  • 不支持png,但将jpg替换为png需要依赖于合成器
  • 手动指定,但似乎在这个阶段无法修复,因为polybar目前不支持在栏中插入图像

如果您有任何问题或发现了任何错误,请随时提出问题。也欢迎提交拉取请求;如果您有解决上述任何问题的方案,请不要犹豫,创建一个。

目标

  • 添加png支持(如果用户不使用合成器,可以将其作为选项)

  • 用Rust重写ixwindow-convert。目前已将其删除,因为有了Rust实现,就不太需要它了。然而,我认为无论如何都有必要拥有它。

  • print_info函数添加选项,即打印不同的信息。也许可以添加对xwindow选项的支持(在polybar中)。

谢谢

灵感来源

当我看到awesome-wm中有类似功能时,我得到了灵感开始这个项目。我认为在polybar上模拟完全相同的行为可能很困难,然而我遇到了这个项目this,我认为我可以通过稍微格式化输出并添加聚焦应用程序的图标来改进默认的xwindow

得益于

我想感谢psychon在帮助我理解x11rb和xorg方面,这使得用Rust重写代码并大幅改进该项目成为可能。

依赖项

~24MB
~303K SLoC