Una soluzione alternativa per applicazioni scritte in C11 o C++ 11 consiste nell'utilizzare il carattere Unicode combining long stroke overlay.
In C++ 11 è possibile scrivere codice simile a questo:
#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;
}
Il codice prefissi ogni carattere nell'input text
con l'overlay ictus \u0336
. Si noti che la funzione presuppone che text
sia codificato in una codifica singlebyte come ASCII o Latin. Se l'input è in UTF-8, prima deve essere convertito in UTF-32 per ottenere i limiti del personaggio.
L'uscita è quindi s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h
in un terminale con funzionalità UTF-8. Non so perché il primo personaggio non ha strike-through, deve essere un problema terminale. Potrei aggirare questo stampando almeno un carattere prima della chiamata di funzione barrata.
La soluzione Unicode genera anche un blocco leggermente diverso nel mio terminale (terminator
) rispetto alla sequenza di escape ANSI menzionata sopra. Il primo rende la linea esattamente nel mezzo del testo, mentre il secondo lo rende un po 'più in basso.
fonte
2015-10-15 17:04:33
Il mio 'libvterm' /' pangoterm' può farlo bene. Guarda il secondo screenshot in [link] (http://leonerds-code.blogspot.com/2011/09/libvtermpangoterm-and-tickit.html) – LeoNerd
In realtà un buon set del terminale principale della shell sembra supportarlo (questo include '' guake'', '' terminator'', '' gnome-terminal'', ...). http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility. Test rapido: '' echo -e "\ e [9mtest \ e [0m" ''. – vaab