Question

Je l'ai déjà examiné les codes d'échappement ANSI, mais il semble que seulement soulignement est pris en charge.

Dois-je manqué quelque chose ou est-il une autre option?

S'il est impossible, est-il quelque chose d'équivalent au sens de «c'est dépréciée »?

Était-ce utile?

Autres conseils

Une solution alternative pour des applications écrites en C11 ou C ++ 11 consiste à utiliser le format Unicode combinant longtemps course superposition caractère.

En C ++ 11 vous pouvez écrire quelque chose comme code ceci:

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

Le code préfixes chaque caractère dans la text d'entrée avec la superposition de la course \u0336. On notera que la fonction suppose que text est codé dans un singlebyte codant tel que ASCII ou Latin. Si l'entrée est en UTF-8, il doit être converti en UTF-32 d'abord pour obtenir les limites de caractères.

La sortie est alors s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h dans un terminal capable UTF-8. Je ne sais pas pourquoi le premier caractère n'a pas biffé, doit être un problème terminal. Je pouvais contourner en imprimant au moins un caractère avant l'appel de fonction biffés.

La solution Unicode génère également un verrouillage légèrement différent dans mon terminal (terminator) par rapport à la séquence d'échappement ANSI mentionné ci-dessus. L'ancien rend la ligne exactement au milieu du texte alors que celui-ci, il rend un peu en dessous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top