Urxvt: зміна кольору фону на льоту


12

Чи є можливість змінити колір тла сесії rxvt-unicode на льоту? Як з Ctrlключем?

У мене є купа вікон Urxvt, і я хотів би розфарбувати деякі динамічно, щоб допомогти мені їх розрізнити. Але знову ж таки, я маю на увазі на льоту ...


1
Ні. Можна з Терміті , хоча ...
Jasonwryan

Відповіді:


16

urxvt2.6 в 2004 році додала підтримку динамічної кольорової функції 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ресурсу. На відміну від цього 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);
}

Цей код датується колись у 2003 році (коли він був написаний на С):

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.
дман

1
Я тестував це вчора ввечері з urxvt 9.15 на моєму Debian 7 (щоб бути впевненим, що я читав джерело правильно).
Томас Дікі

Я просто хотів продовжити це і сказати, що це працює як мрія. Ще раз дякую, оскільки цю інформацію буде важко знайти.
дман

7

Я додав у свій ~/.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

Якщо ви хочете одночасно встановити колір переднього плану та фону, просто з'єднайте команди (деякі кольори визначаються іменами):

! 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, цитовані Томасом Дікі, вказують на використання 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-тема, яке додає цю функціональність до rxvt-unicode (з простим контекстним меню), використовуючи ресурси X та динамічні кольори.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.