2017-11-11 10 views
-1

예 : 계속해서 터미널 창을 열고 다음을 입력하십시오.Swift 4에서 Unix 매뉴얼 페이지와 유사한 기능을 가진 명령 행 인터페이스를 작성하는 방법은 무엇입니까?

man ls 

둘러보기; 화살표 키 텍스트를 통해 위 아래로 이동할 수 있으며 터미널 기록이 누락되었음을 알 수 있습니다.

"q"를 사용하여 종료하십시오.

터미널 기록이 반환됩니다. (터미널 역사 사라지는와 입력 대신 작성한 Readline 사용으로 키 입력을 할 수있는 인터페이스와 가장 중요한 출구 에 다시 출현 : 나는 위 않는 인터페이스를 작성하는 방법을 이해하려고 노력 중이 야

). 화면을 지우고 바닥에서 커서를 시작하지만 정말 줄 바꿈을 구현하고 화면 밖으로 이전 컨텐츠를 추진하고있다

: 내가 ANSI 이스케이프 코드를 관리 한 화면 청산 전면에

스크롤 가능한 히스토리를 제거하는 man 페이지와는 다릅니다. 그래서 현재 내가 성취하려고하는 것이 아닙니다.

standardInput

개발자 문서가 에 나열 : 입력으로 키 입력을 복용에 관해서는

, 나는 많이 있지만 재단은 3 참조가 찾을 수 없어 FileHandle, NSUserUnixTask & 프로세스. 아마도 그들 중 한 명이 키 누름을 듣고 올바른 화면으로 인터페이스를 업데이트하고 텍스트의 위치를 ​​변경하거나 작업을 수행하는 데 사용할 수있는 알림으로 응답 할 수 있기를 바랍니다 (종료 및 "남자"와 같은 정상적인 프롬프트는 "q"를 눌러서 수행함).

감사합니다. 감사합니다.

+0

- 당신은'남자 ls'를 실행 한 다음 실제로 이제'PAGER' 환경의 값에 따라'more' (또는'less') 명령을 실행하고, 출력과 상호 작용할 때 변하기 쉬운. 그래서 여러분이 묻는 것은'more' 또는'less' 명령과 비슷한 것을 구현하는 것입니다. – rmaddy

+0

@rmaddy 이것은 정확합니다. 그러나 나는 주로 위에 열거 된 두 가지 주요 기능을 어떻게 구현했는지를 주로 살펴본 것이다. – ANoobSwiftly

답변

0

표준 macOS Cocoa GUI는 이벤트를 사용합니다. 마우스 클릭, 키보드 프레스 등을 나타냅니다. 사용자 입력을 앱에 전달합니다. 이벤트 처리에 관해 읽어보고 사용자가 "q"를 입력하면 앱을 종료 할 수 있습니다. 이것이 키보드 입력의 기본 메커니즘이며 readLine()의 대안입니다.

그러나 설명하는 것은 키 누르기 처리보다 더 복잡합니다. 터미널과 같은 화면 제어가 필요합니다. 화면을 지우는 것 등등. Unix에서 이것을하는 원래의 방법은 낮은 수준의 tty 장치 인터페이스를 사용하고 화면 자체에서 이해할 수있는 제어 코드를 발행하는 것이 었습니다. 현대의 경우 코코아 인터페이스에 이러한 동일한 제어 코드를 구현하는 경우가 많으며 표준 Unix 레벨 명령의 출력이 가능합니다. 예 : 남자 ; 해석 될 것이다. 이것은 무엇입니까 Terminal.app 않습니다. 표준 코코아 텍스트 컨트롤도이 중 일부에 대한 지원을 구현합니다. 특히 Emacs 스타일의 커서 이동 하위 세트가 지원됩니다.

오픈 소스 iTerm2Terminal.app에 오브젝티브 C의 대안의 소스 GitHub 사용할 수있다. 이 글을 읽으면 Objective-C의 Cocoa에서 터미널 윈도우 인터페이스를 구현하는 법을 배울 수 있습니다. Swift와 동일한 기능을 찾아야합니다.

HTH

참고