我在用着波利巴,我想在上面显示波斯语文本。根据文本模块,我可以像这样实现:
[module/persian]
type = custom/text
content = یک متن فارسی
然后我可以像这样使用这个模块:
modules-left = bspwm
modules-center = date
modules-right = persian battery
但结果是这样的:
如您所见,文本被反转了(从左到右显示)。它看起来应该和终端中显示的样子一样。
我尝试添加 RTL 覆盖字符 ( U+202E
):
但这也不起作用,因为它会产生以下警告:
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
结果: