rxvt-unicode

来自 ArchWiki
(重定向自 Urxvt)

rxvt-unicode (urxvt) 是一个可自定义的终端模拟器,从 rxvt 分支而来,并支持 Perl 扩展。

安装

安装 以下软件包之一

或者在 AUR 中搜索应用了不同补丁和配置选项的带有个人偏好的 构建版本

补丁
文件名 描述
7-bit-queries.patch
用于 7 位查询的多字符序列 — 是颜色 OSC 命令正确工作所必需的;已合并到上游
24-bit-color.patch
真彩色支持
256color.patch
256 个 ~/.Xresources 颜色
background-opacity.patch
固定不透明度(pixbuf-相关)
clear.patch
Control-L 将屏幕上的所有行保留在回滚缓冲区中(类似 VTE-的行为)
enable-wide-glyphs.patch
增强字形支持,improve-font-rendering.patch 所需
font-width-fix.patch
减少符号之间的空格,与 improve-font-rendering.patch 不兼容(已被替换)
improve-font-rendering.patch
字体渲染改进
line-spacing-fix.patch
垂直间距改进,与 improve-font-rendering.patch 不兼容(已被替换)
lines-rewrap.patch
解决了 #Wrong_shell_prompt_placement_after_upgrading_to_9.31 问题
matcher-vi-bindings.patch
vi-风格的 (hjkl) 键添加到 matcher 扩展以模仿已弃用的 ulr-select 行为
noinc.diff
无增量调整大小 — 对于更好的 Openbox 用户体验是必需的
perl-5.38.patch
Perl 5.38 所需的区域设置修复;已合并到上游
popup-menu-hang.diff
修复 popup Perl 扩展挂起问题
rxvt-unicode-sixel.patch
DEC Sixel 支持
通过 DEC 设备控制字符串 (DCS) Sixel P…q 转义序列表达字符位图图像
例如 “ESC Pq ... ESC\
rxvt-unicode-truecolor.patch
24-bit-color.patch 相同
secondaryWheel.patch
在副屏幕中使用鼠标滚轮滚动
starttop.patch
注释掉 screen.C 的第 397 行 — 解决 #Wrong_shell_prompt_placement_after_upgrading_to_9.31 问题的方法之一


第三方 Perl 扩展
文件名,

链接

