Urxvt: 배경색을 동적으로 변경합니다.

Urxvt: 배경색을 동적으로 변경합니다.

rxvt-unicode 세션의 배경색을 동적으로 변경하는 방법이 있습니까? 열쇠를 사용하는 것처럼요 Ctrl?

나는 여러 개의 Urxvt 창을 가지고 있으며 그 중 일부를 구별하는 데 도움이 되도록 동적으로 색조를 지정하고 싶습니다. 하지만 다시 말하지만 즉석에서 말이에요…

답변1

urxvt2004년 2.6에는 xterm에 대한 지원이 추가되었습니다.다이나믹한 컬러특징. 존재하다XTerm 제어 순서, 즉 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,
           ^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년(C로 작성 당시)으로 거슬러 올라갑니다.

commit f39e281529827f68fd0e9bba41785d66a21efc1c
Author: Nalin Dahyabhai <[email protected]>
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).

추가 자료:

답변2

~/.Xresources및 또는 또는를 눌러 즉시 색상을 변경하기 위해 파일에 다음을 추가했습니다 .Ctrl789

! 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그와는 반대로(테스트해 보았는데 역시 작동합니다).

답변3

빠른 전환을 위해 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

답변4

다이나믹한 컬러동적으로 색상을 전환하는 예입니다. 먼저 다음 두 개의 .Xresource를 사용하십시오.

xterm*dynamicColors: true
urxvt*dynamicColors: on

리드에도 불구하고 아직 색상 변경에 urxvt를 사용하지 않았습니다! 이 기술은 xterm과 매우 잘 작동합니다. 동적 색상은 이러한 터미널 변경 "OSC 이스케이프 시퀀스"를 "OSC 이스케이프 시퀀스"라고 합니다. 배경을 빨간색으로 설정하는 예는 다음과 같습니다 echo -e "\033]11;#ff0000\007".

관련 정보