2011-12-02 28 views

Trả lời

12

Theo tiêu chuẩn ECMA-48 cho thiết bị đầu cuối, SGR (Chọn đồ họa Rendition) mã số 9 là nghĩa vụ phải bật văn bản gạch chéo. Tuy nhiên, trang wikipedia ANSI escape code nói rằng nó không được hỗ trợ rộng rãi và tôi không biết bất kỳ điều gì có thể làm. Tôi nghi ngờ đó là bởi vì VTXXx của DEC là didn't support it.

+0

My 'libvterm' /' pangoterm' có thể làm tốt. Xem ảnh chụp màn hình thứ hai trong [link] (http://leonerds-code.blogspot.com/2011/09/libvtermpangoterm-and-tickit.html) – LeoNerd

+3

Trên thực tế một bộ tốt của thiết bị đầu cuối vỏ chính dường như hỗ trợ nó (điều này bao gồm '' guake'', '' terminator'', '' gnome-terminal'', ...). http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility. Kiểm tra nhanh: '' echo -e "\ e [9mtest \ e [0m" ''. – vaab

4

Giải pháp thay thế cho các ứng dụng được viết bằng C11 hoặc C++ 11 là sử dụng ký tự Unicode combining long stroke overlay.

Trong C++ 11 bạn có thể viết mã một cái gì đó như thế này:

#include <iostream> 
#include <string> 

std::string strikethrough(const std::string& text) { 
    std::string result; 
    for (auto ch : text) { 
    result.append(u8"\u0336"); 
    result.push_back(ch); 
    } 
    return result; 
} 

int main() { 
    std::cout << strikethrough("strikethrough") << std::endl; 
} 

Mã tiền tố mỗi nhân vật trong các đầu vào text với lớp phủ đột quỵ \u0336. Lưu ý rằng hàm giả định rằng text được mã hóa bằng mã hóa một byte như ASCII hoặc Latin. Nếu đầu vào nằm trong UTF-8, nó phải được chuyển đổi thành UTF-32 trước tiên để có được ranh giới ký tự.

Kết quả sau đó là s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h trong thiết bị đầu cuối có khả năng UTF-8. Tôi không biết tại sao nhân vật đầu tiên không có cảnh cáo, phải là vấn đề đầu cuối. Tôi có thể giải quyết vấn đề này bằng cách in ít nhất một ký tự trước cuộc gọi hàm strikethrough.

Giải pháp Unicode cũng tạo ra một khóa hơi khác trong thiết bị đầu cuối của tôi (terminator) so với trình tự thoát ANSI được đề cập ở trên. Cái trước ám dòng chính xác ở giữa của văn bản trong khi sau này ám nó một chút dưới đây.

Các vấn đề liên quan