Urxvt: เปลี่ยนสีพื้นหลังได้ทันที


12

มีการเปลี่ยนแปลงสีพื้นหลังของเซสชัน rxvt-unicode หรือไม่? เช่นเดียวกับCtrlคีย์?

ฉันมีหน้าต่าง Urxvt จำนวนหนึ่งและฉันต้องการให้สีบางส่วนแบบไดนามิกเพื่อช่วยแยกแยะความแตกต่าง แต่อีกครั้งฉันหมายถึงได้ทันที ...


1
ไม่คุณสามารถใช้ปลวกได้แม้ว่า ...
jasonwryan

คำตอบ:


16

urxvt2.6 ในปี 2004 เพิ่มการรองรับคุณสมบัติสีแบบไดนามิกของ xterm ในXTerm Control Sequencesนี่คือOSC11 OSC10 ตั้งค่าสีข้อความเริ่มต้น changelog กล่าวถึงส่วนหนึ่งของการเปลี่ยนแปลง:

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-bit ST: 0x9c, ลำดับ ST 7-bit: ESC \
           (0x1b, 0x5c), เทอร์มินัลที่เข้ากันได้ย้อนหลัง BEL (0x07) ก็เป็นเช่นกัน
           ได้รับการยอมรับ ออคเต็ตใด ๆ สามารถหนีโดยนำหน้าด้วย SYN (0x16,
           ^ V)

นี้ตัวอย่างง่ายๆชุดทั้งเบื้องหน้า (ข้อความ) และพื้นหลังเริ่มต้นสี:

#!/bin/sh
printf '\033]10;red\007'
printf '\033]11;green\007'

เช่นเดียวกับสีเริ่มต้น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);
}

รหัสนั้นย้อนกลับไปในช่วงปี 2546 (เมื่อเขียนเป็น 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
ฉันทดสอบเมื่อคืนนี้ด้วย urxvt 9.15 ใน Debian 7 ของฉัน (เพื่อให้แน่ใจว่าฉันอ่านแหล่งข้อมูลถูกต้อง)
Thomas Dickey

ฉันแค่อยากติดตามเรื่องนี้และบอกว่ามันใช้งานได้เหมือนความฝัน ขอขอบคุณอีกครั้งเนื่องจากข้อมูลนี้หายาก
dman

7

ฉันจะเพิ่มต่อไปนี้เพื่อฉัน~/.Xresourcesไฟล์การเปลี่ยนแปลงสีได้ทันทีกดCtrlและ7หรือหรือ89

! 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 สำหรับสีพื้นหน้า คำจำกัดความของ Urxvt อ้างโดยThomas Dickeyระบุว่าใช้49 และ 39แทน (ซึ่งฉันทดสอบและใช้งานได้)


2

สีไดนามิกเป็นตัวอย่างของการสลับสีแบบไดนามิก มันเริ่มต้นด้วยการใช้. Xresources สองรายการนี้:

xterm*dynamicColors: true urxvt*dynamicColors: on

แม้จะเป็นผู้นำฉันยังไม่ได้เปลี่ยนสีกับการทำงานกับ urxvt! เทคนิคนี้ใช้งานได้ดีกับ xterm สีแบบไดนามิกเรียก "ลำดับการหลบหนีของ 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ที่เพิ่มฟังก์ชันนี้ให้กับ rxvt-unicode (พร้อมเมนูบริบทอย่างง่าย) โดยใช้ทรัพยากร X และสีแบบไดนามิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.