Colors

Urxvt:動態更改背景顏色

  • April 6, 2019

是否可以即時更改 rxvt-unicode 會話的背景顏色?喜歡用Ctrl鑰匙嗎?

我有一堆 Urxvt 視窗,我想動態著色一些以幫助我區分它們。但是,我的意思是在飛行中…

urxvt2004 年的 2.6 增加了對 xterm 的動態顏色功能的支持。在XTerm Control Sequences中,這是OSC11。10 OSC設置預設文本顏色。變更日誌提到了部分變更:

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,
^ 五)。

這個簡單的範例設置了前景(文本)和背景預設顏色:

#!/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).

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/232881