Maintenance of Ruby 2.0.0 ended on February 24, 2016. Read more

In Files

  • curses/view2.rb

Class/Module Index [+]

Quicksearch
No matching classes.

FileViewer

A curses based file viewer

Public Class Methods

new(filename) click to toggle source

Create a new fileviewer, and view the file.

 
 # File curses/view2.rb, line 10
def initialize(filename)
 @data_lines = []
 @screen = nil
 @top = nil
 init_curses
 load_file(filename)
 interact
end
 

Public Instance Methods

init_curses() click to toggle source

Perform the curses setup

 
 # File curses/view2.rb, line 20
def init_curses
 # signal(SIGINT, finish)
 Curses.init_screen
 Curses.nonl
 Curses.cbreak
 Curses.noecho
 @screen = Curses.stdscr
 @screen.scrollok(true)
 #$screen.keypad(true)
end
 
interact() click to toggle source

Allow the user to interact with the display. This uses EMACS-like keybindings, and also vi-like keybindings as well, except that left and right move to the beginning and end of the file, respectively.

 
 # File curses/view2.rb, line 92
def interact
 while true
 result = true
 c = Curses.getch
 case c
 when Curses::KEY_DOWN, Curses::KEY_CTRL_N, ?j
 result = scroll_down
 when Curses::KEY_UP, Curses::KEY_CTRL_P, ?k
 result = scroll_up
 when Curses::KEY_NPAGE, ?\s # white space
 for i in 0..(@screen.maxy - 2)
 if( ! scroll_down )
 if( i == 0 )
 result = false
 end
 break
 end
 end
 when Curses::KEY_PPAGE
 for i in 0..(@screen.maxy - 2)
 if( ! scroll_up )
 if( i == 0 )
 result = false
 end
 break
 end
 end
 when Curses::KEY_LEFT, Curses::KEY_CTRL_T, ?h
 while( scroll_up )
 end
 when Curses::KEY_RIGHT, Curses::KEY_CTRL_B, ?l
 while( scroll_down )
 end
 when ?q
 break
 else
 @screen.setpos(0,0)
 @screen.addstr("[unknown key `#{Curses.keyname(c)}'=#{c}] ")
 end
 if( !result )
 Curses.beep
 end
 @screen.setpos(0,0)
 end
 Curses.close_screen
end
 
load_file(filename) click to toggle source

Load the file into memory, and put the first part on the curses display.

 
 # File curses/view2.rb, line 36
def load_file(filename)
 fp = open(filename, "r") do |fp|
 # slurp the file
 fp.each_line { |l|
 @data_lines.push(l.chop)
 }
 end
 @top = 0
 @data_lines[0..@screen.maxy-1].each_with_index{|line, idx|
 @screen.setpos(idx, 0)
 @screen.addstr(line)
 }
 @screen.setpos(0,0)
 @screen.refresh
rescue
 raise "cannot open file '#{filename}' for reading"
end
 
scroll_down() click to toggle source

Scroll the display down by one line

 
 # File curses/view2.rb, line 72
def scroll_down
 if( @top + @screen.maxy < @data_lines.length )
 @screen.scrl(1)
 @top += 1
 str = @data_lines[@top + @screen.maxy - 1]
 if( str )
 @screen.setpos(@screen.maxy - 1, 0)
 @screen.addstr(str)
 end
 return true
 else
 return false
 end
end
 
scroll_up() click to toggle source

Scroll the display up by one line

 
 # File curses/view2.rb, line 56
def scroll_up
 if( @top > 0 )
 @screen.scrl(-1)
 @top -= 1
 str = @data_lines[@top]
 if( str )
 @screen.setpos(0, 0)
 @screen.addstr(str)
 end
 return true
 else
 return false
 end
end
 

AltStyle によって変換されたページ (->オリジナル) /