Urxvt: ubah warna latar belakang dengan cepat

12

Apakah ada cara untuk mengubah warna latar belakang sesi rxvt-unicode dengan cepat? Suka dengan Ctrlkunci?

Saya memiliki banyak jendela Urxvt dan saya ingin mewarnai beberapa secara dinamis untuk membantu saya membedakannya. Tapi sekali lagi, maksud saya dengan cepat ...

dman
sumber
1
Tidak. Anda dapat dengan Rayap , meskipun ...
jasonwryan

Jawaban:

16

urxvt2.6 pada tahun 2004 menambahkan dukungan untuk fitur warna dinamis xterm . Dalam XTerm Control Sequences , ini adalah OSC11. OSC10 mengatur warna teks default. Changelog menyebutkan bagian dari perubahan:

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 "?".

tetapi kode sumber menceritakan kisahnya, seperti biasa:

 /*
  * 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 
  */

Manual rxvt(7)tidak memberikan informasi berguna:

   Perintah Sistem Operasi XTerm
       "ESC] Ps; Pt ST"
           Set Parameter XTerm. 8-bit ST: 0x9c, urutan 7-bit ST: ESC \
           (0x1b, 0x5c), BEL juga terminator kompatibel (0x07)
           diterima. oktet apa pun dapat lolos dengan awalan dengan SYN (0x16,
           ^ V).

Contoh sederhana ini menetapkan warna latar depan (teks) dan latar belakang standar :

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

Seperti xterm, warna - warna default ini dapat ditimpa sementara oleh warna "ANSI".

Fitur ini dapat dinonaktifkan dalam xtermmenggunakan dynamicColorssumber daya. Tidak seperti xterm, urxvttidak memiliki pengaturan sumber daya untuk fitur ini.

VTE juga mengimplementasikan fitur ini, dan juga tidak mendokumentasikannya. urxvtsetidaknya dimulai dengan dokumentasi dari rxvt. Untuk VTE, Anda harus membaca kode sumber. Fitur yang relevan dalam vteseq.ccterlihat seperti ini:

/* 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);
}

Kode itu tanggal kembali sekitar tahun 2003 (ketika ditulis dalam 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).

Bacaan lebih lanjut:

Thomas Dickey
sumber
Saya belum mencoba ini, tetapi ini sangat mengesankan dan sulit ditemukan, saya akan membuatnya diterima! Saya harap ini berfungsi di URXVT.
dman
1
Saya mengujinya tadi malam dengan urxvt 9,15 pada Debian 7 saya (untuk memastikan bahwa saya membaca sumbernya dengan benar).
Thomas Dickey
Saya hanya ingin menindaklanjuti ini dan mengatakan itu bekerja seperti mimpi. Terima kasih lagi karena info ini akan sulit ditemukan.
dman
7

Saya menambahkan yang berikut ke ~/.Xresourcesfile saya untuk mengubah warna dengan cepat dengan menekan Ctrldan 7atau 8atau 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

Jika Anda ingin mengatur warna foreground dan background pada saat yang bersamaan, cukup gabungkan perintah-perintahnya (beberapa warna ditentukan oleh nama):

! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007

Anda dapat menguji warna Anda dengan echoperintah sederhana , seperti ini:

echo -e '\033]11;#ff0000\007\033]10;yellow\007'   # changes to red background and yellow foreground

Perhatian

Saya menggunakan kode 11 untuk warna latar belakang dan kode 10 untuk warna latar depan . Definisi untuk Urxvt yang dikutip oleh Thomas Dickey mengindikasikan untuk menggunakan 49 dan 39 sebagai gantinya (yang saya uji dan juga berfungsi).

erik
sumber
2

Warna Dinamis adalah contoh perpindahan warna secara dinamis. Ini dimulai dengan menggunakan dua sumber ini.:

xterm*dynamicColors: true urxvt*dynamicColors: on

Meskipun memimpin, saya belum mendapatkan perubahan warna bekerja dengan urxvt sekalipun! Teknik ini bekerja sangat baik dengan xterm. Dynamic Colours menyebut "urutan pelarian OSC" ini yang mengubah terminal, contoh untuk membuat latar belakang merah adalah:echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"

rektide
sumber
Bagi saya warna latar belakang berubah menjadi merah jika saya menempatkan ini di baris perintah:echo -e "\033]11;#ff0000\007"
erik
2

Saya memiliki yang berikut ini di Xresources saya untuk peralihan cepat (ya, ini didasarkan pada warna dinamis).

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

Anda juga dapat melihat pendekatan lain di sini: https://github.com/sos4nt/dynamic-colors

coding_drunk
sumber
1

Saya menulis ekstensi bernama urxvt-theme yang menambahkan fungsionalitas ini ke rxvt-unicode (dengan menu konteks sederhana) menggunakan sumber daya X dan warna dinamis.

pera
sumber