대화형 UI 위젯을 사용하여 stdout 출력 향상을 지원하는 터미널 에뮬레이터가 있습니까?

대화형 UI 위젯을 사용하여 stdout 출력 향상을 지원하는 터미널 에뮬레이터가 있습니까?

좀 더 대화형 터미널이 있다면 프로그램 출력에 대화형 기능을 추가하고 텍스트 요소를 간단한 링크나 컨텍스트 메뉴와 같은 클릭 가능한 위젯으로 변환하여 일부 작업의 속도를 높일 수 있다면 좋을 것 같습니다.

예:

  1. Git과 통합:

자식 지점

, 클릭 가능한 분기 이름으로 변환됩니다. 그 중 하나를 클릭하면 해당 분기로 전환됩니다.

  1. 표준 명령과 통합:

ls -al

ls, 디렉터리 이름을 클릭하면 해당 디렉터리 로 이동합니다 . 마우스 오른쪽 버튼을 클릭하면 "cd to...", "ls 디렉터리..." 등이 포함된 상황에 맞는 메뉴가 표시됩니다.

이러한 스크립트를 지원하고 터미널의 텍스트 창 위에 UI 요소 레이어를 생성하는 기존 솔루션이 있습니까?

답변1

이러한 유형의 기능을 제공하는 TE(터미널 에뮬레이터)에 대한 비디오를 한두 개 본 적이 있습니다. 나는 그 이름을 기억하지 못하며, 다시는 들어본 적도 없는 것 같습니다. 아마도 그럴 만한 이유가 있을 것입니다.

TE에서 이 동작을 구현하는 것은 완전히 절망적입니다. 나는 몇 가지 질문을 통해 이것을 보여주고 싶습니다. 이것은 질문의 성격을 보여주기 위해 고안된 수사적 질문이며, 나는 대답을 기대하지 않으며, 각 대답에 대해 비슷한 성격의 후속 질문을 수십 개 물을 수 있습니다.


먼저 TE가 특정 출력이 ls또는 ls -l이와 유사한 것으로부터 나온다는 것을 어떻게든 알고 있다고 가정합니다. 어떻게 파싱할까요?

ls얼마나 많은 서식 옵션이 있는지 확인하세요 . 긴 목록에는 열이 추가되거나 제거될 수 있습니다. 사용자 정의 형식을 포함하여 여러 날짜 형식이 있으며 최근 파일은 이전 파일과 완전히 다른 두 가지 형식을 가질 수 있습니다. 구문 분석하기 어려운 방법을 포함하여 파일 이름에 특수 문자를 나타내는 방법은 다양합니다.

물론 파서에게 이러한 형식을 모두 가르치려고 할 수도 있지만 어떤 형식을 적용해야 할지 알 수 있을까요? 어떻게? 해당 prompt$ ls -l줄을 찾아 그로부터 알 수 있는 것처럼 실행된 명령을 살펴보나요 ? 아니요, 별칭은 종종 일부 명령줄 스위치를 포함하는 데 사용되기 때문에 모릅니다 ls(다른 유틸리티는 TE에서도 볼 수 없는 환경 변수를 통해 유사하게 제어할 수 있습니다).

어쩌면 사용자가 ls다양한 출력 형식으로 여러 구현을 설치했을 수도 있고 실행했을 수도 있습니다. ~/bin/foo-ls출력을 처리하는 방법은 무엇입니까?

많은 사용자는 대표자 l또는 이와 유사한 별칭을 가지고 있습니다. 이 경우 TE는 어떻게 식별됩니까?llls -l

사용자가 ls $dir또는 ls $(some-command-that-prints-a-directory-name). TE는 어떤 디렉토리 목록이 표시되는지 어떻게 알 수 있나요?


git branch저에게는 호출기가 나타나서 less터미널에 보이는 다른 모든 것을 일시적으로 숨깁니다. 분기 이름만 인쇄하도록 구성할 수도 있고( 호출하지 않고 less) less콘텐츠가 한 페이지에 맞는 경우에만 즉시 종료하도록 지시할 수도 있다고 확신합니다. 내부에 있는 경우 less콘텐츠를 가로로 스크롤하기 시작하면 긴 분기 이름이 부분적으로 사라질 수 있습니다. 또는 도움말 페이지를 호출한 다음 다시 돌아와 실제 콘텐츠를 볼 수 있습니다. TE는 이 모든 것을 어떻게 추적하고 화면의 어떤 단어가 지점 이름인지 알 수 있습니까?

git별칭을 어떻게 식별합니까 ? 예를 들어 git br사용자가 그러한 별칭을 구성했습니까? 예를 들어, TE는 git이후 제대로 작동하지 않는 구성을 조사하고 해결합니까 ssh?


어떤 명령이 실행되고 있는지 어떻게 알 수 있나요? 가장 가까운 추측은 힌트를 구문 분석하는 것입니다(제가 설명했듯이 잘못된 추측으로 이어질 수 있음). 힌트를 어떻게 찾나요? 사용자, 특히 멋진 기능을 요구하는 사용자는 프롬프트를 크게 맞춤화하는 경향이 있습니다. 그렇다면 실행 중인 명령을 찾는 방법은 무엇입니까? 통제할 수 없을 정도로 많은 사용자 정의 가능한 프롬프트를 분석하는 영역에 들어가야 합니다. (여기서 iTerm2의 쉘 통합은 복사할 수 있는 명시적 이스케이프 시퀀스를 통해 멋진 솔루션을 도입합니다.)

