Shift + 화살표 키를 사용하여 Linux 터미널 에뮬레이터에서 텍스트를 강조 표시 할 수없는 이유는 무엇입니까?


19

다음은 문자 그대로 터미널 에뮬레이터 이외의 Linux 응용 프로그램에서 텍스트를 편집 할 때마다 끊임없이 사용하는 표준 텍스트 편집 키보드 단축키입니다.

  • 왼쪽 + 오른쪽 화살표는 왼쪽 + 오른쪽으로 이동
  • 전체 단어를 이동하려면 Ctrl + 화살표
  • 시작 / 끝으로 이동하는 홈 / 끝
  • ctrl + c / ctrl + v 복사 / 붙여 넣기 [일부 터미널은 shift-ctrl-C / shift-ctrl-V를 사용할 수 있습니다. 이것은 좋은 대용품입니다]
  • 텍스트를 강조 표시하려면 Shift + 화살표
  • 전체 단어를 강조 표시하려면 Shift + Ctrl + 화살표

나는이 목록의 마지막 두 항목을 허용하는 쉘과 터미널 에뮬레이터의 조합을 찾지 못했습니다. 분명히 터미널 에뮬레이터는 강조 표시를 지원하고 (마우스가 할 수 있음) ctrl 및 shift 키를 수정 자로 사용하도록 지원합니다 (커서를 전체 단어를 이동하고 문자를 각각 대문자로 만드는 데 사용할 수 있음). Shift-ctrl-C 및 Shift-ctrl-V를 사용하여 복사 / 붙여 넣기에도 함께 사용할 수 있으므로이 기능을 방해하는 문제는 무엇입니까? 몇 가지 질문이 있습니다.

  • 이것은 터미널 에뮬레이터 또는 셸 (bash, 기꺼이 변경 하시겠습니까?)에 문제입니까?
  • 왜 터미널 에뮬레이터 / 쉘이이 보편적 표준과 맞지 않습니까?
  • 실제적인 이유가 있다면, 고대와 더 이상 사용되지 않습니까 , 아니면 여전히 상당수의 데스크탑 리눅스 사용자와 관련이 있습니까?
  • 해결 방법이 있습니까?
  • 이것을 지원하는 모호한 프로그램이 있습니까?
  • 이를 지원하기 위해 그놈 터미널의 소스를 수정하는 것이 가능합니까?

마우스로 텍스트를 복사 / 붙여 넣을 수 있다는 것을 알고 있습니다. 터미널 에뮬레이터의 키보드로 이러한 작업을 수행 할 수없는 이유를 묻습니다.


마우스로 텍스트를 선택해도 커서 위치는 바뀌지 않습니다. 키보드에 정기적으로 명령을 입력하여 텍스트 선택에 혼합 싶다면, 그냥 것 정말 방금 입력 한 아직 실행되지 명령의 경계를 넘어 혼란. 키보드를 사용하여 웹 페이지의 텍스트 상자 경계를 넘어서 텍스트를 선택할 수 있습니까? 또한 전체 터미널에 대해 텍스트를 선택할 수있는 다른 모드를 입력 할 수있는 화면과 같은 프로그램이 있지만 더 이상 명령을 입력 할 수는 없습니다.
Daniel Beck

1
Daniel : 예를 들어 Matlab 콘솔은 키보드로 텍스트를 강조 표시 할 수있는 CLI입니다. 그것은 내 경험에서 완벽하게 작동합니다. 원하는 경우 아직 실행되지 않은 현재 명령을 넘어서 선택할 수 있습니다. 개인적으로는 거의 사용하지 않습니다.
monguin


답변:


5

한 번에 한 조각 씩 가져 가면 가장 유용하다고 생각합니다. 일반적인 문제는 누구를위한 것입니까? 터미널 또는 터미널 내부에서 실행중인 프로그램?

예를 들어, 일종의 터미널 인 "screen" 은 명령의 접두사로 Ctrl+ A를 사용 하여 실행중인 프로그램 자체로가는 것과 구별합니다. (그리고 Ctrl+ 를 보내는 방법을 제공합니다 A.)

