터미널에서 현재 글꼴의 크기를 얻는 방법은 무엇입니까?

터미널에서 현재 글꼴의 크기를 얻는 방법은 무엇입니까?

저는 알파벳 문자를 사용하여 매우 뭉툭한 그래픽을 만드는 ncurses 응용 프로그램을 작업하고 있습니다. 그래픽이 렌더링되는 방식을 변경하여(정사각형이 항상 정사각형처럼 보이도록) 글꼴 문자 모양의 크기(특히 종횡비)를 감지할 수 있기를 원합니다.

나는 사용할 수있다

void getmaxyx(WINDOW *win, int y, int x);

ncurses의 함수는 화면/창의 크기를 얻을 수 있지만 많은 창의 크기를 자유롭게 조정할 수 있으므로 신뢰할 수 없습니다. 글꼴 크기를 검색하는 유사한 기능(또는 외부 메커니즘)이 있습니까?

답변1

호환 xterm되거나 제공된 글꼴 조작 이스케이프 시퀀스가 ​​비활성화되지 않았습니다.

$ xtermcontrol --get-font
DejaVu Sans Mono

그러면 <ESC>]50;?<ESC>\이스케이프 시퀀스가 ​​전송되고 터미널이 응답합니다 <ESC>]50;font-name<ESC>\. 바라보다인용하다.

따라서 다음을 사용하여 쿼리할 수도 있습니다 zsh.

$ IFS=$';\e' read -rsd'\' -t0.2 $'font?\e]50;?\e\\' font font rest
$ typeset font
font='DejaVu Sans Mono'

allowFontOps그러나 일반적으로 기본적으로 비활성화되어 있습니다. *allowFontOps: true리소스를 활성화하도록 설정하거나 비활성화하는 것이 더 좋지만 *disallowedFontOps: SetFont허용 GetFont하되 허용하지 않도록 설정할 수 있습니다 SetFont.

치수의 경우 다음을 설정합니다.

*disallowedWindowOps: 1,2,3,4,5,6,7,8,9,11,13,19,20,21,GetSelection,SetSelection,SetWinLines,SetXprop

GetWinSizeChars리소스, 즉 GetWinSizePixels다음을 제외한 모든 리소스는 허용되지 않습니다 zsh.

$ IFS=';t' read -rsdt -t0.2 $'x?\e[18t' cy cx rest
$ IFS=';t' read -rsdt -t0.2 $'x?\e[14t' y x rest
$ echo ${x}x${y} ${cx}x${cy}
1916x1012 147x38

\e[18t\e[14t다음을 사용하여 셀 크기를 얻을 수 있도록 셀 수와 픽셀 수로 창 크기를 요청합니다 .

$ printf '%gx%g\n' '1.*x/cx' '1.*y/cy'
13x26

답변2

안녕하세요, 화창한 아테네에서 왔습니다. Font_size 또는 다양한 글꼴 등과 같은 것은 불행히도 하드웨어용 그래픽 드라이버를 로드하고 이를 그래픽 환경으로 적용하는 것과 관련이 있습니다. Linux의 그래픽 환경 대신 Linux의 그래픽 환경을 사용하는 경우에만 가능합니다. 그때에만 로드됩니다. 어떤 경우든 콘솔(영숫자 모드만 해당) 또는 CTRL+T를 사용하여 Windows 세션 중에 터미널을 활성화합니다. 다양한 글꼴 크기를 사용할 수 있는 유일한 방법은 ncurses를 통해서이지만 POSIX 표준에 따르면 이는 불가능합니다. 어떤 상황에서든 다양한 글꼴 크기를 적용하려면 다양한 환경이 있습니다.처리java 지원, 이것이 해결책을 제공할 것입니다. 아테네에서 인사드립니다 코스타스 베르기디스

관련 정보