- Để hiển thị đúng các theme như Solarized trong Emacs chạy trên terminal, điều quan trọng không chỉ là bản thân màu 24-bit mà là terminal, terminfo, tmux và mosh đều phải hiểu cùng một khả năng màu sắc xuyên suốt toàn bộ chuỗi
- Màu RGB được dùng rộng rãi dưới dạng
ESC[38;2;<r>;<g>;<b>m, nhưng cú pháp dùng dấu hai chấm gần với chuẩn hơn và cú pháp dùng dấu chấm phẩy đã lan rộng trong triển khai thực tế cùng tồn tại, khiến tính tương thích trở nên phức tạp xterm-256colorvàxterm-directlần lượt quảng bá bảng màu 256 màu và 16.777.216 màu, nhưng mô hình terminfo thiên về bảng màu không thể biểu diễn màu RGB trực tiếp một cách gọn gàng- Trong môi trường thực tế, có thể cần các giá trị TERM thay thế như mục
-directcủancurses-term,tmux-direct, dòng mosh 1.4 vàvscode-direct, và một số lớp vẫn chỉ chấp nhận kiểu dùng dấu chấm phẩy - Để dùng ổn định các tính năng terminal hiện đại, chỉ TERM và terminfo là chưa đủ; cần một cách biểu diễn riêng có thể cập nhật nhanh hơn theo tên và phiên bản terminal
Vì sao Emacs trên terminal cần màu 24-bit
- Emacs trong môi trường đồ họa tự động hỗ trợ màu 24-bit, nên có thể hiển thị đúng các theme như Solarized và phông chữ
- Khi dùng cùng theme đó trong terminal, biểu đạt màu bị hạn chế nên màn hình có thể trông kém đẹp hơn
- Các terminal phổ biến đã hỗ trợ màu 24-bit từ lâu, nhưng để chương trình dùng được thì cả phát hiện tính năng lẫn cấu hình đều phải khớp
- Mục tiêu có hai phần
- Tìm cách bật hỗ trợ truecolor trong môi trường terminal hiện tại
- Xem vấn đề màu sắc của Emacs liên hệ thế nào với các chuẩn terminal từ thập niên 1970~1990
Lịch sử mã escape ANSI và mở rộng màu sắc
- Các terminal phần cứng đời đầu dùng những hệ mã điều khiển khác nhau, nên để tạo phần mềm có tính di động cần có chuẩn hóa ANSI
- ANSI escape codes đã tồn tại từ thập niên 1970, và với màu sắc thì SGR (Select Graphics Rendition) là phần cốt lõi
- đậm hoặc độ sáng
- nghiêng
- nhấp nháy
- màu chữ và màu nền
- các thuộc tính hiển thị ký tự khác
- Ban đầu màu sắc là màu 3-bit tương ứng với 8 đỉnh của khối lập phương RGB
- gồm đen, trắng, các màu cơ bản cộng và các màu cơ bản trừ
- Sau đó bit màu sáng hoặc đậm được thêm vào, mở rộng thành 16 màu
- “bright black” tương ứng với xám đậm
- Năm 1999, Todd Larason thêm bản vá hỗ trợ 256 màu vào xterm
- lấy mẫu khối màu RGB 6x6x6
- dải thang xám 24 mức
- cũng có biến thể 88 màu, hiếm nhưng vẫn còn được hỗ trợ
Con đường hình thành cú pháp màu 24-bit
- Màu 8-bit và màu 24-bit được thiết lập trên terminal tương thích theo các dạng sau
ESC[38;5;<n>m: đặt màu sốntrong bảng màu làm màu chữESC[38;2;<r>;<g>;<b>m: đặt giá trị RGBr,g,blàm màu chữ
- Các số
5và2gắn với chế độ màu mở rộng trong ISO 8613-6, tức ITU T.4162: màu trực tiếp trong không gian RGB5: màu theo chỉ mục
- Dòng thời gian chuẩn hóa như sau
- Thập niên 1970: ANSI chuẩn hóa các chuỗi escape của terminal, dẫn tới ANSI X3.64 và ECMA-48
- 1979: bản ECMA-48 lần 2 gán SGR 30~37 và 40~47 cho màu chữ và màu nền 3-bit
- 1984: bản ECMA-48 lần 3 đưa vào khái niệm màu chữ và màu nền mặc định, gán 39 và 49
- 1991: bản ECMA-48 lần 5 để 38 và 48 cho “chuẩn hóa tương lai”, kèm gợi ý tới ISO 8613-6
- 1993: ISO 8613-6 định nghĩa 38 và 48 là chế độ màu chữ và nền mở rộng
- Về phân tách tham số con, dùng dấu hai chấm gần chuẩn hơn, nhưng các triển khai thực tế lại chấp nhận rộng rãi dấu chấm phẩy
ESC[38;5;3mcó thể bị terminal không hiểu SGR 38 diễn giải như các tham số riêng38,5,3- FAQ của xterm do Thomas Dickey viết giải thích rằng bản sao ITU T.416 lúc đó rất đắt, và việc tách giá trị RGB bằng dấu chấm phẩy như các tham số SGR khác là một sai lầm
- Dòng thời gian liên quan như sau
- 1999: Thomas Dickey gộp bản vá 256 màu của Todd Larason vào xterm, đưa theo cú pháp dấu chấm phẩy mơ hồ
- 2006: Konsole hỗ trợ 256 màu và truecolor 24-bit bằng cùng cú pháp dấu chấm phẩy như xterm
- 2012: xterm được sửa để chấp nhận cả cú pháp dấu hai chấm gần chuẩn hơn
- 2016: console tích hợp của Windows 10 hỗ trợ mã escape ANSI và màu 24-bit, nhưng dùng cú pháp dấu chấm phẩy
- 2019: Windows Terminal cũng hỗ trợ mã escape ANSI, nhưng dùng cú pháp dấu chấm phẩy
- 2022: Microsoft công bố chuyển hệ sinh thái từ subsystem console kiểu VGA cũ sang mô phỏng terminal ANSI
- 2022: Konsole hỗ trợ cú pháp dấu hai chấm tương thích chuẩn
terminfo biểu diễn khả năng màu như thế nào
- terminfo cung cấp cơ sở dữ liệu khả năng của terminal và khả năng sinh chuỗi escape phù hợp
- Biến môi trường
TERMchỉ tới bản ghi terminfo mà chương trình sẽ dùng, và cũng được truyền tự động qua kết nốissh toehiển thị danh sách các bản ghi terminfo đã cài, còninfocmpdùng để kiểm tra khả năng của một bản ghi cụ thể- Có ba khả năng quan trọng liên quan đến màu
colors: số màu terminal hỗ trợsetaf: đặt màu chữsetab: đặt màu nền
xterm-256colorcósetaftạo ra chuỗi khác nhau tùy số màu- 0~7: dùng tham số ANSI 30~37 của SGR
- 8~15: dùng các màu sáng 90~97 không chuẩn
- lớn hơn nữa: dùng bảng màu 256 màu dạng
38;5;<n>
xterm-directlà mục terminfo cho RGB 24-bit, quảng bácolorslà 16.777.216- tắt
ccc, nghĩa là không thể gán giá trị RGB mới cho chỉ mục màu - cũng không có các mục liên quan tới đổi màu lúc chạy như
initc,oc,rs1 setafvàsetabdùng dạng38:2::...dựa trên dấu hai chấm
- tắt
Giới hạn của mô hình màu trực tiếp trong terminfo
- Mô hình lập trình của terminfo và ncurses về cơ bản xoay quanh mục bảng màu
- có N mục bảng màu
- mỗi mục có giá trị RGB mặc định
- mô hình giả định terminal có thể thay đổi các giá trị này
- Terminal kiểu
-directbiểu diễn màu 24-bit bằng cách giả như có 16.777.216 mục bảng màu- mỗi mục tương ứng với khối RGB 8:8:8
- các giá trị này không thể thay đổi
- Để tương thích, cách làm
xterm-directdùng 7 sắc xanh đậm nhất cho tương thích với 8 màu ANSI cơ bản- không gồm màu đen
- đây là cơ chế để tránh việc chương trình cũ giả định ý nghĩa của
setafrồi in ra những màu xanh đậm gần như không nhìn thấy
- Vì vậy cách
-directvà cách-256colorkhông tương thích với nhau- chương trình phải biết rằng 256 màu là màu chỉ mục còn 16.777.216 màu là màu trực tiếp
- cũng có ngoại lệ là phải tránh 7 sắc xanh đậm nhất đó
- Trong một vấn đề liên quan tới termwiz, chương trình kỳ vọng bảng màu xterm-256color nhưng thực tế lại in ra các màu xanh đậm khó đọc
- issue đó còn mở vào thời điểm bài viết, nhưng @quark-zju đã đưa bản sửa vào nên hiện termwiz hoạt động hợp lý
- Điểm cốt lõi nằm gần với giới hạn của terminfo hơn là ở bản thân terminal
- các terminal hỗ trợ màu 24-bit có vẻ cũng hỗ trợ bảng màu 256 màu của xterm và thay đổi động giá trị RGB
- terminfo không đủ để mô tả chính xác và nhanh nhạy hệ sinh thái terminal emulator hiện đại
Thiết lập TERM và tính tương thích với dấu chấm phẩy
- Vì rất nhiều chương trình dùng terminfo nên giá trị
TERMphải được thiết lập đúng - Dù muốn thống nhất theo cú pháp SGR dùng dấu hai chấm, nhiều môi trường vẫn chỉ hỗ trợ cú pháp dấu chấm phẩy
- Các mục terminfo được ghép từ các khối xây dựng
xterm+direct: cú pháp dấu hai chấm gần chuẩnxterm+indirect: cho terminal cũ chỉ hỗ trợ dấu chấm phẩy
- Khi tìm theo
xterm+indirect,vscode-directcó vẻ là lựa chọn phù hợp nhất- vì nhắm tới terminal của Microsoft nên được xem là đủ gần với Windows Terminal và Windows Console
- chưa kiểm toán mọi tính năng, nhưng nó hoạt động
- Trên nhiều server, các mục terminfo
-directcó thể chưa được cài- trên đa số hệ thống, cơ sở dữ liệu terminfo mặc định nằm trong gói
ncurses-base - các mục terminal mở rộng cần gói
ncurses-term
- trên đa số hệ thống, cơ sở dữ liệu terminfo mặc định nằm trong gói
- Trong khi viết bài, ncurses đã thêm mục terminfo
winconsole, nhưng nó không hỗ trợ màu 24-bit và vẫn chưa được phát hành trong bất kỳ phiên bản ncurses nào
Cách Emacs phát hiện truecolor
- Emacs có tài liệu về cách phát hiện hỗ trợ truecolor trên TTY
- Trong
M-x eval-expression, chạy(display-color-cells)để kiểm tra Emacs có nhận ra 16.777.216 màu hay không - Tài liệu Emacs cũng bàn tới giới hạn terminfo của chế độ
-direct- terminal có khả năng
RGBcó thể coi#000001tới#000007là màu chỉ mục chứ không phải RGB trực tiếp - đây là để giữ tương thích ngược với các ứng dụng không biết direct color
- nếu thành vấn đề, có thể dùng định nghĩa terminal tùy chỉnh có
setb24,setf24
- terminal có khả năng
- Emacs trước tiên tìm các chuỗi
setf24vàsetb24, nếu không có thì dùngRGBnhư khả năng thay thế - Các mục terminfo trên hệ thống đã kiểm tra không có
setf24
Trong terminal lồng nhau, mọi lớp đều phải khớp
- Quy trình làm việc phổ biến là lồng nhiều lớp terminal
- mở terminal emulator đồ họa trên desktop cục bộ
- kết nối tới máy từ xa hoặc VM bằng mosh
- khởi động tmux
- thêm terminal bên trong Emacs, Asciinema, GNU Screen v.v.
- Mỗi lớp tự triển khai máy trạng thái chuỗi escape ANSI của riêng mình
- Để màu 24-bit hoạt động, mọi lớp phải hiểu chuỗi escape được sinh ra từ terminfo của
TERMbên trong, rồi truyền chính xác ra ngoài theo terminfo tương ứng - Vì thế phần mềm liên quan phải đủ mới
- Ubuntu LTS hiện tại cung cấp mosh 1.3, nên cần bật mosh-dev PPA
TERMtrong từng lớp cũng phải chính xác- bên trong tmux dùng
tmux-direct - mosh không có terminfo chuẩn nên phải chọn giá trị đủ gần
- bên trong tmux dùng
Cấu hình theo từng môi trường
-
Terminal emulator đồ họa
- hầu hết terminal đặt
TERMmặc định phù hợp hoặc cho phép người dùng ghi đè - Konsole có tùy chọn chọn giá trị
TERM
- hầu hết terminal đặt
-
ssh
sshtruyền giá trịTERMvào shell mới- nếu host từ xa có cùng bản ghi terminfo thì cấu hình sẽ tương đối đơn giản
-
tmux
- khi chạy tmux,
TERMcó thể bị đặt thànhscreen - có thể sửa bằng cách đổi terminal mặc định trong
~/.tmux.conf
set -g default-terminal "tmux-direct"- cũng có thể cân nhắc chỉ đặt
tmux-directkhiTERMbên ngoài hỗ trợ màu 24-bit, nếu không thì giữscreenhoặctmux-256color
- khi chạy tmux,
-
mosh
- mosh mới hỗ trợ màu 24-bit, nhưng tự quảng bá chỉ 8 màu hoặc 256 màu
- vì vậy người dùng phải tự đặt
TERMphù hợp - mosh hướng tới tương thích xterm nhưng với SGR 38 và 48 thì chỉ hỗ trợ cú pháp dấu chấm phẩy
TERM=xterm-directkhông hoạt độngvscode-directđược dùng như phương án thay thế gần nhất vớixterm-direct- không có biến tiện dụng nào để báo shell đang chạy dưới mosh, nên đã viết script
detect-mosh.rsvà gọi nó trong.bashrc - cách làm là kiểm tra xem tiến trình shell có phải là tiến trình con của
mosh-serverhay không - chưa chắc việc biên dịch Rust trên đường đăng nhập có phù hợp với host hiệu năng thấp hay không
Kết quả cuối cùng và các vấn đề còn lại
- Sau khi cấu hình, ngay cả Emacs bên trong tmux và mosh cũng hiển thị theme bằng màu 24-bit
- Có thể tóm gọn các vấn đề còn lại thành ba ý
- các terminal vẫn chưa hoàn toàn thống nhất về cú pháp và tính năng
- terminfo là con đường chuẩn để tra cứu tính năng
- terminfo thì hạn chế, đôi khi không chính xác, và các bản phát hành mới cũng không thường xuyên
Hướng đi sau terminfo
- Nếu phần mềm muốn tận dụng đầy đủ các tính năng terminal hiện đại, nó cần vượt ra ngoài terminfo
- Một số hướng khả thi gồm
- tiếp tục dùng biến
TERMđược hỗ trợ rộng rãi - không chỉ phụ thuộc vào terminfo cũ của hệ điều hành hay bản phân phối, mà cho phép chương trình tự biết khả năng terminal một cách độc lập
- đưa thông tin về terminal emulator khoảng 10 năm gần đây vào một thư viện được cập nhật thường xuyên, theo tên và phiên bản
- không còn bao gồm hỗ trợ cho các terminal phần cứng đã quá khó sử dụng
- vẫn hỗ trợ file terminfo do OS cung cấp và định dạng file terminfo, nhưng có giao thức để biết thông tin nào là mới hơn
- thêm
TERMVERSIONtùy chọn để phân biệt khác biệt tính năng theo phiên bản như Konsole 2022 và Konsole 2023 - biểu diễn rõ ràng, không mơ hồ các tính năng hiện đại như màu 24-bit, hoạt ảnh bảng màu 256 màu, liên kết URL, Kitty graphics protocol
- tiếp tục dùng biến
- Cũng có thể có cách tương thích ngược cho chương trình cũ
- một chương trình chạy từ
.bashrcdùngTERMvàTERMVERSIONđể tạo file terminfo nhị phân trong$HOME/.terminfo/ - tạo ra các khả năng màu 24-bit rõ ràng như
RGB,setf24,setb24 - với chương trình không hiểu RGB, coi như chúng giả định bảng màu 256 màu và giữ
colors#0x100,initc,oc
- một chương trình chạy từ
1 bình luận
Các ý kiến trên Hacker News
Lục lọi terminfo có cảm giác như soi chữ tượng hình bằng một ngọn đuốc lập lòe trong hầm mộ sâu
Nghĩ đến việc một ứng dụng terminal chứa bao nhiêu độ phức tạp thì thấy lạ thật, và càng biết ơn hơn các nhà phát triển terminal như iTerm và Kitty
Tôi có gom các hàm đặt màu tab trong iTerm+zsh ở đây: https://gist.github.com/aclarknexient/84ebe33c1879f921685304...
So với cách ngày xưa dùng telnet để kết nối HTTP hay SMTP, bản thân văn bản thì đơn giản, nhưng phía hiển thị văn bản đó lại là một ứng dụng phức tạp hỗ trợ đủ loại tính năng
Hiện giờ lựa chọn đó khả thi vì thực tế chỉ có mỗi tôi là người dùng terminal ấy, nhưng các terminal hiện đại hỗ trợ khá nhiều tập con chung, nên đỡ đau hơn chuyện ứng dụng không nhận ra giá trị
TERMlạ rồi rối lênTất nhiên, nếu bạn không thường SSH vào các hệ thống mới thì vấn đề này ít quan trọng hơn
Nó không phải trình giả lập terminal nhanh nhất, nhưng về ngoại hình thì áp đảo, đẹp nhất
Việc chỉnh bảng màu 16 màu cho từng ứng dụng terminal dễ hơn so với việc khớp chính xác mã terminal ở phía ứng dụng
Tôi đặt màu rxvt-unicode trong
~/.Xdefaults, rồi trong theme Emacs.elthì chọn tên màu khác nhau tùy theo có hiển thị đồ họa hay không, sau đó áp dụng cho nhiều faceTiện thể, output
lscó màu cũng trông đẹp hơn. Bảng 16 màu mặc định thường quá bão hòa và có độ tương phản kém(if (display-graphic-p)mới là điểm mấu chốtEmacs hỗ trợ đầu ra đồ họa thực sự; trên X11/Cocoa/Win32, Esc hoạt động đúng là Esc, có thể dùng các binding Ctrl+Shift hay Cmd, dùng đồng thời nhiều phông chữ, hiển thị ảnh, đổi hình dạng con trỏ, v.v.
Nó giống như một cỗ máy thời gian đưa bạn đến năm 1989, tức 20 năm sau vậy
Đường đỏ chỉ có thể là đỏ mạnh hoặc tắt, và khi thêm đường intensity thì thành đỏ 100%, kiểu như thế
DIRCOLORS,lscũng thực sự hỗ trợ màu 24-bitMàu mặc định quá tối so với nền tối, nên tôi đã tăng độ chói của tất cả màu
Nếu tác giả biết
export COLORTERM=truecolorthì có lẽ đã đỡ vất vả hơn nhiềuNó cũng xuất hiện trong chú thích về phát hiện truecolor của tài liệu Emacs được liên kết và trong ảnh chụp Konsole, nhưng có khả năng đã biến mất bên trong nhiều lớp terminal multiplexer
Đặt giá trị này sẽ giúp ứng dụng hiểu ngay rằng bạn muốn truecolor, nhờ đó có thể bỏ qua phần khó, và cũng không cần cơ sở dữ liệu terminfo
RGBvàoTuy vậy, không phải chương trình nào cũng tôn trọng COLORTERM, nên từng có thời tôi unset
COLORTERMtrong.bashrckhi làlinux | screen*, còn các trường hợp khác thì exportCOLORTERM=truecolorScreen ngày nay hỗ trợ màu 24-bit, nên có lẽ đó là cấu hình từ thời Ubuntu 18
tramphaysshfslà đượcMột phần cũng vì maintainer của ncurses khá bảo thủ, còn các nhà phát triển terminal mới thì muốn tiến nhanh
Với các bản Emacs cũ hơn, vẫn cần cơ sở dữ liệu terminfo
Phần lớn trường hợp không cần định nghĩa nó, nhưng nếu
COLORTERM=truecolorđược đặt trong một phiên screen thì màn hình bỗng trở nên rất kỳ quặc, còn xóa biến môi trường đó đi thì lại bình thườngKhi tương tác với Emacs, không nhất thiết phải dùng terminal
Có thể dùng frontend đồ họa cho MacOS, Windows, X.org, Wayland
Emacs đồ họa, nếu tắt toolbar, trông quá giống Emacs chạy trong terminal đến mức người không biết Emacs dễ nhầm cửa sổ Emacs đồ họa trên máy đồng nghiệp là cửa sổ terminal
Trong khảo sát người dùng Emacs, 80% trả lời rằng họ dùng frontend đồ họa
xterm-mouse-modecũng đã có được 80% lợi íchThêm
mouse,xterm-mouse-mode,mouse-wheel-mode, các thiết lập cuộn, v.v. là dùng khá ổn, cònauto-save-defaultthì cứ đểniltheo ý ChúaMọi chương trình terminal đều chạy trong buffer shell-mode của Emacs đồ họa, và chỉ những chương trình hiếm hoi cần điều khiển toàn màn hình mới dùng term-mode
Nó không phải nhiều tính năng nhất hay nhanh nhất, nhưng có thể di chuyển như các buffer khác và xử lý liền mạch cùng nội dung đang chỉnh sửa
Nếu không mở được Emacs đồ họa trên máy từ xa, thì chỉnh sửa file từ xa bằng tramp, hoặc chạy một server Emacs headless rồi kết nối bằng emacsclient đồ họa
Tôi chưa từng nghĩ rằng người khác có thể cho rằng tôi chạy Emacs trong terminal
Emacs đồ họa tốt hơn nhiều, nhưng việc trên terminal nó vẫn hoạt động và trông giống khoảng 90% cũng vẫn rất tuyệt
Cảm giác nhẹ như terminal chứ không giống VNC
Có các lợi thế như font, dùng đồng thời nhiều font khác nhau, menu, chuột, màu sắc, nhiều frame/cửa sổ
Nếu chạy phần đồ họa ở local và truy cập hệ thống từ xa bằng tramp, thực tế có thể chỉnh sửa cả file cấu hình của router Linux từ xa gần như chỉ có busybox, kèm đủ loại tiện ích
Tôi đã dùng X11 lúc có lúc không từ thập niên 90, nhưng với font thì đến giờ vẫn chỉ ở mức tìm kiếm rồi tình cờ thấy một lệnh chạy được và giữ nguyên không đụng tới nữa
Hiệu năng hiển thị của hầu hết chương trình terminal vẫn nhanh hơn rõ rệt so với cấu hình X11 thường phải dùng trong môi trường doanh nghiệp
Ngày nay chỉ cần cài Emacs mới nhất, mở một terminal hỗ trợ xterm 24-bit, rồi chạy
emacs -nwNếu sau khi áp theme mà trông ổn thì xong; nếu không, thêm
export COLORTERM=truecolorvào.bashrc,.zshrc,.fishrc, v.v., rồi reload shell hoặc chỉ chạy riêng dòng đó và khởi động lạiemacs -nwBài này làm như thể phải đào sâu vào terminfo, nhưng thường thì không cần. 10 năm trước thì có thể, chứ giờ thì không
Tôi vừa kiểm tra nhanh lại trên iTerm của MacOS và Alacritty, Kitty, Gnome Terminal của Linux; ngày nay hỗ trợ xterm 24-bit khá phổ biến
Hôm nay tôi mới biết rằng ngay cả Command Prompt của Windows 10 cũng hỗ trợ chuỗi escape ANSI chuẩn
Màu 24-bit cũng hoạt động tốt
Chạy
echo ^[[48;2;255;0;0mHello^[[0mthì Hello sẽ được in với nền đỏRGB(255,0,0), còn^[[0mđưa màu về như cũ^[phải nhập bằngCTRL-[, không được gõ riêng^và[\x1bhoặc alias\ecùng với lệnh nhận escape codeVí dụ có thể viết như
echo -e '\e[48;2;255;0;0mHello\e[0m'Tuy nhiên trong script,
echo -ekhông chuẩn vàechothường cũng khác nhau ở các trường hợp biên, nên tốt hơn là luôn dùngprintf '\e[48;2;255;0;0mHello\e[0m\n'DEVICE=C:\DOS\ANSI.SYSvào fileC:\CONFIG.SYSĐiểm hay nhất của Emacs so với vim/neovim là nó có hỗ trợ GUI hạng nhất, chứ không chỉ là một terminal emulator nằm trong cửa sổ
Tôi biết có gVim và rất nhiều frontend neovim nửa vời, nhưng cách chạy mặc định của Emacs là GUI thật sự, và tôi thích điều đó
Terminal cũng ổn, nhưng có quá nhiều di sản lịch sử và giới hạn, nhiều chỗ trong thời đại này không còn hợp lý
Nếu vấn đề là chạy Emacs trên server từ xa thì đã có TRAMP và emacsclient
Thật bực khi một ứng dụng GUI không cho sao chép văn bản đang hiển thị, khiến phải gõ lại bằng tay
https://github.com/neovim/neovim/wiki/Related-projects#gui
Tôi rất thích modal editing và vim, nhưng khó chịu nổi kiểu giải pháp nửa vời mà editor trong terminal mang lại
Đã có nền tảng đồ họa phong phú thì tại sao lại không dùng?
Ví dụ tôi gần như chỉ dùng vim để chỉnh sửa file, còn các công cụ bên ngoài như
git, linter, formatter, debugger, thao tác cây file thì quay lại shell để dùngVì vậy ứng dụng chính của tôi vốn đã là terminal emulator, và trong workflow này việc không có GUI chuyên dụng gần như không quan trọng
Thật ra mình muốn Emacs của mình trông như thế này hơn: https://imgur.com/a/h0jA1ro
Nói vậy thôi chứ mình đùa đấy. Cool Retro Term chỉ dùng khi thuyết trình thôi
Xem ra Emacs của mình mặc định chạy màu 24-bit: https://imgur.com/a/BM5OTxp
Chỉ có điều tô sáng cú pháp hơi chướng mắt
Cool Retro Term rất tuyệt, và mình cũng muốn thử dùng nó trong bài thuyết trình
Cá nhân mình thấy các terminal phong cách retro khác không đẹp bằng
Việc nhốt tiêu chuẩn phía sau mức giá đắt như vậy thật sự đáng xấu hổ
Mọi người phải lách đủ cách để khỏi phải mua, và chuyện này có thể dẫn đến những kết quả như thế này
Nếu là tiêu chuẩn thì phải có thể tiếp cận được. Thời còn chỉ phát hành dưới dạng sách thì thu phí in ấn có thể còn hợp lý, nhưng thật khó tin là một file PDF sơ sài lại có giá 200 đô la
Mình đã viết bản vá màu 24-bit cho xterm, nhưng đến hôm nay mới biết cách chạy ncurses với
xterm-directDù mình đã dùng thư viện terminal tự viết bằng Lisp, việc có một đường dự phòng bằng ncurses vẫn hữu ích
Cảm ơn Mr. Dickey đã trả lời câu hỏi trên Stack Overflow và cảm ơn Chad đã nêu chuyện này ra