tmux(như màn hình GNU) hoạt động bằng cách dịch các tính năng của thiết bị đầu cuối thực tế của bạn sang thiết bị đầu cuối bên trong (thường khác nhau). Họ làm điều này để cho phép bạn kết nối một phiên trên các thiết bị đầu cuối khác nhau cùng một lúc hoặc tại các thời điểm khác nhau .
Khi nó hoạt động tốt, bạn sẽ thấy văn bản "tương tự" bất kể bạn đang kết nối từ đâu.
Không phải tất cả các thiết bị đầu cuối hỗ trợ dim. Trên thực tế, hầu hết không. Cơ sở dữ liệu đầu cuối có 121 lần xuất hiện dimso với 1514 mô tả thiết bị đầu cuối.
Khi screenđược bắt đầu vào khoảng năm 1990, các nhà phát triển của nó đã chọn bỏ qua tính năng đó và thay vào đó cung cấp những thứ hữu ích nhất. Họ đã thiết kế chương trình để lưu trữ, đối với mỗi ô hàng / cột, các thuộc tính video mà các chương trình termcap có khả năng sử dụng. Mã nguồn định nghĩa những điều này:
#define ATTR_DI 0 /* Dim mode */
#define ATTR_US 1 /* Underscore mode */
#define ATTR_BD 2 /* Bold mode */
#define ATTR_RV 3 /* Reverse mode */
#define ATTR_SO 4 /* Standout mode */
#define ATTR_BL 5 /* Blinking */
nhưng cả hai screen và chỉ tmuxsử dụng các tính năng bên trong này nếu thiết bị đầu cuối bên ngoài hỗ trợ chúng, cũng như được cung cấp trong mô tả thiết bị đầu cuối bên trong .
OSX gói một bản sao của ncurses và cơ sở dữ liệu đầu cuối . Trong khi bạn có thể cài đặt MacPorts hoặc homebrew và nhận được sau phiên bản, những gì OSX có là ncurses 5.7.20081102. Nếu bạn sử dụng infocmpđể hiển thị các mô tả thiết bị đầu cuối, bạn sẽ thấy một cái gì đó như thế này:
$ infocmp screen-256color
# Reconstructed via infocmp from file: /usr/share/terminfo/73/screen-256color
screen-256color|GNU Screen with 256 colors,
am, km, mir, msgr, xenl,
colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=^J, initc@, is2=\E)0, kbs=^H,
kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m,
rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smcup=\E[?1049h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g,
Không có dim ở đó. Trong ncurses, điều này đã được thêm vào tháng 4 năm 2015 :
# 2015-04-22
# + add 'dim' capability to screen entry (report by Leonardo B Schenkel)
# + add several key definitions to nsterm-bce to match preconfigured
# keys, e.g., with OSX 10.9 and 10.10 (report by Leonardo B Schenkel)
Tương tự như vậy, bạn sẽ không nhìn thấy dim trong xterm-256color. Điều đó đã được thêm vào tháng 6 năm 2014 :
# 2014-06-14
# + modify sgr for screen.xterm-new to support dim capability -TD
# + add dim capability to nsterm+7 -TD
# + cancel dim capability for iterm -TD
# + add dim, invis capabilities to vte-2012 -TD
# + add sitm/ritm to konsole-base and mlterm3 -TD
Cái cách mà dim được sử dụng trong Terminal.app bên ngoài không được chỉ định, nhưng có khả năng được mã hóa cứng (không sử dụng mô tả thiết bị đầu cuối). Nhưng screenvà tmuxkhông biết làm thế nào các chuỗi thoát đi vào, nhưng biết rằng dimnó không được đề cập trong mô tả thiết bị đầu cuối, do đó không được hỗ trợ.
Bạn có thể cập nhật cơ sở dữ liệu terminfo của mình để thêm dimtính năng này vào các mô tả thiết bị đầu cuối này, bằng cách sử dụng infocmpvà ticcác tiện ích:
sử dụng infocmpđể có được các mô tả thiết bị đầu cuối hiện có cho xterm-256colorvà screen-256color. Điều này chỉ hiển thị đầu tiên; tất nhiên bạn sẽ lặp lại quá trình cho mô tả thứ hai:
infocmp -1x xterm-256color> foo
chỉnh sửa tệp văn bản được tạo bởi infocmp , thêm dòng này
dim=\E[2m,
và thay thế dòng bằng sgr=dòng này:
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
sử dụng tic để thay thế mô tả thiết bị đầu cuối:
sudo tic -x foo
Lưu ý: Điểm của câu hỏi là hỏi tại sao điều này xảy ra; Nicholas Marriott cung cấp thông tin về cách giải quyết vấn đề.
echo $TERMcả trong và ngoài tmux và thêm đầu ra cho câu hỏi. Ra khỏi đỉnh đầu, tôi đoán rằng giá trị trong thiết bị đầu cuối bên dưới cần phải-256colorđược thêm vào;tmuxchọn lên trên này.