필자는 이미 ANSI 이스케이프 코드를 살펴 봤지만 밑줄 만 지원하는 것처럼 보입니다.취소 선 효과가있는 콘솔에 텍스트를 표시 할 수 있습니까?
내가 놓친 것이 있습니까? 아니면 다른 옵션이 있습니까?
"가능하지 않습니다"와 같은 의미입니까?
필자는 이미 ANSI 이스케이프 코드를 살펴 봤지만 밑줄 만 지원하는 것처럼 보입니다.취소 선 효과가있는 콘솔에 텍스트를 표시 할 수 있습니까?
내가 놓친 것이 있습니까? 아니면 다른 옵션이 있습니까?
"가능하지 않습니다"와 같은 의미입니까?
단말기에 대한 표준 인 ECMA-48에 따르면 SGR (Select Graphic Rendition) 코드 번호 9는 교차 된 텍스트를 사용하도록되어 있습니다. 그러나 ANSI escape code 위키피디아 페이지에는 널리 지원되지 않는다고되어 있습니다. 나는 그것이 DEC의 VTxxx 시리즈 didn't support it이기 때문이라고 생각한다.
C11 또는 C++ 11로 작성된 응용 프로그램의 대체 솔루션은 유니 코드 combining long stroke overlay 문자를 사용하는 것입니다.
#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;
}
코드는 스트로크 오버레이 \u0336
에 입력 text
에서 각 문자를 접두사 :
는 C++ 11에서는이 같은 코드 뭔가를 작성할 수 있습니다. 이 함수는 text
이 ASCII 또는 라틴과 같은 단일 바이트 인코딩으로 인코딩되어 있다고 가정합니다. 입력이 UTF-8 인 경우 문자 경계를 가져 오려면 먼저 UTF-32로 변환해야합니다.
출력은 UTF-8 가능 단말기에서 s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h
입니다. 왜 첫 번째 캐릭터에 스트라이크 스루가 없는지 모르겠다. 터미널 문제 여야한다. 취소 선 함수 호출 전에 적어도 하나의 문자를 인쇄하여이 문제를 해결할 수 있습니다.
유니 코드 솔루션은 위에서 언급 한 ANSI 이스케이프 시퀀스와 비교하여 터미널에서 조금 다른 잠금을 생성합니다 (terminator
). 전자는 텍스트의 중간에 라인을 정확하게 렌더링하지만, 후자는 텍스트를 중간에 렌더링합니다.
내'libvterm' /'pangoterm'은 잘 할 수 있습니다. 실제로 두 번째 스크린 샷을 참조하십시오. (http://leonerds-code.blogspot.com/2011/09/libvtermpangoterm-and-tickit.html) – LeoNerd
실제로 주요 쉘 터미널 세트가이를 지원하는 것 같습니다. ''게놈'',''터미네이터'',''그놈 터미널'', ...). http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility. 빠른 테스트 :''echo -e "\ e [9mtest \ e [0m"''. – vaab