우분투 가상 터미널 커서 스타일 재설정

우분투 가상 터미널 커서 스타일 재설정

저는 Ubuntu 14.04를 실행 중이고 가상 터미널(TTY[1-6], Ctrl-Alt-F[1-6]을 통해 액세스 가능) 중 하나를 사용하고 있습니다. 커서의 모양을 기본 설정인 깜박이는 밑줄에서 깜박이는 상자로 영구적으로 변경하고 싶습니다. 일시적으로 변경할 수는 있지만 특정 애플리케이션을 실행하면 지속적으로 재설정됩니다.

처음에 TTY 세션의 커서 스타일은 깜박이는 밑줄이었습니다. 다음 명령을 사용하여 깜박이는 상자로 변경할 수 있음을 발견했습니다.

printf '\e[?8c'

이는 터미널의 커서를 변경하고 emacs 또는 elinks와 같은 프로그램에 반영됩니다. 그래서 위 명령을 .bashrc에 넣었습니다.

그러나 특정 응용 프로그램에서는 커서 스타일이 깜박이는 밑줄로 되돌아가는 것처럼 보이며 이러한 현상은 해당 응용 프로그램을 종료한 후에도 지속됩니다. 위 명령을 다시 실행하거나 .bashrc를 소싱하거나 로그아웃했다가 다시 로그인하여 커서 스타일을 깜박이는 상자로 재설정할 수 있습니다.

예를 들어, 다음 3가지 애플리케이션(tmux, emacs, elinks)이 커서 스타일에 어떤 영향을 미치는지 생각해 보세요.

  • 티먹스:커서 스타일은 즉시 깜박이는 밑줄로 설정되고, 이 스타일은 tmux 내에서 실행되는 모든 애플리케이션에서 유지되며, 변경 사항은 tmux를 종료한 후에도 지속됩니다. 위의 printf 명령은 tmux에서는 효과가 없습니다.
  • 이맥스:커서 스타일은 내가 실행할 때 활성화된 스타일이며, emacs를 종료하면 스타일이 깜박이는 밑줄로 변경됩니다.
  • e링크:커서 스타일은 실행했을 때 활성화된 스타일이며 elink를 종료해도 커서 스타일은 변경되지 않습니다.

커서 스타일(emacs 내에서)을 상자로 설정하기 위한 emacs 설정이 있고 tmux 내에서 커서 스타일을 설정하기 위한 설정을 검색하는 동안 tmux 매뉴얼 페이지의 항목 외에는 아무것도 찾을 수 없다는 점에 유의해야 합니다. 상태:

tmux understands some extensions to terminfo(5):

 [...]

 Cs, Csr
         Change the cursor style.  If set, a sequence such as this may be used to change the cursor to an underline:

               $ printf '\033[4 q'

         If Csr is set, it will be used to reset the cursor style instead of Cs.

불행히도 나는 "Cs 설정" 방법을 이해하지 못하며 위에서 언급한 대로 printf 명령을 실행하여 tmux 내부의 커서 스타일을 설정하려고 시도했지만 아무 소용이 없습니다.

또 다른 흥미로운 점은 XFCE4 터미널과 같은 X 터미널 에뮬레이터를 실행할 때 커서 스타일 변경 문제가 발생하지 않는다는 것입니다. 이는 TTY에서만 발생하는 것 같습니다.

이 문제를 겪은 다른 사람들에 대한 정보나 문제를 일으킬 수 있는 언급된 응용 프로그램 내 설정에 대한 정보를 찾을 수 없는 것 같습니다. 이 문제의 원인은 무엇이며 블록 커서 스타일이 일관되게 깜박이도록 문제를 해결하려면 어떻게 해야 합니까?

답변1

터미널 기능은 모든 터미널에서 사용 가능한 것은 아니며 tmux 버전에 따라 다를 수 있습니다. Debian 7의 tmux 1.6에 인용된 설명을 봅니다. Ubuntu 14.04는 약간 오래되었으며 tmux 1.8(동일한 설명)이 있습니다.

매뉴얼 페이지에 제시된 예는 다음과 같습니다 . 이는 다음으로 시작하여 DECSCUSR지원됩니다 .xterm패치 #2522009년. 참조XTerm 제어 시퀀스:

CSI Ps SP q
          Set cursor style (DECSCUSR, VT520).
            Ps = 0  -> blinking block.
            Ps = 1  -> blinking block (default).
            Ps = 2  -> steady block.
            Ps = 3  -> blinking underline.
            Ps = 4  -> steady underline.
            Ps = 5  -> blinking bar (xterm).
            Ps = 6  -> steady bar (xterm).

이를 사용하려면 ncurses의 tic을 사용하여 수정된 terminfo 항목을 만들어야 합니다. 예:

infocmp -x >foo
vi foo
tic -x foo

다음 줄을 추가합니다(다른 기능과 마찬가지로 선행 탭 포함).

Cs=\E[%p\sq, Csr=\E[0\sq,

Cs그러나 tmux 2.1의 소스를 확인하면 더 이상 해당 terminfo 기능을 읽지 않으며 및 색상 설정을 사용하도록 수정되었습니다 (이전 버전에서는 및 를 Cr사용하여 수행됨 ). 최신 버전에는 terminfo 확장 없이 인식할 수 있는 논리가 내장되어 있습니다 .CcCrDECSCUSR

VTE 기반 터미널(예: XFCE 터미널)은 버전에 따라 를 구현할 수 있지만 Linux 콘솔은 터미널(VT220의 상위 집합) 에서 DECSCUSRVT220의 하위 집합만 구현하므로 이를 수행할 가능성이 없습니다 .DECSCUSRVT520

DECSCUSR깜박이는 커서 기능과 같은 다른 커서 스타일 기능과 겹치기 때문에 emacs와 같은 다른 응용 프로그램과 차이점을 볼 수 있습니다. 에 대한 terminfo의 cvvis및 기능을 사용하여 설정하거나 재설정합니다 .cnormxterm

CSI ? Pm h
          DEC Private Mode Set (DECSET).
            Ps = 1 2  -> Start Blinking Cursor (att610).

그러나 Linux 콘솔(가상 콘솔이라고도 함)에서 커서 모양을 수정하려는 것 같습니다. DECSCUSR거기에는 아무런 영향이 없습니다.

커서를 깜박이는 블록으로 만들려면모두시간이 지나면 사용 중인 터미널 설명에서 커서 모양 기능을 변경해야 합니다. civis(커서를 보이지 않게 만들기), ( cnorm커서를 "일반적인" 모양으로 만들기) 및 cvvis(커서를 매우 잘 보이게 만들기):

  • "linux" 항목에 두 항목을 모두 추가하면 \e[?8c해당 항목을 사용하는 emacs와 같은 프로그램이 깜박이는 상자 커서를 사용하게 됩니다.
  • tmux는 또한 터미널 항목을 읽고 cnorm및 를 확인합니다 civis.
  • 반면에 elinks는 터미널 데이터베이스를 무시하고 하드 코딩되어 있습니다. 해당 소스를 빠르게 읽어보면 터미널을 재설정하거나 커서 모양을 수정하는 이스케이프 시퀀스가 ​​표시되지 않습니다.

을 사용하고 있으므로 내부에서 실행 중인 응용프로그램이 해당 커서 스타일을 사용하도록 tmux을 수정해야 할 수도 있습니다 . 하지만 먼저 이것 없이 테스트하세요.xtermtmux~ 해야 하다, 무시하기 때문에 \e[?8c기존 문자열과 결합할 수 있습니다 .cnormxterm\e[?8c

관련 정보