gnome-terminal 요청한 키를 포함하여 다양한 작업을 수행하기 위해 캡처하는 여러 키가 있습니다.

또한 터미널의 "하이라이트"는 터미널의 커서 위치와 별개입니다 . 일부 터미널에는 강조 표시 기능이 전혀 없습니다.

이제이 키 조합을 한 번에 수행하십시오.

왼쪽 + 오른쪽 화살표는 왼쪽으로 이동 + 오른쪽 ctrl + 화살표는 전체 단어를 홈으로 이동 / 끝으로 이동하여 시작 / 끝으로 이동

무엇이 왼쪽과 오른쪽으로 이동? 이를 위해 Bash를 구성 할 수 있으며 일반적으로 기본 설정입니다. 일반적으로 커서 위치가 이동합니다.

복사 / 붙여 넣기 ctrl + c / ctrl + v

첫째 : 복사 / 붙여 넣기도 의미가 있습니까? VT를 사용하는 경우, 특히 X가 실행되지 않는 경우 클립 보드가 없습니다.

일부 터미널은 출력에서 ​​텍스트를 복사 할 수 있으며, 일부 터미널은 클립 보드의 내용을 입력하여 시뮬레이션하여 "붙여 넣기"합니다. 예를 들어 Ctrl+ Shift+를 V붙여 넣으면 gnome-terminal도움이 될 수 있습니다. (그리고 Ctrl+ Shift+ C는 복사입니다.) 앞에서 설명한 것처럼 Ctrl+ CCtrl+ 의 큰 문제 V는 일반적인 터미널 / 프로그램 명령과 겹칩니다. ( Ctrl+ C는 송신 인터럽트 (SIGINT)이고 Ctrl+ V는 그대로입니다.)

일부 터미널은 두 가지 모드의 데이터 복사 모드를 지원합니다.보다 일반적인 "단순 복사"와 "블록 선택"또는 "블록 복사"입니다. ( 예를 들어 Ctrl누른 상태에서 드래그 gnome-terminal합니다.)

또한 xsel -b클립 보드 내용을 파이프하는 데 사용할 수 있습니다. xsel터미널의 페이스트 버전이 더 유용한 지 여부는 정확한 위치에 따라 다릅니다 . 참조하십시오 man xsel.

텍스트를 강조 표시하려면 Shift + 화살표 전체 단어를 강조 표시하려면 Shift + Ctrl + 화살표

터미널의 하이라이트 (이 기능이있는 경우)는 커서 위치와 별개입니다. 다시 말하지만, 이용 가능한 키 콤보가 없을 수도 있습니다. 하이라이트에는 시작과 끝 또는 왼쪽 위와 오른쪽 아래 두 가지 위치가 있습니다. 둘 다 어떻게 관리합니까?

마지막으로, 많은 GUI 터미널에서 단어를 두 번 클릭하면 강조 표시됩니다. (X에서는 기본 선택 항목으로 복사하십시오.)

screen예를 들어 버퍼 주위를 이동하고 (이전 출력) 복사 / 붙여 넣기 모드로 전환하는 키가 있습니다.

나는 당신이 적절하게 사용 xsel하고 주요 선택을하면 클립 보드 작업이 마우스를 사용하여 가치가있을만큼 드물고 복잡하다는 것을 알 수 있습니다.


5
답변을 작성하는 데 걸린 시간에 감사하지만 어떻게 든 이것이 터미널 에뮬레이터에서 사용할 수 없는지에 대해 더 잘 이해하고 있다고 생각하지 않습니다. 터미널 에뮬레이터가 다른 프로그램을 실행할 수 있다는 점에서 독창적이라는 새로운 아이디어를 지적했지만 키 조합의 선택된 하위 집합 만 사용자가 사용할 수없는 이유를 이해하지 못합니다.
monguin

2
터미널 에뮬레이터 물리적 터미널을 에뮬레이션 합니다. 명령 행 인터페이스를 제공하기 위해 처음부터 작성되지 않았습니다. Control-C와 같은 것은 Microsoft가 키보드 단축키로이를 채택하기로 결정하기 오래 전에 의미를 확립했으며 터미널 에뮬레이터는이를 준수해야합니다.
chepner