软件包 描述
keyboard-select urxvt-perls
使用键盘快捷键选择和复制文本
resize-font urxvt-resize-font-gitAUR
使用键盘快捷键调整字体大小;也支持小数间隔(如 0.5

配置

X 资源

Rxvt-unicode 通过命令行参数或 X 资源进行控制。命令行参数会覆盖资源设置并优先于资源设置。

资源的第一个组成部分是 (URxvt) 或应用程序(实例)名称。应用程序名称可以使用 urxvt(1) § name 命令行选项指定,默认设置为 urxvt — 一个二进制 basename(1)。对于给定的实例,使用应用程序名称定义的资源会覆盖并优先于使用类名称定义的资源。

注意: Rxvt-unicode 资源命名方案不像 xterm 那样大量使用嵌套组件。urxvt(7) § Terminal Configuration 部分提供了松散绑定(星号,*)的有效示例用法。

请参阅 urxvt(1)urxvt(7) 以了解可用的设置、资源和值。此外,urxvt --help 会将所有可用的资源打印到标准错误输出。 每个资源都可以用作长命令行选项。

使用 xrdb(1) (xorg-xrdb) 来应用配置,如下所示:xrdb ~/.Xresources。根据您的环境,您可能需要使用 -merge 选项。新配置仅应用于新实例,而不应用于现有实例。

字体

当字体或单个字符不存在时,Rxvt-unicode 不使用 fontconfig 库进行字体替换。也就是说,您必须在相应的资源中(设置 fontsets)提供您感兴趣的所有字形的所有字体名称。

使用非等宽字体(如 Nerd FontNerd Font Mono)的能力很大程度上取决于您的环境(参见 #Spacing)和字体本身。

如果字形无法显示或找不到,则会用一个空方块代替。

Rxvt-unicode 同时支持 X FreeType (Xft) 和 X Logical Font Description (XLFD),urclock(1) 仅支持 XLFD

永久

~/.Xresources
URxvt.font:           xft:Input Mono:size=13:style=Regular,\
                      xft:Font Awesome 6 Free:style=Solid
URxvt.boldFont:       xft:Input Mono:size=13:style=Medium
URxvt.italicFont:     xft:Input Mono:size=13:style=Italic
URxvt.boldItalicFont: xft:Input Mono:size=13:style=Medium Italic
注意: 如果 Xft 字体名称中存在连字符 (-),则必须使用反斜杠 (\) 转义两次。这与 urxvt -fn 选项的用法以及 fc-list 返回的结果不同,在 fc-list 中,反斜杠仅出现一次。

非永久

您可以使用 Xterm 操作系统命令 (OSC) 更改当前实例的字体。使用数字 (Ps) 参数 710–713,后跟相应的文本 (Pt) 参数,如下所示(另请参阅 urxvt(1) § CHANGING FONTS

$ printf '\x1b\x5d710;%s\x1b\x5c' "xft:Terminus:pixelsize=22"
$ printf      '\e]711;%s\a'       "xft:Terminus:pixelsize=22:bold"

要使用键盘快捷键更改当前实例的字体大小,请使用 resize-font Perl 扩展。

间距

您可能需要使用 letterSpace 调整字符之间的水平距离,和/或使用 urxvt(1) § lineSpace: 调整行之间的垂直距离。这些需求取决于

  • 使用渲染改进补丁,如 enable-wide-glyphs.patch、improve-font-rendering.patch、font-width-fix.patchline-spacing-fix.patch,
  • 使用字形与英文字母差异过大的语言,如阿拉伯语、中文、希伯来语、日语或韩语,
  • 您的字体及其大小。

回滚缓冲区

提示: 默认情况下,鼠标滚轮滚动五行,按住 Shift 键时滚动一行。如果您想更改这些数字 — 您必须编辑 源代码

接收新输出时的行为

默认情况下,当 shell 输出出现时,回滚视图将自动跳转到缓冲区的底部以显示新输出。

如果您想在 伪终端 仍在接收新行时查看以前的输出(例如,编译器消息),并在按下按键时跳转到回滚缓冲区的底部,请使用以下选项

URxvt.scrollTtyOutput:   False
URxvt.scrollWithBuffer:  True
URxvt.scrollTtyKeypress: True

副屏幕

当您在副屏幕中滚动分页器时(例如,使用 less(1) 而不使用 -X/--no-init 选项),禁用副屏幕滚动可能是一个好主意,以便能够在分页器本身中滚动,而不是终端的缓冲区。

这是 Konsole基于 VTE 的 终端模拟器中的默认且不可更改的行为。要在 urxvt 中实现相同的行为,请使用以下配置

URxvt.secondaryScroll: False

上述配置按预期工作,除非在使用鼠标滚轮滚动时。当您在副屏幕中使用鼠标滚轮滚动分页器,并且回滚缓冲区中已经存在某些内容时 — 回滚缓冲区将由鼠标滚轮滚动,而不是分页器本身。

为了解决这个问题,有必要在 urxvt 中引入 一个新选项。使用诸如 rxvt-unicode-better-wheel-scrolling-unicode3AURrxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR 之类的软件包,或者应用 secondaryWheel.patch。安装后,设置以下配置

URxvt.secondaryWheel: True
注意: 避免将此选项与 urxvt-vtwheelAUR perl 扩展一起使用,因为它会冲突。

清除

重置为初始状态 (RIS) ESC 06/03 控制功能 会清空屏幕回滚缓冲区。您可以将其绑定到您想要的按键,如下所示

URxvt.keysym.Meta-Control-l: command:\033c

清除屏幕时保留屏幕内容

urxvt 中,按 Control-L 会清空屏幕,并且屏幕内容会被丢弃 — 您稍后无法在回滚缓冲区中看到它。对于有 Konsole基于 VTE 的 终端模拟器使用经验的用户来说,这种行为可能看起来有争议,在这些模拟器中,Control-L 会将屏幕内容保留在回滚缓冲区中。

要在 urxvt 中实现这种类似 VTE 的行为,您可以使用适当的软件包,如 rxvt-unicode-better-wheel-scrolling-unicode3AURrxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR,或者在您喜欢的构建版本中应用 clear.patch

滚动条

滚动条的外观和感觉由十几个资源控制。请查看 urxvt(1) § scrollstyle:urxvt(1) § scrollColor: 资源周围的手册,并参阅 urxvt(1) § THE SCROLLBAR 部分。

您还可以使用 DEC 私有模式 urxvt(7) § Escape Sequences (Pm = 30) 动态更改当前实例的滚动条可见性。例如,您可以将滚动条可见性切换绑定到键盘快捷键

URxvt.keysym.Meta-Control-s: command:\033[?30t

保存到文件

Ctrl-PrintShift-Print 将回滚缓冲区内容保存到文件,配置如下

URxvt.print-pipe: cat > ~/Downloads/URxvt_$(date '+%Y-%m-%d_%H:%M:%S').txt
  • Print 通常是 Print Screen 键。
  • 单独按 Print 键会保存屏幕,但不包括回滚缓冲区。

剪贴板

对于没有 xterm 背景的人来说,Rxvt-unicode 剪贴板行为可能看起来有争议。有关详细信息,请参阅 urxvt(1) § THE SELECTION: SELECTING AND PASTING TEXT

您可以使用 urxvt-eval(1) 和按键绑定来设置复制到 CLIPBOARD 和从 CLIPBOARD 粘贴

URxvt.keysym.Control-Insert:    eval:selection_to_clipboard
URxvt.keysym.Shift-Insert:      eval:paste_clipboard

urxvt-selection-to-clipboard(1) 可用于将 CLIPBOARDPRIMARY selection 同步。

当检测到包含控制字符(如换行符)的粘贴时,urxvt-confirm-paste(1) 扩展会显示一个确认对话框。它是 default 集的一部分,并且会自动加载,有关更多信息,请参阅 urxvt(1) § perl-ext-common#Disabling Perl extensions

Perl 扩展

我们可以通过包含以下行来启用 Perl 扩展

URxvt.perl-ext-common: extension_name_1,extension_name_2,...
注意: 扩展名称之间不应有任何空格。

另请参阅

可点击的 URL

您可以使用 matcher 扩展使终端中的 URL 可点击。例如,要使用鼠标左键在默认 Web 浏览器中打开链接,请将以下内容添加到 .Xresources

URxvt.perl-ext-common: default,matcher
URxvt.url-launcher: /usr/bin/xdg-open
URxvt.matcher.button: 1

自 rxvt-unicode 9.14 起,也可以使用 matcher 通过键盘打开和列出最近的(目前限制为 10 个)URL

此文章或章节已过时。

原因: perl:STRING *DEPRECATED*,请参阅 urxvt(1) § perl:STRING。(在 Talk:Rxvt-unicode 中讨论)
URxvt.keysym.C-Delete: perl:matcher:last
URxvt.keysym.M-Delete: perl:matcher:list

匹配的链接可以使用选择的前景色或背景色着色(请参阅 urxvt(1) § COLOURS AND GRAPHICS),例如蓝色

URxvt.matcher.rend.0: Uline Bold fg4

或者,使用 colorUL 来指定 #RRGGBB 颜色。但这将为所有带下划线的文本着色,而不仅仅是链接匹配项

URxvt.colorUL: #4682B4

简单标签页

要向 urxvt 添加标签页,请将以下内容添加到您的 ~/.Xresources

URxvt.perl-ext-common: ...,tabbed,...

使用以下方式控制标签页

描述
Shift+向下 新标签页
Shift+向左 转到左侧标签页
Shift+向右 转到右侧标签页
Ctrl+向左 将标签页向左移动
Ctrl+向右 将标签页向右移动
Ctrl+d 关闭标签页

您可以使用以下配置更改标签页的颜色

URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 3
URxvt.tabbed.tab-bg: 0

为了使标签栏透明,请将其值设置为 -1

URxvt.tabbed.tabbar-bg: -1

如果您需要重命名标签页,您可能需要安装 urxvt-tabbedexAUR

全屏

您可以安装 AUR 软件包 urxvt-fullscreenAUR,然后设置一个按键绑定以将 urxvt 设置为全屏。

此文章或章节已过时。

原因: perl:STRING *DEPRECATED*,请参阅 urxvt(1) § perl:STRING。(在 Talk:Rxvt-unicode 中讨论)
URxvt.perl-ext-common:  ...,fullscreen,...
URxvt.keysym.F11:       perl:fullscreen:switch

禁用 Perl 扩展

如果您不使用 Perl 扩展功能,则可以通过完全禁用 Perl 扩展来提高安全性和速度

URxvt.perl-ext-common:

要选择性地禁用扩展,您需要在扩展名称前加上连字符

Urxvt.perl-ext-common: default,-extension

或者,您可以显式列出您需要的每个扩展,从而有效地禁用所有其他扩展

URxvt.perl-ext-common: eval,searchable-scrollback,resize-font

故障排除

升级到 9.31 后 Shell 提示符位置错误

某些窗口管理器可能会遇到提示符出现在窗口中间的问题。这可能发生在启动和/或窗口大小调整时。根本原因是 lines-rewrap 算法的更新。

要解决此问题,您应该应用 lines-rewrap.patch

您也可以尝试调整 geometry,但结果取决于环境和工作流程,没有“一刀切”的解决方案

  • 设置真实 geometry:URxvt.geometry: 174x47
  • 设置不切实际的 geometry:URxvt.geometry: 400x400
  • 将行数设置为 -1URxvt.geometry: 80x-1
这可能会导致无法使用某些命令行选项,例如 urxvt --borderColor black -e mc 有时会打开终端一小段时间,shell 提示符位于第一行的中间,而不是运行 Midnight Commander

最终的解决方案是恢复源代码中的更改

远程主机

如果您正在登录远程主机,则在 rxvt-unicode 下运行文本模式程序时可能会遇到问题。这可以通过在远程主机上安装 rxvt-unicode-terminfo 或将本地计算机上的 /usr/share/terminfo/r/rxvt-unicode 复制到主机上的 ~/.terminfo/r/rxvt-unicode 来解决;rxvt-unicode-256color 也是如此。

某些远程系统不会自动更改标题,除非您指定 TERM=xterm。要解决此问题,请在远程计算机上的 .bashrc 中添加以下行

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"'

您可以尝试的另一个修复方法是将以下内容放入您的 .Xresources

URxvt.termName: rxvt

这在连接到没有管理员权限的远程主机以安装 terminfo 定义以用于 rxvt-unicode 时很有用。

将 rxvt-unicode 用作 gmrun 终端

与其他一些终端不同,urxvt 希望 -e 的参数单独给出,而不是用引号组合在一起。这给 gmrun 带来了麻烦,gmrun 假设相反的行为。可以通过在 .gmrunrc 中 gmrun 的 Terminal 变量前面放置一个 eval 来解决这个问题

Terminal = eval urxvt
TermExec = ${Terminal} -e

gmrun 使用 /bin/sh 执行命令,因此 eval 在这里是可以理解的。eval 的副作用是“分解” -e 的参数,就像 Bash 中的 $@ 一样,使命令对 urxvt 可理解。

我的数字键盘行为异常并产生不同的输出?(例如在 vim 中)

此文章或章节正在考虑删除。

原因: 我想删除本节:(a) 它已经超过 10 年了,代码已经发生了很多变化。(b) 也许它仅与 Debian GNU/Linux 相关(请参阅第一句话)。您在当前的 Arch 版本中遇到此问题吗?(c) xmodmap 已弃用,并且经常引起问题,特别是当它与 setxkbmap 结合使用时,如果该问题仍然相关 - 最好建议学习 xkb。(在 Talk:Rxvt-unicode 中讨论)

某些 Debian GNU/Linux 用户似乎遇到了这个问题,尽管到目前为止还没有报告具体的细节。可能是由于错误的 TERM 设置引起的,尽管关于这是否以及如何发生的细节尚不清楚,因为 TERM=rxvt 应该提供兼容的键盘映射。

但是,使用 xmodmap 程序 (xorg-xmodmap),您可以重新映射您的数字键盘按键。

1. 使用 xev 程序检查您的数字键盘(小键盘)生成的键码。

  • 启动 xev 程序
  • 按下您的数字键盘按键,并在 xev 的输出中查找 ... keycode xxx ...。例如,某些键盘上的数字键盘 1 也是 “End” 键,其 “keycode 87”。

2. 创建或修改您的 xmodmap 文件,通常是 ~/.Xmodmap,内容代表您的键码。

带有数字键盘键码的 xmodmap 文件示例

keycode 63 = KP_Multiply
keycode 79 = Home KP_7
keycode 80 = Up KP_8
keycode 81 = Prior KP_9
keycode 82 = KP_Subtract
keycode 83 = Left KP_4
keycode 84 = KP_5
keycode 85 = Right KP_6
keycode 86 = KP_Add
keycode 87 = End KP_1
keycode 88 = Down KP_2
keycode 89 = Next KP_3
keycode 90 = Insert KP_0
keycode 91 = Delete KP_Decimal
keycode 112 = Prior
keycode 117 = Next

3. 在 X 会话启动时加载您的 xmodmap 文件。

例如,在 ~/.xinitrc 文件中添加

...
xmodmap ~/.Xmodmap
...

快捷键组合不起作用

请参阅 Get Alt key to work in terminal

非常长的行导致速度减慢

matcher 插件可能是罪魁祸首。每次行更新时,它都必须将正则表达式与行匹配,如果您有一个很大的 saveLines 值,这可能会通过允许非常大的最大行长度来加剧问题。

有一些简单的解决方法

  • 减少 saveLines
  • 禁用 matcher 插件

如果以上都不是可接受的选项,您可以妥协,方法是禁用超过特定截止点的 URL 匹配

  1. /usr/lib/urxvt/perl/matcher 复制到 ~/.urxvt/ext/(必要时创建目录)
  2. 编辑 ~/.urxvt/ext/matcher,并在 on_line_update 子程序中找到 my ($self, $row) = @_; 行。它应该是第 270 行。
  3. 在该行之后,插入行 return () if $row < -100;。这会禁用终端顶部后 100 行以上的任何行的 URL 匹配。

Midnight Commander 中没有粗体文本

如果在默认 TERM 设置的 rxvt-unicode 下启动,则在许多其他终端中通常为粗体的文本将不会显示为粗体。问题的根源在于 xterm 将明亮的文本颜色与粗体属性结合在一起(因此,明亮的颜色在 xterm 中总是显示为粗体)。

rxvt-unicode 没有此限制,S-LangMidnight Commander 默认用于文本显示的库)遵守此限制。由于 S-Lang 可以将粗体属性与 rxvt-unicode 上的明亮颜色分离,因此 Midnight Commander 需要显式指定适当的粗体属性,但它没有这样做

解决方案是将 Midnight Commander 配置为显式使用所需的粗体颜色,例如,通过编辑默认皮肤,如下所示

$ mkdir ~/.local/share/mc/skins
$ cp /usr/share/mc/skins/default.ini ~/.local/share/mc/skins/
$ sed -i -E 's/^(.* = (gray|brightred|brightgreen|yellow|brightblue|brightmagenta|brightcyan|white);.*)$/\0;bold/' ~/.local/share/mc/skins/default.ini

上述操作将创建默认皮肤的副本,但所有明亮的颜色都添加了显式的粗体属性。

另请参阅