2016-09-07 3 views
0

맨 페이지에서 묻는 메시지가 마치 --more-- 인 것처럼 Ruby에서이 작업을 수행 할 수 있습니까?긴 텍스트 블록을 한 번에 한 화면 씩 표시하려면 어떻게해야합니까?

"pretty_print"또는 "awesome_print"가있는 것일 수 있습니다. 아니면, 라 터미널 창 크기에 대한 받고 정보를 포함합니다 : 당신이 뭔가가 루비에 필요할 것으로 예상 여부 https://gist.github.com/acook/4190037

# via http://www.megasolutions.net/ruby/Getting-the-size-of-the-terminal-in-a-portable-way-26006.aspx 
TIOCGWINSZ = 0x40087468 

def get_winsize 
    str = [0, 0, 0, 0].pack('SSSS') 
    if STDIN.ioctl(TIOCGWINSZ, str) >= 0 
    rows, cols, xpixels, ypixels = str.unpack("SSSS") 
    p rows, cols, xpixels, ypixels 
    else 
    puts "Unable to get window size" 
    end 
end 

답변

1

, 그것은 일반적으로 이미 IO#winsize 구현 것 :

▶ $stdin.winsize 
#⇒ [ 105, 172 ] 

여부 당신은 * nix 머신에 있습니다.이 작업을 수행하려면 more/less 명령을 사용합니다.

▶ text = "very long text" 
▶ system <<CMD 
▷ echo '#{text.gsub("'", "’")}' | less 
▷ CMD 
+0

그래, 루비는 그렇게 굉장한 것처럼 보입니다. 그래서, 큰 텍스트 블록을 인쇄하여 (긴 맨 페이지와 같이) 프롬프트 당 한 화면의 텍스트 만 표시하도록하려면 텍스트는'$ stdout.winsize'를 사용하여 현재 콘솔 창 크기로 포맷됩니까? 내가''io/console ''을 요구할 때 irb에서'$ stdin.winsize'의 "잘못된 파일 기술자"를 얻지 만 stdout은 현재 크기를 표시합니다. –

+1

업데이트를 참조하십시오. 문제를 제대로 이해했다면 내부 OS 명령을 사용해도 충분합니다. 그렇지 않다면, 페이지 매김을 구현해야합니다. – mudasobwa

+0

우수한 단어 : 페이지 매김. 때로는 아이디어를 정확하게 설명하는 것이 많은 도움이됩니다! –

관련 문제