2
나는 악마가 여기에 상세하게 있다고 생각합니다. 불가능하지는 않습니다 : 화면에는 원하는 것을 할 수있는 모드가 있습니다. 그러나이를 달성하기 위해서는 "사물을 선택하고 싶습니다"모드로 전환해야합니다. gnome-terminal비슷한 문제가있을 것입니다. 실제로하고있는 것이 아니기 때문에 구현하지 않았을 것입니다. 셸은 프로그램이 실행되는 유일한 프로그램이 아니라는 점을 명심하십시오. 모든 프로그램이 실행 중일 수 있으며 자체 목적으로 복사 / 붙여 넣기에 사용할 수있는 모든 키 시퀀스를 사용할 수 있습니다. screen은 오버라이드 한 키를 보내는 방법이 있으며 gnome-terminal은 발가락을 밟지 않습니다.
Thanatos

1
블록 선택은 사각형을 선택하는 수단입니다. 컨트롤을 잡고 그놈 터미널에서 드래그하면 다른 점을 즉시 볼 수 있습니다. 대부분의 GUI 터미널 에뮬레이터에는이 기능이 있으며 대부분의 고급 텍스트 편집기도 있습니다. (예를 들어, vim의 시각적 블록을 참조하십시오.)
Thanatos

1
아, 그러면 블록 선택에 익숙하지만 이름을 알지 못했습니다. 나는 또한 그 행동에 대한 GUI 키보드 단축키를 알지 못하므로 내 질문에 대답하기 위해 하나를 발명 할 필요가없는 것 같습니다. 나는 여기에 모든 사람의 의견을 주셔서 감사합니다,하지만 여전히 불만족스러운, 내가 지금 할 수있는 모든 소스 자체를 파고 생각합니다 ...
monguin

1

터미널 에뮬레이터의 전문가는 아니지만 ...

터미널 에뮬레이터에서 실행되는 bash (readline)와 같은 응용 프로그램은 실행중인 X 윈도우 시스템과 그 안에있는 X 윈도우에 대해 아무것도 알지 못하며 터미널 장치의 stdin 및 stdout을 알고 있습니다 (linux의 ttyS / ttyUSB / tty / pts).

문제는 강조 표시된 일부 텍스트를 표시 하지 않지만 이러한 터미널 장치를 통해 선택한 텍스트를 X 윈도우 응용 프로그램 (터미널 에뮬레이터)에 알리는 방법 입니다.

I는 추측 입력 및 출력에서 이러한 장치의 X 단말 애플리케이션을 오픈 한 후 X 키 이벤트에 적절히 변환 출력 (X 측으로부터) 입력 (배시 측으로부터 참조). bash 출력 스트림을 입력으로 X 터미널에 Viceversa , 여기서 X 터미널은 커서를 이동시키기 위해이 입력을 처리하고 bash 응용 프로그램 출력에 따라 약간의 색상으로 backround를 채 웁니다.

내 지식 이스케이프 코드가 특별한 행동, 명확한처럼을 제어 할 수 있습니다 들어, 배경 채우기 커서를 이동하고, 어쩌면 일부 사용자 정의 이스케이프 코드를 추가 할 수있는 텍스트 그 X 터미널을 알려 행 행에서, COL, COL 예를 들어, 선택된 텍스트가 대신 반환 될 수 있습니다 (구현 세부 사항).

나는 추측 당신은 당신이 원하는 경우 배쉬는 X 터미널 에뮬레이터에있는 모든 사용자가 키 조합을 눌렀에 대해 그것이 알고 지원하려는 응용 프로그램과 출력 적절한 이스케이프 코드는 readline에 패치를해야합니다 표준 정의되지 않는 다른 쪽은 이스케이프 코드를 올바르게 처리하고 마지막으로 정보를 클립 보드에 보냅니다. 아마도 이것을 터미널 기능 으로 구현하면 모든 단일 응용 프로그램을 패치하지 않아도됩니다. 커널의 터미널 장치 드라이버가 이스케이프 코드에 대해 가능한 한 적게 알고 있기를 바랍니다. 운이 좋으면 패치가 필요하지 않습니다.

