rxvt-unicode/技巧和提示

出自 ArchWiki

在 Openbox 中改进类似 Kuake 的行为

这最初是由 Xyne 在论坛上发布的 [1],它依赖于 xdotool 软件包。

小脚本

将来自 urxvtc 手册页的这个小脚本保存到您系统上的某个位置,命名为 urxvtc (例如,在 ~/.config/openbox/ 中)

#!/bin/sh

urxvtc "$@"
if [ $? -eq 2 ]; then
   urxvtd -q -o -f
   urxvtc "$@"
fi

并将这个另存为 urxvtq

#!/bin/bash

wid=$(xdotool search --classname urxvtq | head -1)
if [ -z "$wid" ]; then
  ''/path/to/urxvtc'' -name urxvtq -geometry 80x28
  wid=$(xdotool search --classname urxvtq | head -1)
  xdotool windowfocus "$wid"
  xdotool key Control_L+l
else
  if [ -z "$(xdotool search --onlyvisible --classname urxvtq 2>/dev/null)" ]; then
    xdotool windowmap "$wid"
    xdotool windowfocus "$wid"
  else
    xdotool windowunmap "$wid"
  fi
fi

使这两个文件都可执行

确保您将 /path/to/urxvtc 更改为您上面保存的 urxvtc 小脚本的实际路径。我们将使用 urxvtc 来启动 urxvt 的常规实例和类似 kuake 的实例。

带有标签页的 urxvtq

要激活标签页支持,您可以替换 urxvtq 的第五行

/path/to/urxvtc -name urxvtq -geometry 80x28

/path/to/urxvtc -name urxvtq -pe tabbed -geometry 80x28

或替换您的 ~/.Xresources 文件中的这一行

URxvt.perl-ext-common: default,matcher

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

标签页控制

按键 描述
Shift+左 切换到当前标签页左侧的标签页
Shift+右 切换到当前标签页右侧的标签页
Shift+下 创建新标签页

您也可以使用鼠标通过单击所需的标签页来切换标签页,并通过单击 [NEW] 创建新标签页。

要关闭标签页,只需像正常关闭终端一样输入 exit 即可。

Openbox 配置

现在将以下行添加到 ~/.config/openbox/rc.xml<applications> 部分

<application name="urxvtq">
   <decor>no</decor>
   <position force="yes">
     <x>center</x>
     <y>0</y>
   </position>
   <desktop>all</desktop>
   <layer>above</layer>
   <skip_pager>yes</skip_pager>
   <skip_taskbar>yes</skip_taskbar>
   <maximized>Horizontal</maximized>
</application>

并将这些行添加到 <keyboard> 部分

<keybind key="W-t">
  <action name="Execute">
    <command>/path/to/urxvtc</command>
  </action>
</keybind>
<keybind key="W-grave">
  <action name="Execute">
    <execute>/path/to/urxvtq</execute>
  </action>
</keybind>

