Urxvt:动态更改背景颜色


12

是否可以即时更改rxvt-unicode会话的背景颜色?喜欢带Ctrl钥匙吗?

我有一堆Urxvt窗口,我想为它们动态上色,以帮助区分它们。但是,我的意思是即时...


1
不,您可以使用白蚁,但是…
jasonwryan

Answers:


16

urxvt2004年的2.6版增加了对xterm 动态色彩功能的支持。在的XTerm控制序列,这是OSC11 OSC10集的默认文本颜色。更改日志提到了更改的一部分:

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 "?".

但是源代码照常讲述了这个故事:

 /*
  * 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 
  */

该手册未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'

像一样xterm,这些默认颜色可以被“ ANSI”颜色临时覆盖。

可以在xterm使用dynamicColors资源时禁用该功能。与不同xtermurxvt该功能没有资源设置。

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);
}

该代码可以追溯到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).

进一步阅读:


我还没有尝试过,但这真是令人印象深刻,很难找到,我会让它接受!我希望它可以在URXVT中使用。
dman

1
昨晚我在Debian 7上使用urxvt 9.15对其进行了测试(以确保我正确地阅读了源代码)。
Thomas Dickey

我只是想跟进此事,并说它像梦一样运作。再次感谢您,因为此信息很难找到。
dman

7

我将以下内容添加到~/.Xresources文件中,然后按Ctrl78或快速更改为颜色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

如果要同时设置前景色和背景色,只需串联命令(某些颜色由名称定义):

! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007

您可以使用以下简单echo命令测试颜色:

echo -e '\033]11;#ff0000\007\033]10;yellow\007'   # changes to red background and yellow foreground

注意

我将代码11用作背景色,并将代码10用作前景色托马斯·迪基Thomas Dickey)引用的Urxvt定义表明使用49和39代替(我测试了并且也可以使用)。


2

动态颜色是动态切换颜色的示例。首先使用这两个.Xresources:

xterm*dynamicColors: true urxvt*dynamicColors: on

尽管有领先优势,但我还没有在urxvt上进行变色!该技术与xterm一起使用效果很好。Dynamic Colors称这些改变终端的“ OSC转义序列”,使背景变成红色的示例是:echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"


对我来说,如果我在命令行中将其背景颜色更改为红色:echo -e "\033]11;#ff0000\007"
erik

2

我在Xresources中有以下内容用于快速切换(是的,它基于动态颜色)。

URxvt*keysym.Control-Shift-F10: command:\033]11;#2c2c2c\007\033]10;#dcdcdc\007\033]12;#dcdcdc\007\033]4;0;#3f3f3f\007\033]4;1;#705050\007\033]4;2;#60b48a\007\033]4;3;#dfaf8f\007\033]4;4;#9ab8d7\007\033]4;5;#dc8cc3\007\033]4;6;#8cd0d3\007\033]4;7;#dcdcdc\007\033]4;8;#709080\007\033]4;9;#dca3a3\007\033]4;10;#72d5a3\007\033]4;11;#f0dfaf\007\033]4;12;#94bff3\007\033]4;13;#ec93d3\007\033]4;14;#93e0e3\007\033]4;15;#ffffff\007
URxvt*keysym.Control-Shift-F11: command:\033]11;#000000\007\033]10;#ffffff\007\033]12;#ffffff\007\033]4;0;#000000\007\033]4;1;#cc0000\007\033]4;2;#4e9a06\007\033]4;3;#c4a000\007\033]4;4;#3465a4\007\033]4;5;#75507b\007\033]4;6;#06989a\007\033]4;7;#d3d7cf\007\033]4;8;#555753\007\033]4;9;#ef2929\007\033]4;10;#8ae234\007\033]4;11;#fce94f\007\033]4;12;#729fcf\007\033]4;13;#ad7fa8\007\033]4;14;#34e2e2\007\033]4;15;#eeeeec\007
URxvt*keysym.Control-Shift-F12: command:\033]11;#000000\007\033]10;#a9a9a9\007\033]12;#a9a9a9\007\033]4;0;#000000\007\033]4;1;#cc0000\007\033]4;2;#00cc00\007\033]4;3;#cccc00\007\033]4;4;#0000cc\007\033]4;5;#cc00cc\007\033]4;6;#00cccc\007\033]4;7;#cccccc\007\033]4;8;#555555\007\033]4;9;#ff0000\007\033]4;10;#00ff00\007\033]4;11;#ffff00\007\033]4;12;#0000ff\007\033]4;13;#ff00ff\007\033]4;14;#00ffff\007\033]4;15;#ffffff\007

您还可以在这里寻找另一种方法:https : //github.com/sos4nt/dynamic-colors


1

我编写了一个名为urxvt-theme的扩展,使用X资源和动态颜色将此功能添加到rxvt-unicode(具有简单的上下文菜单)中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.