2011-12-02 26 views
7

ANSI çıkış kodlarını zaten inceledim, ancak yalnızca alt çizgi desteği destekleniyor gibi görünüyor.Metin bir konsolda çarpma efektiyle gösteriliyor mu?

Bir şey özlüyor muyum yoksa başka seçenek var mı?

Bu mümkün değilse, "bu kullanımdan kaldırılmış" anlamında bir eşdeğer var mı?

cevap

12

Terminaller için ECMA-48 standardına göre, SGR (Grafik Seçimi Seç) kod numarasının 9, çarpı metnini etkinleştirmesi beklenir. Bununla birlikte, ANSI escape code wikipedia sayfası, yaygın olarak desteklenmediğini ve bunun farkında olmadığını söylüyor. Şüpheliyim çünkü DEC'ın VTxxx serisi didn't support it.

+0

'libvterm' /' pangoterm' bunu gayet iyi yapabilir. [Link] 'deki ikinci ekran görüntüsüne bakın (http://leonerds-code.blogspot.com/2011/09/libvtermpangoterm-and-tickit.html) – LeoNerd

+3

Aslında büyük kabuk terminalinin iyi bir takımı onu destekliyor gibi görünüyor. "guake", "terminatör", "gnome-terminal", ...). http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility. Hızlı test: "echo -e" \ e [9mtest \ e [0m "' '. – vaab

4

C11 veya C++ 11'de yazılan uygulamalar için alternatif bir çözüm, Unicode combining long stroke overlay karakterini kullanmaktır.

#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; 
} 

kod inme bindirme \u0336 ile giriş text her karakteri önek:

C++ 11 yılında böyle kod şey yazabilir. Işlevinin, text'un ASCII veya Latin gibi bir tek kodlu kodlamayla kodlandığını varsayar. Giriş UTF-8 ise, karakter sınırlarını almak için önce UTF-32'ye dönüştürülmelidir.

Bu çıktı, UTF-8 özellikli bir terminalde s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h'dir. İlk karakterin neden çarpmadığını bilmiyorum, bir uçbirim sorunu olmalı. Üstü açılmış işlev çağrısından önce en az bir karakter yazdırarak bu konuda çalışabilirim.

Unicode çözümü ayrıca, terminalimde (terminator) yukarıda bahsedilen ANSI çıkış dizisine kıyasla biraz farklı bir kilitleme oluşturur. Birincisi çizgiyi tam olarak metnin ortasına yerleştirir, ikincisi ise onu biraz aşağıda işler.