在这里您也需要更改 /path/to/* 行以指向您上面保存的脚本。保存文件,然后重新配置 Openbox。您现在应该能够使用 Super+T 启动 urxvt 的常规实例,并使用 Super+` (重音符键,也称为反引号)切换类似 kuake 的控制台。

进一步配置

此配置优于 urxvt kuake Perl 脚本的优势在于 Openbox 提供了更多的按键绑定选项,例如修饰键。kuake 脚本劫持了整个物理按键,而忽略了任何修饰符组合。查看 Openbox 绑定文档 以获取全部可能性。

Openbox 应用程序特定设置 可用于进一步配置类似 kuake 的控制台的行为(例如,屏幕位置、图层等)。您可能需要更改 urxvtq 小脚本中的 “geometry” 参数以调整控制台的高度。

相关脚本

提升性能

  • 避免使用 Xft 字体。如果必须使用 Xft 字体,请在设置值后附加 :antialias=false[2]
  • 构建 rxvt-unicode 时禁用不必要的功能支持,特别是 --disable-xft--disable-unicode3[3]
  • 限制回滚缓冲区中 saveLines 的数量(选项 -sl)以减少内存使用。[4]
    • 使用 tmux 进行回滚缓冲区并将 saveLines 设置为 0
  • 禁用 perl
  • 考虑运行 urxvtd 作为守护进程,接受来自 urxvtc 客户端的连接。

守护进程-客户端

警告: 如果服务器崩溃,客户端中的所有进程都将终止。例如,xkill 和服务器重置/重启将杀死 urxvtd 实例,包括它打开的所有窗口。有关详细信息,请参阅 urxvtd(1)

Xinitrc

请参阅 urxvtd(1) 中的示例部分。这是首选选项。

systemd

注意: 当登录到通过 systemd 启动的 urxvt 客户端/守护进程设置时,普通用户无法执行 systemctl 电源命令(重启、关机等),因为客户端不属于会话。因此,不鼓励通过 systemd 启动 urxvt。

系统服务

/etc/systemd/system/urxvtd@.service
[Unit]
Description=RXVT-Unicode Daemon

[Service]
User=%i
ExecStart=/usr/bin/urxvtd -q -o

[Install]
WantedBy=multi-user.target

启动服务时传递用户名

urxvtd@username.service

对于 systemd/User 服务,将以下单元文件放置在 ~/.config/systemd/user

urxvtd.service
[Unit]
Description=Urxvt Terminal Daemon
Requires=urxvtd.socket

[Service]
ExecStart=/usr/bin/urxvtd -o -q
Environment=RXVT_SOCKET=%t/urxvtd-%H

[Install]
Also=urxvtd.socket
WantedBy=MyTarget.target
urxvtd.socket
[Unit]
Description=urxvt daemon (socket activation)
Documentation=man:urxvtd(1) man:urxvt(1)

[Socket]
ListenStream=%t/urxvtd-%H

[Install]
WantedBy=sockets.target

高级标签页管理

安装 urxvt-tabbedexAUR 软件包,然后将 tabbedex 值添加到 URxvt.perl-ext-common X 资源 中,位于您的 ~/.Xresources

URxvt.perl-ext-common: ...,tabbedex,...
注意: 如果您之前使用过 tabbed Perl 扩展,并且为 URxvt.perl-ext-common X 资源定义了 tabbed 值,请先删除 tabbed 值,以避免与 tabbedex 冲突。

默认情况下,tabbedex 禁用了“[NEW]”按钮(很少使用且只能用鼠标使用)。您可以通过将 new-button 设置为 true 来重新启用此功能。

URxvt.tabbedex.new-button: true

可以使用 Shift+上 命名标签页(Enter 确认,Escape 取消)。

当只有一个标签页存在时,标签栏将被隐藏。如果您希望始终显示标签栏

URxvt.tabbedex.autohide: false

要防止最后一个标签页关闭 Urxvt,请启用以下资源

URxvt.tabbedex.reopen-on-close: yes

要启动新标签页或循环浏览标签页,请使用以下用户命令:tabbedex:(new|next|prev)_tab。映射示例

URxvt.keysym.Control-t: perl:tabbedex:new_tab
URxvt.keysym.Control-Tab: perl:tabbedex:next_tab
URxvt.keysym.Control-Shift-Tab: perl:tabbedex:prev_tab

要定义您自己的按键绑定以重命名标签页或将标签页向右或向左移动,请使用以下命令:tabbedex:move_tab_(left|right)tabbedex:rename_tab。映射示例

URxvt.keysym.Control-Shift-Left: perl:tabbedex:move_tab_left
URxvt.keysym.Control-Shift-Right: perl:tabbedex:move_tab_right
URxvt.keysym.Control-Shift-R: perl:tabbedex:rename_tab
注意: 重新定义用于用户命令的按键不会禁用默认映射,您必须为此设置 X 资源 no-tabbedex-keys
URxvt.tabbedex.no-tabbedex-keys: true

透明度

真透明

要使用真透明,您需要使用支持合成的 窗口管理器 或单独的合成器。

从命令行

$ urxvt -depth 32 -bg rgba:3f00/3f00/3f00/dddd

使用配置文件

~/.Xresources
URxvt.depth: 32
URxvt.background: rgba:1111/1111/1111/dddd

~/.Xresources
URxvt.depth: 32
URxvt.background: [95]#000000

其中 ‘95’ 是不透明度级别(百分比),‘#000000’ 是背景颜色。

要使用颜色,例如 #302351,使用 rgba:rrrr/gggg/bbbb/aaaa 语法,它将是 rgba:3000/2300/5100/ee00。“ee00”(alpha 值)使其具有良好的透明度。

注意: 要使这些设置对所有形式的 URxvt 通用,您可以添加通配符。例如,URxvt.depth 将变为 URxvt*depth

原生透明

如果不需要真透明,或者合成占用系统资源过多,您可以通过以下方式使透明度工作

~/.Xresources
! Xresources file

URxvt*inheritPixmap: true
URxvt*transparent: true
! URxvt*shading: 0 to 99 darkens, 101 to 200 lightens
URxvt*shading: 110

使用上面示例的 URxvt*background 设置代替 URxvt*shading 也可以工作。

注意: 如果您设置了 URxvt.tintColor,请避免使用 shading。请改用不同的 tintColor

设置图标

注意: 由于一个错误报告 (FS#34862) 抱怨 rxvt-unicode 软件包依赖项过多,您现在必须安装 rxvt-unicode-pixbufAUR 才能使用 icon 选项。

默认情况下,URxvt 不具有任务栏图标。但是,可以通过将以下行添加到 ~/.Xresources 并指向所需的图标来轻松更改此设置

URxvt.iconFile:    /usr/share/icons/Clarity/scalable/apps/terminal.svg

将 urxvt 用作应用程序启动器

urxvt 可以用作应用程序启动器的轻量级替代方案,例如 gmrun。使用以下配置运行 urxvt 以模仿应用程序启动器的外观和行为,或将该命令分配给自定义别名

$ urxvt -geometry 80x3 -name 'bashrun' -e sh -c "/bin/bash -i -t"

Xterm 转义序列

rxvt-unicode 可以模仿 Xterm 转义序列。可以通过在 xterm 中运行 cat -v 找到任意按键组合的转义序列,然后在 urxvt 中使用 keysyms 进行绑定。

以单词移动绑定为例

~/.Xresources
!Xterm escapes, word by word movement
URxvt.keysym.Control-Left:    \033[1;5D
URxvt.keysym.Control-Right:    \033[1;5C

有关更多信息,请参阅 ascii(7)urxvt(1) 手册页的 keysym 部分。

双向支持

可以使用 bidi 扩展为希伯来语、波斯语或阿拉伯语等语言添加双向支持。

注意: 您使用的字体应支持您的语言。例如,要查看希伯来语,您应该使用像 terminus 这样的字体。

响铃命令

可以在终端响铃时执行 shell 命令。预先打包的 bell-command 扩展需要首先在 ~/.Xresources 文件中启用

 URxvt.perl-ext-common: ...,bell-command,...

以下示例将使用 ALSAaplay 命令播放 .wav 文件

 URxvt.bell-command: aplay /path/to/a/file.wav

以下示例将使用 libcanberracanberra-gtk-play 命令播放当前声音主题的响铃声音

 URxvt.bell-command: canberra-gtk-play -i bell

下一个设置将弹出视觉通知

 URxvt.bell-command: notify-send "rxvt-unicode: bell!"
注意: 仅设置 bell-command 选项不会使计算机中的蜂鸣器静音,要执行此操作,请查看 PC 扬声器 文章。

类似 Xterm 的颜色

urxvt 使用与 Xterm 相同的颜色,但有一个例外。将 URxvt.color12: rgb:5c/5c/ff 添加到 ~/.Xresources 以更改此设置。

以另一个窗口的当前工作目录启动 rxvt-unicode

有三种可能性可以 “从这里” 启动 rxvt-unicode:某种 shell 脚本、Perl 扩展xcwd

xcwd

安装 xcwdAURxcwd-gitAUR,请参阅 README 以获取更多信息。

i3 示例设置

~/.config/i3/config
bindsym $mod+KP_Enter exec urxvt --chdir "`xcwd`"
注意: xcwd 不适用于 urxvtd(1)/urxvtc(1) 环境。