Màu sắc terminal thật rắc rối
(jvns.ca)- Vấn đề màu sắc terminal gần với việc thiếu tiêu chuẩn và khác biệt trong triển khai hơn là sở thích, nên cùng một đầu ra lệnh cũng có thể trở nên khó đọc tùy theo tổ hợp terminal, theme và ứng dụng
- 16 màu ANSI cơ bản, 256 màu và màu hex 24-bit được dùng song song, nhưng số màu sẽ thực sự hiển thị thành màu nào lại khác nhau tùy terminal emulator
- Các xung đột tương phản như chữ xanh dương/nền đen, vàng sáng/nền trắng, ánh xạ màu xám của Solarized hay màu nền của
ngrokxuất hiện khi giả định của chương trình lệch với theme của người dùng - Cách xử lý được chia thành nhiều lớp như đặt lại palette,
base16-shell,LS_COLORS,NO_COLOR=true,--color=always,unbuffer, và hỗ trợ màu 24-bit của Vim/Neovim - Tính năng minimum contrast của iTerm2, tabby, kitty, Ghostty và Windows Terminal không phải lời giải hoàn hảo, nhưng giúp giảm nguy cơ xuất hiện đầu ra không thể đọc được
Màu ANSI và khác biệt giữa các terminal
- Terminal thường có 16 màu ANSI gồm đen, đỏ, xanh lá, vàng, xanh dương, magenta, cyan, trắng và phiên bản sáng của từng màu
- Chương trình chỉ định màu bằng cách xuất ANSI escape code
- Ví dụ có thể chỉ định số màu tiền cảnh bằng dạng
\033[38;5;{num}m
- Ví dụ có thể chỉ định số màu tiền cảnh bằng dạng
- Vấn đề là không có tiêu chuẩn nhất quán về việc số màu ANSI tương ứng với màu hex thực tế nào
- Mỗi terminal emulator tự chọn màu
- Ngay cả bảng màu ANSI escape code trên Wikipedia cũng cho thấy khác biệt lớn giữa các triển khai
- Vì khác biệt này, màu xanh dương mà
lsdùng cho thư mục có thể khó nhìn trên nền đen - Tổ hợp vàng sáng với nền trắng cũng gần như không thể đọc, và các màu khác như xanh lá sáng cũng có thể gặp vấn đề tương tự
Cách đặt lại bảng màu
- Nếu không thích màu ANSI mặc định hoặc gặp vấn đề tương phản, có thể xử lý bằng cách đặt lại palette
-
Thiết lập trong terminal emulator
- Hầu hết terminal emulator hiện đại đều cung cấp tính năng đặt lại màu
- Một số đi kèm sẵn các theme mặc định
- Terminal emulator càng phổ biến thì có thể càng có nhiều theme để chọn
-
Thiết lập bằng shell script
- Có thể thay đổi bảng màu của terminal emulator bằng cách xuất ANSI escape code
- Script Solarized Light của base16-shell dùng các quy ước escape code khác nhau cho nhiều terminal
- Script cố chọn kiểu escape code phù hợp theo biến môi trường
TERM - Cách dùng shell script giúp dễ giữ cùng một cấu hình màu dù đổi terminal emulator
- Tuy vậy không phải terminal emulator nào cũng hỗ trợ thay đổi palette theo cách này, và kể cả có hỗ trợ thì kết quả vẫn có thể hơi khác nhau
256 màu, màu 24-bit và theme theo công cụ
- Nhiều terminal hỗ trợ 3 cách chỉ định màu
- 16 màu ANSI
- 256 màu mở rộng
- Màu hex 24-bit như
#ffea03
fddùng escape code như^[[38;5;48mtrong đầu ra để chỉ định màu tiền cảnh số 48- Màu này có thể trông như xanh chanh, vốn không có trong bảng màu terminal thông thường
- Nó có thể có độ tương phản kém với bảng màu đang dùng
batcũng dùng màu theo cách tương tự, nhưng đầu ra mặc định có vẻ được thiết kế để hoạt động trên nhiều theme terminal khác nhau- Một số công cụ terminal hiện đại như
fd,bat,deltahỗ trợ theme tùy biến riêng- Theme mặc định có thể xung đột với nền terminal
- Bù lại, cách này cho phép kiểm soát theme của đầu ra công cụ chi tiết hơn là chỉ chọn trong 16 màu ANSI
- Dùng
bat --theme ansisẽ khiếnbatdùng các màu ANSI được đặt trong bảng màu terminal thông thường
Xung đột với Solarized và base16
- Solarized Light có thể cho ánh xạ màu bright khác nhau tùy cách triển khai
- Theme Solarized Light mặc định của iTerm ánh xạ các màu 9~14, tức “bright blue”, “bright red” v.v., sang dải màu xám như thiết kế Solarized gốc
- Nếu
lsdùng màu bright cho thư mục và tệp thực thi, chúng có thể hiện thành màu xám
- Nếu
- base16 Solarized Light có thể được dùng như một biến thể giữ màu bright là màu thực, thay vì chuyển sang xám
- Khác biệt này có vẻ là hệ quả của việc Solarized gốc được thiết kế để bảng màu Vim Solarized có thể dùng màu xám
base16-shellđặt các màu 16~21 để cung cấp thêm màu chobase16-vim- Khi
ngrokcố đặt nền thành màu 16 “black”, nếu màu đó đã bị ánh xạ lại thành cam sáng thì nền sẽ trông rất kỳ lạ - Kiểu xung đột này dễ xảy ra khi chương trình chỉ định màu nền ANSI còn người dùng ánh xạ lại màu đó sang ý nghĩa khác
- Khi
Giảm vấn đề tương phản bằng minimum contrast
- Một số terminal có tính năng minimum contrast để tự động điều chỉnh màu khi độ tương phản giữa tiền cảnh và nền không đủ
- iTerm2, tabby, kitty với text_fg_override_threshold, Ghostty và Windows Terminal đều có tính năng này
- Nếu đặt minimum contrast trong iTerm thành 40, cả những đầu ra khó đọc như xung đột màu nền của
ngrokcũng sẽ dễ đọc hơn - Khi cấu hình màu bị sai hoặc chương trình xung đột với theme, minimum contrast là một cơ chế an toàn thực tế để giảm các vấn đề về khả năng đọc ngoài ý muốn
TERM, pipe và tắt màu
- Nếu hệ thống bạn SSH vào không hỗ trợ giá trị biến môi trường
TERMtừ máy cục bộ, màu có thể không hoạt động đúng - Hệ thống dùng cơ sở dữ liệu
terminfo, và nếu giá trịTERMkhông có trong cơ sở dữ liệu đó thì rất khó biết cách xuất màu phù hợp cho terminal - Dù không có môi trường tái hiện được, một câu trả lời trên Stack Overflow gợi ý dùng dạng
TERM=xterm sshthay vì chỉssh - Khi nối lệnh bằng pipe, đôi khi màu sẽ bị tắt
fd | lesscó thể in ra không có màu- Nói chung việc chỉ xuất văn bản thuần, không có escape code, khi chuyển cho công cụ như
greplà điều hữu ích
- Nếu muốn giữ màu, có thể dùng
unbuffer fd | less -runbuffermở một tty để lệnh nghĩ rằng nó đang ghi ra TTY- Nó cũng giải quyết vấn đề đầu ra bị buffer khi ghi vào pipe
- Một số lệnh như
fdcó cờ--color=alwaysđể luôn xuất màu
Tắt hoặc đổi màu của ls
- Một số người không muốn
lsxuất màu- vì màu xanh dương khó đọc trên nền đen
- hoặc vì không muốn chỉnh bảng màu terminal
- hoặc đơn giản vì màu sắc không giúp ích
- Có nhiều lựa chọn
- Có thể tắt màu bằng
ls --color=never - Có thể tùy biến màu mà
lsdùng bằng biến môi trườngLS_COLORS - Một số chương trình hỗ trợ
NO_COLOR=true, và no-color.org có danh sách
- Có thể tắt màu bằng
- Ví dụ, đặt
LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" lssẽ đưa style màu của nhiều loại tệp về 0
Những thay đổi trong Vim và Neovim
- Việc cấu hình màu của Vim trước đây có nhiều vấn đề vì phải khớp bảng màu terminal với bảng màu Vim
- Trong terminal, cách cấu hình bảng màu của Vim nhìn chung có 2 kiểu
- Ánh xạ class màu của Vim vào số màu ANSI
- Để bảng màu dùng trực tiếp màu hex 24-bit như
#faea99
- Cách đây 20 năm, terminal hỗ trợ màu hex 24-bit chưa phổ biến và Vim cũng chưa hỗ trợ dùng màu 24-bit trong terminal
- Vim đã thêm hỗ trợ màu 24-bit vào năm 2016
- Neovim 0.10 phát hành vào tháng 5/2024, và trên terminal có hỗ trợ màu 24-bit thì
termguicolorsđược bật mặc định - Nếu năm 2024 bạn không định dùng terminal không hỗ trợ màu 24-bit, thì gánh nặng phải đồng bộ bảng màu terminal với bảng màu Vim gần như không còn nữa
- Thay đổi này cũng làm giảm nhu cầu để
base16-shellphải thiết lập đặc biệt các màu 16~21 nhằm tích hợp với Vim- Nếu bỏ phần đó đi, có thể tránh được các xung đột như nền cam của
ngrok
- Nếu bỏ phần đó đi, có thể tránh được các xung đột như nền cam của
Trải nghiệm dùng base16 và giới hạn của nó
- Dùng base16-shell cùng base16-vim giúp dễ đồng bộ màu giữa terminal và Vim
- Có thể cấu hình bằng cách thêm vài dòng vào thiết lập fish và vài dòng vào
.vimrc - base16 không phải cách phù hợp cho tất cả mọi người
- Số theme tích hợp sẵn còn hạn chế và có thể không có theme bạn thích
- Theme Solarized base16 đặt màu bright ANSI giống màu thường, điều này có thể gây vấn đề cho những trường hợp cần bright phải khác biệt
- Cách đặt màu 16~21 để cung cấp thêm màu cho
base16-vimcó thể không cần thiết trong môi trường chỉ dùng terminal hỗ trợ màu 24-bit - Việc đặt màu 16~21 có thể gây vấn đề trên các terminal không hỗ trợ 256 màu như Linux framebuffer terminal
- Có một community fork của base16 là tinted-theming
Công cụ tạo bảng màu và theme phổ biến
- rootloops.sh là công cụ để tạo bảng màu
- Có thể tham khảo thêm bài “let’s create a terminal color scheme”
- Các bảng màu phổ biến được nhắc tới trong phản hồi trên Mastodon gồm:
Những vấn đề vẫn còn tồn tại
- Ở các điểm giao nhau giữa nhiều chương trình như tổ hợp
tmux, SSH và Vim, vẫn có thể phát sinh thêm vấn đề màu sắc - Việc chọn được một bảng màu tốt bản thân nó cũng đã khó
- Người dùng bị rối loạn sắc giác có thể khó tìm được bảng màu phù hợp
- Nếu màu nền quá gần với màu con trỏ hoặc vùng chọn, sẽ khó xác định vị trí
- Rất khó tìm ra màu hoạt động tốt trong mọi chương trình, và vẫn có thể có xung đột như trường hợp của
ngrok
- Các chương trình vốn trông “cổ điển” dựa trên màu ANSI mặc định như Nethack hay Midnight Commander có thể nhìn lạ khi dùng theme như Solarized
- Một cách xử lý là đổi bảng màu ANSI ngay trước khi chạy chương trình
- Ví dụ có thể ánh xạ lại màu vàng sang một sắc vàng sáng hơn trước khi chạy Nethack
- Với người dùng chỉ muốn màu sắc hoạt động ổn ngay từ đầu, quá nhiều thiết lập thủ công là gánh nặng, nên các giá trị mặc định hợp lý và tính năng như minimum contrast là rất quan trọng
1 bình luận
Các ý kiến trên Hacker News
Khi cố tạo một theme màu sáng đúng nghĩa cho hệ thống, tôi đã gặp tất cả những vấn đề này và còn nhiều vấn đề khác; đặc biệt có hai điều khá thú vị
Nghĩ lại thì là hiển nhiên, nhưng tôi đã ngạc nhiên khi thấy theme sáng trông thay đổi tinh tế hơn nhiều so với theme tối khi chuyển giữa các màn hình. Phần cứng và thiết lập phần mềm đúng là tạo ra khác biệt trong đầu ra màu sắc, nhưng các thay đổi tập trung ở vùng sáng được cảm nhận lớn hơn nhiều so với các thay đổi ở vùng tối
Ngoài ra, có lúc phải hạ xuống những môi trường bị hạn chế về phông chữ và hỗ trợ màu sắc hào nhoáng như console Linux hoặc BSD; khi đó
fdhayexa/lsd/whatevercó thể trở nên bất tiện hoặc gần như không dùng được, đặc biệt nếu bạn đã map cái sau thànhlsthì càng phiền. Sau một thời gian dài mày mò, tôi đã cấu hình fbterm để có chức năng terminal ổn ngay cả khi không có X, nhưng fbterm cũng có vấn đề riêng. Khi thiết lập bảng màu Vim, bạn nên chuẩn bị một theme thay thế cho console nghèo tính năng, hoặc luyện gõ lệnh Vim thật nhiều mà không cần nhìn :DChỉnh sửa: không phải để làm việc nghiêm túc, nhưng đây là màn hình fbterm đã được styling để cho thấy có thể làm được gì khi không có X: https://i.imgur.com/RbDRgtD.png
Vì vậy, khi chỉnh phơi sáng và độ tương phản phù hợp, tôi dành khá nhiều thời gian để điều chỉnh sao cho vùng highlight trông “vừa đúng”. Tôi không in kỹ thuật số, nhưng có lẽ nguyên lý tương tự cũng áp dụng
Đáng tiếc là các framework công cụ dòng lệnh “hiện đại”, vốn thường được viết bằng JavaScript, lại có xu hướng bỏ qua điều này
https://www.gnu.org/software/gettext/manual/html_node/The-TE...
Cũng có một thiết lập tạo hiệu ứng “quầng sáng” nhẹ cùng màu cho các điểm dữ liệu, khiến chúng trông như các điểm phát sáng. Xét từ góc độ độ bão hòa màu, tức tỷ lệ tín hiệu trên nhiễu của toàn bộ phổ, nền đen hợp lý hơn
Có thể dùng khoảng 10 màu khác nhau gần như không gặp vấn đề. Ngoài ra, nó còn có ưu điểm truyền tải thông tin thứ tự/khoảng cách, như vàng nằm giữa đỏ và xanh lá, cam nằm giữa đỏ và vàng, nên dễ chia nhỏ và diễn giải hai màu gần nhau đến mức nào
Thật ra tôi không thấy việc đó khó đến vậy
Bước 1: Hầu hết trình giả lập terminal có bảng màu mặc định rất tệ, nên chỉ cần đổi đi là được. Cá nhân tôi thích Solarized, đặc biệt là theme tối, nhưng theme sáng cũng ổn. Dù không phải Solarized, vẫn có nhiều theme cho phép đọc được bất kỳ màu nào trên nền mặc định
Bước 2: Nên tránh các công cụ dòng lệnh mặc định dùng escape sequence màu 8-bit hoặc 24-bit. Điều này có thể gây tranh cãi, nhưng cá nhân tôi xem đó là hành vi thù địch với người dùng. Tôi đã chọn sẵn bảng màu terminal tốt nhất phù hợp với yêu cầu dễ đọc của mình, nên việc lập trình viên tự coi mình như một nhà thiết kế nửa mùa rồi ghi đè lên nó chẳng giúp ích gì. Có thể cung cấp tùy chọn bật theme trong công cụ, nhưng đó phải là lựa chọn, không phải mặc định
Với một người dành phần lớn cuộc đời trong terminal, chỉ cần giữ hai quy tắc này là có thể tạo ra môi trường terminal nhất quán, dễ đọc mà hầu như không phải cấu hình. Vấn đề thật sự là chúng ta quá dễ dãi với việc các lập trình viên dùng mã escape màu 8-bit và 24-bit
Qua nhiều năm, tôi đi đến kết luận rằng tính năng mới phải được đưa ra ngay trước mắt người dùng, còn các giá trị mặc định tốt phải được thúc đẩy mạnh mẽ. Nếu không, tính năng hầu như sẽ không được dùng
Màu 8-bit và 24-bit vốn đã là tính năng dùng tùy chọn và cũng có thể cấu hình. Với một chương trình terminal hoạt động đúng, các biến môi trường TERM và COLORTERM sẽ quyết định có dùng những màu đó hay không
Nhiều ứng dụng kỳ vọng văn bản “bright black” sẽ nhìn thấy được trên nền. Có nhiều ví dụ ở đây: https://github.com/altercation/solarized/issues/220
Gần như mọi bảng màu khác đều biểu diễn “bright black” thành màu xám có thể đọc được trên nền đen
Ví dụ pamix đặt nền thành đen, thanh trạng thái tmux hay ngrok cũng tương tự. Thế là bạn lại rơi vào hang thỏ để xử lý chuyện đó
Cả hai đều gợi ý rằng giải pháp nên nằm ở terminal. Bản thân chương trình terminal phải có màu mặc định hợp lý; màu xanh dương phải nhận ra được là xanh dương, và cũng phải tính đến các dạng rối loạn sắc giác phổ biến. Ví dụ đặt màu đỏ thuần trên nền đen sẽ khó đọc, nên đừng chỉ dùng
ff0000, tốt hơn là pha thêm dù chỉ một chútKhi terminal có giá trị mặc định hợp lý, chương trình dòng lệnh chỉ cần dùng 16 màu tiêu chuẩn. Ở đây, việc cố dùng màu 24-bit gần như có nghĩa là “tôi đã từ bỏ việc để phía terminal cung cấp sự bình thường” hoặc “tôi biết rõ nhất”, và cuối cùng người dùng phải cấu hình riêng N chương trình. Không định nghĩa theme bên trong ứng dụng dòng lệnh là cách tốt nhất theo tôi
Tôi cũng nhìn website và phông chữ theo cách tương tự. Nội dung nên được cung cấp bằng HTML để người dùng có thể xem theo cách họ muốn, và bố cục trang cũng nên chảy linh hoạt, không cố định như bố cục tạp chí
Phần mềm desktop cũng tương tự. Wayland compositor nên ghi nhớ vị trí cửa sổ. Việc từng chương trình X tự lưu và khôi phục vị trí cửa sổ của mình là ngớ ngẩn. Wayland nói rằng biết thông tin môi trường là vấn đề bảo mật, và tôi đồng ý với điểm đó, nhưng như vậy việc ghi nhớ ấy sẽ là nhiệm vụ của môi trường desktop. Cũng có thể loại bỏ phần code đó khỏi mọi ứng dụng
Câu hỏi “nên xử lý việc này ở đâu trong software stack?” lặp lại ở nhiều lĩnh vực. Khi chọn đặt nó ở đâu, trước hết phải trả lời mục tiêu là gì, và câu trả lời của tôi luôn nghiêng về sự đơn giản và khả năng bảo trì
Bài viết của Julia cũng nhắc đến ý tưởng này, nhưng không đi vào những vất vả cụ thể. Liên quan đến đó, tôi cũng tò mò liệu bảng màu terminal chỉ xử lý 16 màu cơ bản, hay còn đụng tới cả vùng RGB và thang xám. Vì có lẽ màu 8-bit và 16-bit cũng có thể được điều chỉnh cho phù hợp với yêu cầu dễ đọc
Nếu ở vị trí chọn màu, bạn nên thử kiểm tra màu bằng thuật toán APCA mới (Advanced Perception of Colour)
APCA dự kiến sẽ thay thế phương thức độ tương phản x:y hiện tại trong WCAG 3.0, nhưng có thể còn mất vài năm nữa. Nghe nói nó xét đến cỡ chữ, độ đậm, tiền cảnh/nền, thậm chí cả ánh sáng và môi trường xung quanh, cũng như mục đích sử dụng dự kiến
Sẽ khá hay nếu trình giả lập terminal có thể dùng cảm biến ánh sáng của thiết bị để tối ưu độ tương phản theo các yếu tố môi trường
Cũng có những người cực đoan thật sự muốn tắt hẳn màu sắc[0]. Tôi cũng muốn tự thử, nhưng cũng thích màu đẹp
[0] https://no-color.org/
:syntax offlà cấu hình Vim duy nhất của tôi. Vì các bộ màu terminal được thiết kế bởi lập trình viên máy tính, kỹ sư điện, và những người không biết rằng điều quan trọng ở màu sắc không phải là bản thân màu, mà là độ sángTôi tự hỏi liệu có mối tương quan nào giữa những người không muốn màu trong terminal và những người dùng trình chặn quảng cáo mạnh trên trình duyệt hoặc thường dùng chế độ đọc hay không
Khi chuyển output qua pipe, màu sắc trở thành gánh nợ mà không đem lại lợi ích nào. Điểm cốt lõi gần với quyền lựa chọn hơn
Việc qua lại giữa Linux và Windows còn làm tệ hơn. Cách nhiều công cụ dùng màu mặc định gần như không dùng được, hoặc thực sự khiến chúng không dùng được
Một số công cụ cung cấp tùy chọn
--color=never, và khá nhiều công cụ tôn trọng NO_COLOR. Đáng tiếc là không phải tất cả; ngay cả những công cụ nói là có hỗ trợ cũng đôi khi giả định chế độ đó chỉ được dùng cho pipeline hoặc giao diện lập trình. Vì vậy mới sinh ra đủ loại hành vi khó chịuNó có khái niệm bảng màu nhất quán với nhiệt độ màu có ý nghĩa, và nghiêng về tông ấm để mắt đỡ mỏi hơn khi phải nhìn quá nhiều ánh xanh. Nó cũng đi kèm bảng màu cho alacritty
Từ lâu tôi đã muốn dùng theme sáng cho terminal, nhưng quá nhiều chương trình dùng màu tùy chỉnh không phải ANSI được tối ưu cho nền terminal tối, nên lần nào tôi cũng bỏ cuộc
Một số chương trình cho phép cấu hình màu, nhưng cấu hình từng chương trình một thì quá phiền. Vì vậy hiện tại tôi dùng nền terminal tối, nhưng tự chọn một theme ANSI trong đó mọi màu đều có tỷ lệ tương phản đủ tốt theo tiêu chuẩn của tôi và cũng vượt qua kiểm tra tương phản APCA/WCAG 3. Tôi hài lòng :)
Dùng chuỗi điều khiển OSC 11 thì chương trình có thể biết màu nền, nhưng hầu như không chương trình nào quan tâm. Thường thì chỉ cần ai đó nghĩ thông báo cảnh báo màu vàng trông ngầu là mọi chuyện dừng ở đó
Điều này lại dẫn đến một vấn đề khác. Có những terminal phổ biến không tương thích xterm nhưng mặc định đặt
TERM=xterm256-colorChỉnh sửa: Tôi vừa phát hiện
xtermcontrol; nó có thể trừu tượng hóa việc kiểm tra nền trong script và có trong tất cả các trình quản lý gói lớnGần đây tôi bỏ cuộc và cấu hình thủ công hầu hết ứng dụng để dùng màu ANSI. Ví dụ như fzf có switch dòng lệnh cho việc này. Tôi chỉ để Vim và Emacs là ứng dụng không ANSI, rồi cấu hình chúng khớp với bảng màu dùng trong phần còn lại của terminal. Nếu muốn, có thể đi xa hơn một bước với thứ như vim-dim
Emacs có
frame-background-mode[0] khá khó phát hiện, về cơ bản là một trong hai giá trịlighthoặcdarkKhi bạn thắc mắc vì sao Emacs lại chọn màu kỳ lạ cho một mục nào đó, thường là do frame-background-mode bị sai
[0]https://doc.endlessparentheses.com/Var/frame-background-mode...
Với terminal nền tối chữ trắng:
export COLORFGBG='15;0'Với terminal nền sáng chữ đen:
export COLORFGBG='0;15'Tôi đã dùng bảng màu FlatUI có chỉnh sửa nhẹ trong gần 10 năm, và thực tế rất hiếm khi gặp tình huống có vấn đề
Tệp png: https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
Liên kết imgur: https://imgur.com/a/flatui-7mqVZAY
Dựa trên: https://flatuicolors.com/palette/defo
Tôi cũng đã dùng theme của mình gần 10 năm. Nó hoạt động tốt trong iTerm, vim, Emacs, vscode, v.v.
Tôi đã dùng Apple Terminal từ lâu, và trước đây từng có một bộ bảng màu khá ổn tên là “Terminal Fructose”, nên tôi hay dùng các màu nền khác nhau cho từng loại công việc. Đến một thời điểm nào đó Apple cũng đã tích hợp nó dưới dạng theme
Nhưng Apple đã bỏ bê việc hỗ trợ Terminal, không hỗ trợ quá 256 màu và cũng thiếu các tính năng hiện đại hơn. Nó cũng không hợp lắm với cấu hình Neovim+LazyVim
Tôi đã thử qua iTerm2, Kitty, Alacritty, Wezterm để tìm một terminal tốt hơn; tất cả đều hiện đại hơn, nhưng dường như không có tùy chọn “New Window with Profile ...” cơ bản để mở nhanh các cửa sổ với nhiều màu nền/theme khác nhau. Ít nhất là nếu không phải mày mò đôi chút thì không có
Hiện giờ tôi đã ổn định với Wezterm, lý do chính là nó chạy được cả trên Windows và có thể chia sẻ cấu hình
wezterm.lua. Nhân tiện, Windows Terminal thực ra cũng khá ổn. Dù vậy, với những việc nhanh như dùngpython3làm REPL để tính toán hoặc thử hệ thập lục phân/nhị phân, tôi vẫn thường mở Apple TerminalCó vài tính năng ở iTerm2 mà tôi thấy nhớ, nhưng phần lớn liên quan đến chuột. Ngoài ra, sau vài buổi tối cấu hình theo ý muốn, và sau khi làm cho
cmd-nmở cửa sổ mới ở thư mục mặc định thay vì thư mục hiện tại, tôi đã dùng nó khá hài lònglaunch_menu[1] để khởi chạy shell khác, hoặcaugment-command-palette[2] để thêm mục vào command palette[1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
[2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
Đúng là cần mày mò một chút. Nhưng việc lập trình đúng một tính năng rất cụ thể theo đúng cách mình muốn chính là đỉnh cao của trải nghiệm rất WezTerm
Không chỉ terminal, mà cả biển neon hay bảng hiệu LED, màu xanh dương cũng là màu mỏi mắt nhất vào ban đêm
Nhìn từ xa thì lúc nào cũng nhòe và không lấy nét được. Khi thấy các công ty lớn treo những bảng hiệu khổng lồ bằng đèn xanh dương, tôi thấy lạ là họ chi rất nhiều tiền mà còn không nhận ra rằng mọi người không đọc được
Tôi đã đặt laptop tự động chuyển giữa chế độ sáng/tối theo chu kỳ ánh sáng ban ngày, và số lượng ứng dụng xuất màu bị hỏng khi chuyển sang chế độ nền sáng chữ tối nhiều đến đáng ngạc nhiên
Nếu làm công cụ dòng lệnh mà nhất thiết phải dùng màu, thì nên chỉ dùng ANSI 16 màu, hoặc cho phép người dùng cuối thay đổi bảng màu