저는 Arch Linux에서 urxvt를 실행하고 있습니다. 복사/붙여넣기를 위해 마우스로 출력을 선택할 수 있습니다. 출력에 탭 문자가 포함되어 있으면 문제가 발생합니다. 모든 탭 문자가 선택되어 공백으로 복사됩니다. 이로 인해 특정 출력을 복사할 때 해당 출력의 구조를 유지하기가 어렵습니다.
이 문제를 해결할 방법이 있나요?
편집: 이것이 문제와 관련이 있는 경우 zsh를 사용하고 있습니다.
답변1
저는 이 작업을 수행할 수 있는 터미널을 모릅니다. 왜 어떤 터미널에서도 이 작업을 수행할 수 없다고 생각하는지 말씀드리겠습니다.
tab
여러 문자를 출력하거나 화면에서 커서를 이동하기 위해 표시되었던 많은 문자 중 하나입니다. CR(줄의 시작으로 이동), LF(아래), 백스페이스(왼쪽) 및 커서를 이동하거나 문자 속성을 변경하거나 아무것도 표시하지 않는 모든 이스케이프 시퀀스...
urxvt는 애플리케이션의 출력이 무엇인지 정확히 알 수도 없습니다. 애플리케이션이 의사 터미널의 슬레이브 측으로 LF(\n)를 전송하면 대부분의 경우 LF가 일반적으로 하는 것처럼 커서를 아래로 이동하는 것이 아니라 커서를 다시 슬레이브 측으로 이동한다는 것을 알 수 있습니다. 줄의 시작 . 이는 pty 드라이버가 "\n"을 "\r\n"으로 변환한 후에 "\r\n"으로 변환하기 때문입니다.주인urxvt의 터미널 측(stty를 사용하여 이 동작을 변경할 수 있음)
또한 이 선택 항목은 후행 공백을 캡처하지 않습니다.
그만큼
일부 터미널에서는 의사 터미널의 기본 측면에서 수신하는 모든 문자 캡처를 허용하지만, 그렇지 않은 경우 "스크립트" 또는 "화면"을 대신 사용할 수 있습니다. 그러나 응용 프로그램의 출력을 X 선택 항목에 넣으려면 다음과 같이 간단히 수행할 수도 있습니다.
the-command | xsel
답변2
이 주제는 때때로 다양한 터미널 에뮬레이터에 나타납니다. 토론Debian #259828 xterm: 탭 뒤의 공백은 선택 항목에서 공백 문자로 표시됩니다.(xterm의 경우) urxvt 개발자는 다음과 같은 설명을 했습니다.
나는 이것을 rxvt-unicode에서 구현하는 것을 고려했습니다. 탭은 rxvt-unicode의 데이터 구조로 간단하게 표현될 수 있습니다. 그러나 의미론적 문제가 있습니다.
탭 문자는 문자가 아니라 커서 이동입니다. 따라서 "커서 위로" 또는 "5,6으로 이동"이 선택한 텍스트에 표시되지 않는 것처럼 탭으로 표시할 수 있는 좋은 방법이 없습니다.
그리고 (실제로) urxvt가 이 기능을 지원한다고 계속해서 말합니다.
관심 있는 분이 계시다면 rxvt-unicode-3.8이 이제 HT 문자를 구현하는 방법과 효과에 대한 초기 경험을 소개합니다.
rxvt-unicode-3.8은 HT를 수신하면 먼저 탭 이동(상대 커서 이동)을 계산합니다.이브건너뛴 모든 문자는 첫 번째 공백과 동일한 속성을 가진 공백입니다. 이러한 공백은 (매우) 넓은 탭 문자로 대체됩니다(이것은 rxvt-unicode가 넓은 문자를 처리하는 방식으로 쉽게 수행할 수 있으므로 코드 변경은 scr_tab 메소드의 경우 15줄). 커서는 공백이 아닌 문자가 있거나 속성이 변경되는 경우에만(예: 색상) 이동됩니다.
물론, urxvt 3.8은 한동안 출시되지 않았습니다. 하지만 생각해 보세요애플리케이션장애물 문제:
- 단말기 자체가 해당 기능(라벨을 태그로 저장하고 선택 가능)을 지원하는 한,
- 탭이 오른쪽 여백에 도달하면 터미널은 올바른 작업을 수행해야 합니다(이 버그 보고서는 그렇지 않은 경우를 지적합니다).
- 터미널을 사용하도록 구성해야 합니다.하드 태그(이 설정 참조
stty
), - 애플리케이션(및 ncurses와 같은 라이브러리)은 하드 탭을 사용하도록 구성되어야 합니다.
- screen/tmux와 같은 응용 프로그램은 화면을 그리고 다시 그릴 때 탭을 탭으로 터미널에 보내려면 (다시) 탭을 탭으로 관리해야 합니다.
애플리케이션이 탭을 화면으로 전송한다고 해서 그것이 터미널에 도달한다는 의미는 아닙니다. 여러 레벨의 공간으로 변환될 수 있으며, 중간 레벨에서 화면이 어차피 변하지 않을 것이라고 결정하면 완전히 최적화될 수 있습니다.
urxvt 9.15를 빠르게 확인하면 해당 기능이 여전히 작동함을 알 수 있습니다(물론 가장 간단한 구성에서).
$ /tmp/foo
hello . world
00000000 68 65 6c 6c 6f 09 2e 09 77 6f 72 6c 64 0a |hello...world.|
0000000e
$ cat /tmp/foo
printf 'hello\t.\tworld\n' |xclip
hd
문제가 해결되지 않으면 터미널이 소프트 탭으로 설정되어 있거나 위에서 언급한 다른 문제 중 하나가 방해가 되는 것일 수 있습니다.