X 터미널은 출력을 가져 와서 마우스를 사용할 때 어떤 텍스트 / 문자를 선택하고 있는지 쉽게 알 수 있습니다.

그래픽 텍스트 위젯은 X 윈도우에 대한 모든 것을 알고 있으므로 선택 및 복사를 구현하는 것이 쉬운 이유입니다.

편집하다

이 urxvt-9.16 이미지 디스플레이 패치는 새로운 이스케이프 코드를 지원하는 데 필요한 것을 이해하기에 좋은 출발점이 될 수 있습니다. http://lists.schmorp.de/pipermail/rxvt-unicode/2013q1/001736.html


1

이 작업을 수행하는 것이 어려운 이유에 대한 올바른 설명이 제공됩니다. 다음은 터미널 분야의 다른 키를 리 바인드 하여 문자 그대로 전송 및 삽입하는 설정 ctrl-cctrl-v복사 및 붙여 넣기를 위해 gnome-terminal에서 수행 할 수있는 작업입니다 . 일부 프로그램은 터미널 규율을 비활성화하고 '^ C'및 '^ V'를 보낼 수 없기 때문에 이것은 완전한 솔루션이 아닙니다. 자세한 내용은 여기를 참조하십시오 .sttySIGINT

쉘 시작 스크립트에서 (예를 들면 ~/.bashrc, ~/.zshrc, ~/.rcrc) 수행

stty intr '^Q' 2>/dev/null  # To send SIGINT I will use ctrl-q
stty lnext '^A' 2>/dev/null # To insert a character verbatim I will use ctrl-a

그런 다음 그놈 터미널 편집> 기본 설정> 바로 가기에서 복사 및 붙여 넣기를 ctrl-c 및 ctrl-v에 바인딩 할 수 있습니다. 터미널 장치로 무엇이든 보내기 전에 터미널은 주요 이벤트를 수신하므로 터미널에서 실행중인 프로세스에는 '^ C'및 '^ V'를 보낼 수 없습니다.

방금이 작업을 수행했는데 어떻게 진행되는지, 그리고 어떤 문제가 발생하는지 확인할 것입니다. X를 실행할 때만 조건부로 stty를 적용했습니다.


1
답변 주셔서 감사합니다.
그동안

1

타나토스가 언급했듯이, 터미널 에뮬레이터 (X Windows 또는 Wayland에서 실행 )와 터미널 내에서 실행되는 프로그램 간에는 구별이 있습니다 ( "쉘"이라고는 말할 수 없습니다). 이 두 가지는 서로 분리되어 있습니다 ( 기술 세부 사항 참조 ).

목록의 첫 번째 항목 (화살표 키, 홈 / 종료 등)은 터미널 내부의 프로그램에 의해 직접 처리되므로 커서 위치 는 터미널 내부의 프로그램에 의해 제어됩니다.

반면 복사 및 붙여 넣기 바로 가기 (Ctrl + Shift + C 및 Ctrl + Shift + V)는 터미널 에뮬레이터에서 처리합니다.이 에뮬레이터는 마우스를 이해하므로 마우스로 텍스트를 선택할 수 있습니다. 화면에서 (복사 가능), 프로그램 내부의 키 누르기를 보낼 수 있습니다 (붙여 넣기 가능).

Shift + 왼쪽 및 Shift + 오른쪽을 지원하려면 터미널 에뮬레이터 또는 셸에서 키 입력을 처리해야합니다. 어느 쪽이든 우리는 문제가 있습니다 :

  1. 선택한 텍스트를 클립 보드에 복사하려고 할 때 쉘은 이러한 키를 쉽게 처리 할 수 ​​없으며, 클립 보드는 쉘이 반드시 액세스 할 필요는없는 X Windows 개념입니다 (그러나 참조 xclip). 그리고 내가 아는 한, 쉘이 텍스트 선택을 지원하면 Linux는 터미널 에뮬레이터에 선택된 내용을 알리는 메커니즘을 정의하지 않습니다.
  2. 한편, 터미널 에뮬레이터는 커서 위치를 담당하지 않습니다. 터미널 에뮬레이터가 커서의 위치를 ​​변경할 수 있어도 현재 텍스트 줄의 시작과 끝을 모를 것입니다. 예를 들어, 터미널에는 텍스트와 같은 텍스트가 포함될 수 있으며 ~ $ ls -l터미널 에뮬레이터는 ls -l부분 만 사용자에게 속한다 는 것을 인식하지 못합니다 .

