是否可以即时更改 rxvt-unicode 会话的背景颜色?喜欢用Ctrl钥匙?
我有一堆 Urxvt 窗口,我想动态着色一些以帮助我区分它们。但同样,我的意思是在飞行中......
Tho*_*key 19
urxvt
2004 年的 2.6 添加了对 xterm 的动态颜色功能的支持。在的XTerm控制序列,这是OSC
11 OSC
10集的默认文本颜色。变更日志中提到了部分变更:
2.6 Fri Apr 2 03:24:10 CEST 2004
- minor doc corrections.
- WARNING: changed menu sequence from ESC ] 10 to ESC ] 703 to
avoid clashes with xterm.
- changed OSC701/OSC702 sequence to return standard escaped reports.
- xterm-compat: make set window colour and other requests report
window colour when arg is "?".
Run Code Online (Sandbox Code Playgroud)
但是源代码像往常一样讲述了这个故事:
/*
* XTerm escape sequences: ESC ] Ps;Pt (ST|BEL)
* 0 = change iconName/title
* 1 = change iconName
* 2 = change title
* 4 = change color
+ * 10 = change fg color
+ * 11 = change bg color
* 12 = change text color
* 13 = change mouse foreground color
* 17 = change highlight character colour
@@ -2949,20 +3236,21 @@
* 50 = change font
*
* rxvt extensions:
- * 10 = menu (may change in future)
* 20 = bg pixmap
* 39 = change default fg color
* 49 = change default bg color
* 55 = dump scrollback buffer and all of screen
* 701 = change locale
* 702 = find font
+ * 703 = menu
*/
Run Code Online (Sandbox Code Playgroud)
该手册rxvt(7)
没有提供有用的信息:
XTerm 操作系统命令 "ESC ] Ps;Pt ST" 设置 XTerm 参数。8 位 ST:0x9c,7 位 ST 序列:ESC \ (0x1b, 0x5c),向后兼容的终结符 BEL (0x07) 也是 公认。任何八位字节都可以通过在它前面加上 SYN (0x16, ^V)。
这个简单的例子设置了前景(文本)和背景默认颜色:
#!/bin/sh
printf '\033]10;red\007'
printf '\033]11;green\007'
Run Code Online (Sandbox Code Playgroud)
例如xterm
,这些默认颜色可以被“ANSI”颜色临时覆盖。
可以在xterm
使用dynamicColors
资源时禁用该功能。与 不同xterm
,urxvt
没有该功能的资源设置。
VTE 也实现了该功能,同样没有记录它。 urxvt
至少开始从文件rxvt
。对于 VTE,您必须阅读源代码。中的相关功能vteseq.cc
如下所示:
/* Change the default background cursor, BEL terminated */
static void
vte_sequence_handler_change_background_color_bel (VteTerminalPrivate *that, GValueArray *params)
{
vte_sequence_handler_change_special_color_internal (that, params,
VTE_DEFAULT_BG, -1, 11, BEL);
}
/* Change the default background cursor, ST terminated */
static void
vte_sequence_handler_change_background_color_st (VteTerminalPrivate *that, GValueArray *params)
{
vte_sequence_handler_change_special_color_internal (that, params,
VTE_DEFAULT_BG, -1, 11, ST);
}
Run Code Online (Sandbox Code Playgroud)
该代码可以追溯到 2003 年的某个时候(当时它是用 C 编写的):
commit f39e281529827f68fd0e9bba41785d66a21efc1c
Author: Nalin Dahyabhai <nalin@src.gnome.org>
Date: Wed Jan 22 21:35:22 2003 +0000
accept OSC{number};{string}ST as set-text-parameters, per XTerm docs (part
* src/caps.c: accept OSC{number};{string}ST as set-text-parameters, per XTerm
docs (part of #104154).
* src/keymap.c: revert change to prepend "1;" to keys with modifiers (#104139).
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
我将以下内容添加到我的~/.Xresources
文件中,以即时更改颜色Ctrl和7或8或9。
! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007
! change to light background
URxvt.keysym.C-8: command:\033]11;#ffffff\007
! change to dark gray background
URxvt.keysym.C-9: command:\033]11;#777777\007
Run Code Online (Sandbox Code Playgroud)
如果你想同时设置前景色和背景色,只需连接命令(有些颜色是由名称定义的):
! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007
Run Code Online (Sandbox Code Playgroud)
您可以使用一个简单的echo
命令来测试您的颜色,如下所示:
echo -e '\033]11;#ff0000\007\033]10;yellow\007' # changes to red background and yellow foreground
Run Code Online (Sandbox Code Playgroud)
我使用代码11 表示背景颜色,代码10 表示前景色。Thomas Dickey引用的 Urxvt 定义表明使用49 和 39(我测试过并且也可以使用)。
归档时间: |
|
查看次数: |
17344 次 |
最近记录: |