web-dev-qa-db-ja.com

Urxvt:オンザフライで背景色を変更

その場でrxvt-unicodeセッションの背景色を変更する方法はありますか?と同じように Ctrl キー?

私はたくさんのUrxvtウィンドウを持っていますが、それらを区別できるようにいくつかを動的に色付けしたいと思います。しかし、繰り返しますが、その場で...

12
dman

urxvt 2.6 2004年の2.6では、xtermの動的色機能のサポートが追加されました。 XTerm制御シーケンス では、これはOSC 11です。OSC 10はデフォルトのテキストの色を設定します。変更ログは変更の一部について言及しました:

_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)をプレフィックスとして付加することで、任意のオクテットをエスケープできます。

この簡単な例では、前景色(テキスト)と背景defaultの両方を設定します。

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

xtermと同様に、これらのdefault色は、一時的に「ANSI」色で上書きできます。

この機能は、xtermリソースを使用してdynamicColorsで無効にできます。 xtermとは異なり、urxvtには機能のリソース設定がありません。

VTEはこの機能も実装しており、同様にドキュメント化していません。 urxvt少なくともstartedrxvtのドキュメント。 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).
_

参考文献:

16
Thomas Dickey

以下を~/.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の前景色を使用しました。 Thomas Dickey で引用されたUrxvtの定義は、代わりに49 and 39を使用することを示しています(これはテストして動作します)。

7
erik

私の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

2
coding_drunk

動的な色は、動的に色を切り替える例です。 これらの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"

2
rektide

Xリソースと動的カラーを使用して、この機能をrxvt-unicode(シンプルなコンテキストメニュー付き)に追加する rxvt-theme という拡張機能を作成しました。

1
pera