Shift + 화살표로 선택을 지원하는 터미널 에뮬레이터를 상상하는 것은 어렵지 않지만 쉘 커서를 숨기고 일시적으로 존재하는 "가짜 커서"를 도입해야 무언가를 선택할 수 있으며 Ctrl 키를 누를 수 있습니다. + C / Ctrl + Shift + C / Ctrl + 입력하여 복사하거나 취소하려면 Esc 키를 누르고 실제 커서를 다시 표시하십시오. 이것은 일반적인 코스 선택의 모든 기능을 가지고 있지는 않습니다. 특히 잘라내 기와 삭제는 존재하지 않습니다.


고마워, 나는 그 TTY 기사를 읽을 것이지만 아직 읽지 않았다. "터미널 에뮬레이터"와 "텍스트 프로그램을 처리하는 데스크톱 응용 프로그램"의 차이점에 대한 이해의 차이를 설명 할 수 있습니다. 필자의 이전 예제 인 Matlab 콘솔은 내가 원하는 방식으로 정확하게 작동합니다. 그 동작을 가진 데스크톱 응용 프로그램이없는 이유를 이해하지 못합니다. 텍스트 응용 프로그램이 Matlab 이외의 다른 곳에서 실행됩니다. 가장 기본적인 쉘 명령 인 ls, cd, cp, mv 만 사용하고 싶다고 말하면 충돌이 보이지 않습니다. screen 또는 tmux와 같은 프로그램은 일이 까다로울 수 있음을 이해합니다.
monguin

1

다음은 80 년대 중반 IBM의 표준 인 CUA 키보드 바인딩입니다.

https://en.wikipedia.org/wiki/IBM_Common_User_Access

그것들은 일반적으로 이후에 만들어진 모든 데스크탑 환경에서 구현됩니다. DOS, Windows, Motif, 심지어 Netware 툴도이 표준에 수렴되었습니다. 한 가지 예외는 Mac인데, 동일한 기간 동안 상당히 유사하지만 다른 세트 (Ctrl 대신 Cmd)를 사용합니다.

그러나 유닉스 터미널은이 표준보다 훨씬 앞선 것으로 대부분 무시했다. 또한 이러한 키 바인딩을 구현 한 경우 다른 기능에 이미 사용중인 TUI 프로그램을 방해 할 수 있습니다. 기술적으로는 가능하지만 문제도 있습니다.

앱 :

micro텍스트 편집기 내가 DOS와 유사한 GUI 텍스트 편집기, 모방에서 본 것 중 최고  edit라 숭고한 텍스트하지만 더 현대적인 기능을. ne데비안 리포지토리의 오래된 버전이며, nano제인 키 바인딩으로 구성 할 수도 있습니다. 그러나 맨손 터미널 / 셸.

으로 libvte는 초보적인 가상 터미널이 핸들이 키 바인딩 자신을 구축하기 쉬운 수 있습니다. 그러나 작은 이득을위한 많은 작업.


0

방금 이와 비슷한 문제를 통해 친구를 도왔으며 클립 보드 관리자 clipit이 범인이라는 것을 알았습니다.

sudo apt-get clipit를 제거하십시오

모든 것을 백업하고 제대로 작동시킬 수있었습니다. 그것이 다른 누군가를 도울 수 있기를 바랍니다.


당신은 잘못된 질문에 대답 했습니까? 이것은 모든 터미널 에뮬레이터의 기능에 대한 일반적인 질문이었습니다. "솔루션"이 없다는 것이 분명합니다. 나는 지금도 아니고 어떤 기계에도 clipit을 설치하지 않았다.
monguin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.