여기에 질문하세요:
- https://serverfault.com/questions/152310/reverse-bash-console-text-flow
- https://superuser.com/questions/719317/can-i-reverse-the-stream-direction-of-my-terminal
- https://askubuntu.com/questions/431873/terminal-with-output-scrolling-down
이 변경 사항을 실제로 구현하려면 어떤 라이브러리/프로그램을 조사해야 합니까? "터미널 스택"의 어느 부분이 터미널 버퍼에 새 줄을 추가하는 역할을 담당합니까?
나는 그것이 터미널 소스에 있을 것이라고 생각했고, 그 다음에는 셸에 있을 것이라고 생각했는데, 이제는 VTE일 것 같습니까?
어떤 충고?
답변1
터미널 에뮬레이터는 다르게 구현됩니다. 변경해야 할 사항은 수정하려는 터미널 에뮬레이터에 따라 다릅니다.
일반적으로 이는 두 가지 위치에서 달성될 수 있습니다. 시뮬레이션 부분에서는 인쇄 및 제어 시퀀스가 터미널의 디스플레이 상태에 대한 메모리 표현의 일부 형태에 대한 수정으로 해석되고, 구현 부분에서는 해당 디스플레이 상태가 렌더링됩니다. 일종의 출력 장치에서.
전자는 매우 복잡한 작업이 될 것입니다. 전체 화면 텍스트 사용자 인터페이스를 제공하는 소프트웨어이든 편집 가능한 한 줄만 제공하는 소프트웨어이든 응용 프로그램 소프트웨어는진행 방향. 그들은 ␊
,,,,,,,,,,,,,,,,,, 등의 방향 과 같은 모든 종류의 것을 가정합니다 . (이론적으로 ECMA-48:1991 호환 장치에서는 행 이동 방향과 암시적 이동 방향을 전환할 수 있습니다. 제가 아는 한 Unix나 Linux 터미널 에뮬레이터는 실제로 이것을 구현하지 않습니다. 세계 최대 규모의 Most는 이것이 전제로 작동합니다. t.) 결국 사람들이 후자의 접근 방식을 어렵게 구현하면 다양한 결과와 파급 효과가 있을 것이라고 생각합니다.␈
␌
␋
RI
IND
CUD
CUU
후자가 상대적으로 쉬운 작업이기 때문입니다. 그냥 재미로 터미널 에뮬레이터에 구현했습니다. 두 구현자의 부울 플래그에 대한 명령줄 스위치와 여러 위치에서 좌표 변환을 수행하는 일부 조건식입니다. 물론, 표시되는 구현 창은 항상 이러한 구현자의 문자 단위 크기의 정수배이므로 추가적인 복잡성을 피할 수 있습니다.
즉, 그것을 사용하고 수년 동안 위에서 아래로 읽는 습관과 싸우고 경험하십시오.초기의작은 것을 기대하는 애플리케이션의 문제(가난한 사람의 캐럿과 같은)위로화살표와 물결표는 불쌍한 사람을 위한 밑줄입니다. 그런 다음 매뉴얼 페이지에 경고 설명을 추가했습니다. 나는 사람들이 지금부터 실제로 터미널에서 그것을 시험해 보고 실제로 그렇게 한다는 결론에 도달할 수 있도록 다음 버전까지 그 메커니즘을 유지할 생각입니다.아니요그들이 뭐라고 말하든 결국 그들은 여전히 이것을 원합니다. ☺
추가 읽기
- 조나단 드 보인 폴라드.
console-termio-realizer
. nosh 도구 세트 매뉴얼 페이지. 소프트웨어. - 조나단 드 보인 폴라드.
console-fb-realizer
. nosh 도구 세트 매뉴얼 페이지. 소프트웨어. - https://unix.stackexchange.com/a/289871/5132
답변2
무엇인가요정밀한달성하고 싶은 행동은 무엇입니까?
먼저 나는 당신이 갖고 싶어한다고 가정합니다모두줄의 순서가 뒤바뀌었습니다항상.
제 생각에는 대부분의 경우 이로 인해 매우 특이하고 직관에 반하는(완전히 깨지지는 않더라도) 동작이 발생하여 매우 빨리 사용을 포기하게 될 것입니다.
cat
텍스트 파일을 편집하면 일반적으로 텍스트를 읽는 방향 대신 아래에서 위로 줄이 표시됩니다. 즐겨 사용하는 텍스트 편집기와 뷰어에서도 줄이 반전됩니다. 앱에서는 상단 표시줄이 하단에 있고 하단 표시줄이 상단에 있습니다. alsamixer에서는 볼륨 컨트롤이 상단에 달려 있습니다. 블록 다이어그램 문자(예: alsamixer, Midnight Commander 등)는 모서리에 펼쳐집니다. 많은 응용 프로그램에서 위쪽 및 아래쪽 키는 커서를 반대 방향으로 이동합니다.
이는 즐겨 사용하는 터미널 에뮬레이터(또는 GNOME 터미널과 같은 VTE 기반 에뮬레이터를 사용하는 경우 VTE)의 소스 코드를 수정하여 수행할 수 있습니다.
기본적으로 터미널 에뮬레이터는 논리적 내용(문자 셀에 그래픽 속성이 포함된 문자가 포함되어 있음)을 추적하고 이를 사용자가 볼 수 있는 픽셀(아름답게 렌더링된 문자 모양)로 변환합니다. 이것을 거꾸로 뒤집어야 합니다. 문자 기반 좌표와 픽셀 기반 좌표 간의 변환이 발생하는 위치, 즉 셀 높이의 곱셈 또는 나눗셈이 발생하는 위치를 찾습니다. 이 공식은 조정되어야 합니다. 예를 들어, 가 보이면 , 또는 이와 유사한 것이 y_pixel = top_padding + row * cell_height
될 수 있습니다 .y_pixel = top_padding + (number_of_rows - 1 - row) * cell_height
VTE에서는 매우 부드러운 스크롤(터치패드를 사용한 픽셀별 스크롤)과 부드러운 스크롤 시 추가 하단 패딩(창 최대화와 같이 그리드에 정렬되지 않은 상황에서)이 콘텐츠를 다음과 같은 방식으로 채웁니다. 추가 두통.
기본 렌더링이 완료된 후에는 선택 항목에 대한 마우스 이벤트를 추적하는 것처럼 응용 프로그램으로 전송된 마우스 이벤트가 올바르게 뒤집혔는지 확인해야 합니다. 스크롤바도 뒤집어야 합니다.
두 번째 단계로 메뉴 항목을 추가하거나 표준 동작과 반전된 동작 사이를 전환할 수 있는 새로운 사용자 정의 이스케이프 시퀀스(아마도 새로운 DEC 개인 번호)를 도입할 수 있습니다. 모드를 변경하면 모든 것(모든 화면 콘텐츠 및 기록)이 즉시 뒤집어지거나 뒤집어집니다. 원래 동작을 복원할 수 있다는 것은 매우 편리합니다. 특히 선호하는 편집기 앞의 래퍼 스크립트에서 자동으로 수행할 수 있는 경우 더욱 그렇습니다. VTE 및 VTE 기반 에뮬레이터의 경우 그래픽 메뉴 항목에는 두 구성 요소 사이에 새로운 API가 필요하므로 이것이 이스케이프 시퀀스를 사용하는 또 다른 이유입니다.
각 명령의 출력이 "정상" 순서로 나오지만 명령 순서가 "역전"되는 등 이보다 더 세분화된 작업을 원하는 경우 더 복잡해지고 에뮬레이터에서 직접 수행할 수 없습니다. 예, 뒤집을 논리 부분을 알기 위해서는 새로 설계된 이스케이프 시퀀스를 통해 도움이 필요합니다. 내 개인적인 조언은 잊어버리라는 것이다. 나는 그것이 실현 가능하다고 생각하지 않는다.