Có cách nào để thay đổi màu nền của phiên rxvt-unicode khi đang bay không? Thích với Ctrlchìa khóa?
Tôi có một loạt các cửa sổ Urxvt và tôi muốn tô màu một cách linh hoạt để giúp tôi phân biệt chúng. Nhưng một lần nữa, ý tôi là trên đường bay ...
Có cách nào để thay đổi màu nền của phiên rxvt-unicode khi đang bay không? Thích với Ctrlchìa khóa?
Tôi có một loạt các cửa sổ Urxvt và tôi muốn tô màu một cách linh hoạt để giúp tôi phân biệt chúng. Nhưng một lần nữa, ý tôi là trên đường bay ...
Câu trả lời:
urxvt
2.6 vào năm 2004 đã thêm hỗ trợ cho tính năng màu động của xterm . Trong Trình tự điều khiển XTerm , đây là OSC
11. OSC
10 đặt màu văn bản mặc định. Thay đổi được đề cập đến một phần của sự thay đổi:
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 "?".
nhưng mã nguồn kể câu chuyện, như thường lệ:
/*
* 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
*/
Hướng dẫn rxvt(7)
không cung cấp thông tin hữu ích:
Các lệnh hệ điều hành của XTerm "ESC] Ps; Pt ST" Đặt tham số XTerm. ST 8 bit: 0x9c, chuỗi ST 7 bit: ESC \ (0x1b, 0x5c), bộ kết thúc tương thích ngược BEL (0x07) cũng Đã được chấp nhận. bất kỳ octet nào cũng có thể được thoát bằng cách thêm tiền tố vào nó bằng SYN (0x16, ^ V).
Ví dụ đơn giản này đặt cả tiền cảnh (văn bản) và nền mặc định màu sắc:
#!/bin/sh
printf '\033]10;red\007'
printf '\033]11;green\007'
Giống như xterm
, những màu mặc định này có thể bị ghi đè tạm thời bằng màu "ANSI".
Tính năng này có thể bị vô hiệu hóa trong xterm
việc sử dụng dynamicColors
tài nguyên. Không giống như xterm
, urxvt
không có cài đặt tài nguyên cho tính năng.
VTE cũng thực hiện tính năng này và tương tự như vậy không ghi lại nó. urxvt
ít nhất là bắt đầu với tài liệu từ rxvt
. Đối với VTE, bạn phải đọc mã nguồn. Các tính năng có liên quan trong vteseq.cc
hình như thế này:
/* 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);
}
Mã đó bắt đầu từ khoảng năm 2003 (khi nó được viết bằng 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).
Đọc thêm:
Tôi thêm vào phần sau đây để tôi ~/.Xresources
tập tin để thay đổi màu sắc một cách nhanh chóng nhấn Ctrlvà 7hay 8hay 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
Nếu bạn muốn đặt màu nền trước và màu nền cùng một lúc, chỉ cần ghép các lệnh (một số màu được xác định theo tên):
! change to red background
URxvt.keysym.C-7: command:\033]11;#ff0000\007\033]10;yellow\007
Bạn có thể kiểm tra màu sắc của mình bằng một echo
lệnh đơn giản , như lệnh này:
echo -e '\033]11;#ff0000\007\033]10;yellow\007' # changes to red background and yellow foreground
Tôi đã sử dụng mã 11 cho màu nền và mã 10 cho màu nền trước . Các định nghĩa cho Urxvt được trích dẫn bởi Thomas Dickey chỉ ra rằng sử dụng 49 và 39 thay vào đó (mà tôi đã thử nghiệm và cũng hoạt động).
Màu sắc động là một ví dụ về màu sắc chuyển động. Nó bắt đầu bằng việc sử dụng hai .Xresource này:
xterm*dynamicColors: true
urxvt*dynamicColors: on
Mặc dù dẫn đầu, tôi đã không thay đổi màu sắc làm việc với urxvt! Kỹ thuật này hoạt động tuyệt vời với xterm. Màu sắc động gọi đây là "chuỗi thoát OSC" làm thay đổi thiết bị đầu cuối, ví dụ để làm nền đỏ là:echo -e "\03echo -e "\033]11;#ff0000\007"3]11;#ff0000\007"
echo -e "\033]11;#ff0000\007"
Tôi có các mục sau trong Xresource của mình để chuyển đổi nhanh (vâng, nó dựa trên màu sắc động).
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
Bạn cũng có thể xem một cách tiếp cận khác tại đây: https://github.com/sos4nt/dynamic-colors
Tôi đã viết một phần mở rộng được gọi là urxvt-theme có thêm chức năng này cho rxvt-unicode (với menu ngữ cảnh đơn giản) sử dụng tài nguyên X và màu sắc động.