문제

내가 하려고 쓰는 포탄 루비에서,그리고 구현하 탭을 완료 나를 사용하는 기능 WinAPI getch 문서에서 사용자를 확인합니다.

이 문제입 backspace 키:

  1. 그것은 커서를 이동한 다행히 프롬프트(예를 들어,프롬프트 hello>, 사용자가 있어야합니다.커서에 h.나는 그것을 중지에서 최종 우주.
  2. 사용자가의 텍스트 오버플로우에 대하여 다음의 행 콘솔,백스페이스 이동하지 않습니다 다시 이전까지의 라인입니다.

(나는 모두 알고 있 이러한 행동에 의해 디자인.)

내 상상 이러한 문제에 대한 해결책을 포함하 제어하는 커서 이동;내가 어디에 있는지 알 필요가 커서,그리고 이동할 수 있습니다.

리눅스에서,내가 사용하는 것 ANSI 탈출 시퀀스,그러나이에서 지원되지 않습 Windows console.

내가 보았으로 WinAPI 을 찾을 수 있는 기능을 하 이지만,모든 나 GetConsoleCursorInfo 기능만 크기를 반환하고의 가시성이 커서입니다.

예 평가될 것입니다,나와 같은 희망을 사용하여 Win32API 클래스에는 아무것도 아닌 다른 원시적인 기능입니다.

감사합니다.

도움이 되었습니까?

해결책

당신은 아마 더 나은 사용 readline.그것은에 포함되어 있는 루비나 클릭하고 설치했다.기본 설치:

require 'readline'

while line = Readline.readline('hello> ', true)
  #do something with line
  break if line == 'quit'
end

이미 당신은 표준 readline 기능과 같은 백스페이스,사 단어를 삭제하려면,역사,그리고 탭을 완료합니다.거기에 좋은 설명서에서는 방법이 사용자의 필요에 맞게 사용자 정의 .


편집:

이 없는 경우 readline 설치,당신은 그것을 얻을 수 있습니다 및 기타 외부 라이브러리 .당신이 원 readline-4.3-2-mswin32 패키지입니다.복사 readline.dll 파일(에 위치한 이 bin 디렉토리)을 ruby\bin 디렉토리에 있습니다.그렇게해야합니다.

지 않지만 문서화에 루비,홈페이지는 것처럼 보인다 사용할 수도 있습니다 readline5,용 .특히,당신은 필요합 바이너리 배포합니다.복사 readline5.dll (에 bin 디렉토리)을 ruby\bin 디렉토리고 이름을 변경한다 readline.dll.

또한,주석으로,놀라지 않는 경우 require 'readline' false 를 반환합니다 사용할 경우 irb 기 때문에,나를 미리 로드니다.

다른 팁

Hmm,그것은 확실히 가능하고 합리적으로 휴대용 코드로 bash(1)할 수 있는 다시 이전까지의 라인도에서는 dos 상자입니다.내가 상상 그것은 사용 termcapncurses, 며,그것은에서 에 서 그 대 로 데이터베이스의 세트 제어 코드는 작업에 대한 dos 상자입니다.

루비에서 나는 믿지 않아요 거기에 어떤 에 서 그 대 로 바인딩,그래서 당신이 사용하 ncurses,보다는 오히려 배선 프로그램의 설정 장치를 제어 코드.(당신이 원하는 것이 ncurses 통해 에 서 그 대 로입니다.)

로 전환한 후에는 ncurses 내가 오신 것을 환영합니다!API 요소 할 필요한 모든 것을 포함하여,백업하고 덮어쓰 프롬프트가 표시됩니다.(그리고 당신은 확실히 해야지 다시 아무것도 하지 않았다로 출력을 시작으로,어떠한 라이브러리에 사용할 수 있습니다.)

실제로,나는 같은 종류의 페스토's answer.사용 ncurses 는 경우 readline 밖으로 작동하지 않거나 필요한 경우 커서 해결을 위해 몇 가지 다른 이유입니다.

Windows-friendly readline 구현하려고 이 루비-기반 readline

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top