Polybar 中的从右到左 (RTL) 文本

Polybar 中的从右到左 (RTL) 文本

我在用着波利巴,我想在上面显示波斯语文本。根据文本模块,我可以像这样实现:

[module/persian]
type = custom/text
content = یک متن فارسی

然后我可以像这样使用这个模块:

modules-left = bspwm
modules-center = date
modules-right = persian battery

但结果是这样的:

聚棒 ltr

如您所见,文本被反转了(从左到右显示)。它看起来应该和终端中显示的样子一样。

我尝试添加 RTL 覆盖字符 ( U+202E):

polybar rtl 字符

但这也不起作用,因为它会产生以下警告:

warn: Dropping unmatched character  (U+202e)

我怎样才能解决这个问题?

答案1

我怎样才能解决这个问题?

简短的回答是:你不能。


稍微长一点的答案:

Polybar 自行完成所有文本渲染,逐个字符地进行,它背后并没有任何花哨的工具包。

因此,它仅对 UTF-8 提供基本支持,不支持任何类型的复合字符或控制字符。这意味着,例如,它不支持 RTL 覆盖字符或表情符号肤色修改器之类的东西。

答案2

您可以使用它fribidi来渲染 RTL 文本。这是我的 polybar Jalali 模块的一个示例:

[module/jdate]
type = custom/script
exec = "jdate "+%d %V" | fribidi | sed 's/  //g;s/0/۰/g;s/1/۱/g;s/2/۲/g;s/3/۳/g;s/4/۴/g;s/5/۵/g;s/6/۶/g;s/7/۷/g;s/8/۸/g;s/9/۹/g'"
tail = true
interval = 60
format = <label>
format-prefix = "%{F#dd7878} "
format-prefix-foreground = ${colors.foreground}
label = %output:0:50%

bar为了匹配缺失的字符,您应该在模块中定义支持的字体 :

[bar/example]
...
font-0 = Manrope:pixelsize=11;2
font-1 = Vazirmatn UI: pixelsize=11;0
font-2 = iMWritingDuospace Nerd Font::pixelsize=12;2

结果:

结果

相关内容