또한 내가 어떤 쉘을 사용하고 있는지 어떻게 알 수 있나요? 더 복잡한 명령줄의 경우 쉘마다 구문이 다릅니다.


더 복잡한 명령을 처리하는 방법은 무엇입니까? 예를 들어, 실행 ls; git branch파일 목록이 끝나고 git 분기 목록이 시작되는 위치를 출력에서 ​​어떻게 알 수 있습니까?

cd foo; ls; cd ..; git branch명령과 같은 작업을 위해 디렉터리를 추적하는 방법과 같이 디렉터리 변경을 처리하는 방법은 무엇입니까 ? 을 고려 $CDPATH하고 cd에 별칭을 지정할 수도 있습니다 cd -P.


이제 이러한 모든 문제를 어떻게든 극복했고 TE가 특정 단어에 대한 드롭다운 상자를 표시한다고 가정해 보겠습니다. 사용자가 클릭하면 TE가 작업을 수행하려고 합니다.

어떻게 하나요?

TE에는 내부 애플리케이션(예: 셸)에 명령을 보내는 올바른 방법이 없습니다. 사용자가 입력한 다음 Enter를 누르는 것처럼 키 입력을 합성할 수 있지만 ls -l that-particular-directory쉘이 명령 입력을 기다리고 있고 해당 명령줄이 현재 비어 있는 경우에만 작동합니다. 다른 대화형 응용 프로그램이 실행 중이거나 일부 부분 명령이 입력되었거나 인쇄 ssh연결을 종료한 that-particular-directory경우 이러한 키 입력을 조합하면 문제가 심각하게 중단될 수 있습니다. TE는 현재 이러한 키를 삽입하는 것이 안전한지 어떻게 알 수 있나요?

아니면 TE 자체가 필요한 명령을 실행합니까(그 사이에 셸 없이)? 그러면 출력을 삽입해야 하는 화면의 위치가 혼란스럽지 않습니까? 그리고 그에 속하는 프롬프트와 명령줄도 없습니다. 그리고 그것은 건널 수 없습니다 ssh.


위의 질문은 상황이 어떻게 잘못될 수 있는지를 표면적으로만 보여줍니다.

터미널 에뮬레이션과 그에 따른 애플리케이션은 약 40~50년 동안 발전해 왔으며(잘 모르겠습니다), 이 수준의 유용성은 결코 목표가 아니었습니다. 이를 달성하려면 모든 것이 완전히 다른 방식으로 수행되어야 합니다.

이야기의 개발자 리소스 측면도 있습니다. 그러한 처리를 요구하는 유틸리티 회사는 얼마나 됩니까? 당신은 그것을 언급했고 ls, git내 생각에 당신은 더 많은 것을 생각해 낼 수 있다고 생각합니다. 이 유틸리티에는 몇 개의 작동 모드가 있습니까? 둘 다의 숫자는 엄청납니다. 따라서 우리는 TE가 구문 분석하고, 제공할 작업을 결정하고, 해당 작업을 수행하는 방법을 결정할 수 있어야 하는 수백, 수천, 심지어 수만 개의 명령 출력 형식에 대해 이야기하고 있습니다(작업 디렉토리와 같은 것을 고려). 이후에는 쉘이 수정될 수 있습니다).

누가 이것을 시행할 것인가? 사물의 본질상 아무리 노력해도 필요한 것보다 더 자주 실패할 가능성이 있는 복잡한 경험적 방법이라는 것을 알고 계십니까? 알다분석하다특히 출력이 명시적으로 구문 분석될 수 없는 경우는 물론이고 구문 분석되도록 설계되지 않은 경우 컴퓨터 프로그래밍의 최악의 영역 중 하나입니까? 사용자가 일반적으로 사용하는 별칭 등을 가르쳐 예상대로 작동할 수 있도록 사용자가 쉽게 확장할 수 있는 방식으로 이를 설계하고 구현하는 사람은 누구일까요? 이 모든 유틸리티의 새 버전과 기능을 최신 상태로 유지하려면 누가 관리해야 합니까? 끝없이 쏟아지는 필연적인 버그 보고서를 누가 처리할 것인가? 그것은 실패할 운명이다.


이 접근 방식은 잊어버리세요. 현재와 ​​같은 방식으로 TE 및 TE 기반 애플리케이션을 사용하는 데 익숙해지십시오.

아니면 대체 솔루션을 찾으세요.

git직장에서 그래픽 프런트 엔드를 사용 하고 싶을 수도 있습니다 .

파일 목록과 하위 디렉터리 목록이 자주 필요한 경우 Midnight Commander 또는 다른 그래픽 파일 관리자를 찾을 수 있습니다.

터치 타이핑을 배우면 원하는 내용을 훨씬 더 빠르게 컴퓨터에 전달할 수 있으며, 더 중요한 것은 실제로 주의를 기울이는 데 방해가 되지 않는 완전히 자동적이고 무의미한 작업이 된다는 것입니다. 말하는 것만큼 자연스럽게 타이핑을 해보세요.

관련 정보