]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env ruby | |
2 | ||
3 | require "ncurses" | |
4 | require_relative 'ini_read' | |
5 | require_relative 'windows' | |
6 | require_relative 'buffer' | |
7 | ||
8 | def make_bufwins(sections,size) | |
9 | bufwins = [] | |
10 | sections.each { |section_name,section| | |
11 | bufwin = Buff_Win.new(Ncurses.COLS()-size*Ncurses.COLS()/100, | |
12 | size*Ncurses.COLS()/100, | |
13 | section) | |
14 | bufwins.push(bufwin) | |
15 | } | |
16 | return bufwins | |
17 | end | |
18 | ||
19 | def update_buffers(bufwins) | |
20 | bufwins.each do |bufwin| | |
21 | bufwin.update() | |
22 | end | |
23 | end | |
24 | ||
25 | def redraw_all(list,bufwins,curr_bufwin, size) | |
26 | bufwins.each do |bufwin| | |
27 | bufwin.move_resize(Ncurses.COLS()-size*Ncurses.COLS()/100,size*Ncurses.COLS()/100) | |
28 | end | |
29 | list.resize(Ncurses.LINES(), size*Ncurses.COLS()/100) | |
30 | list.clear() | |
31 | list.print_list() | |
32 | list.refresh() | |
33 | curr_bufwin.refresh() | |
34 | end | |
35 | ||
36 | ||
37 | inistruct = Ini_read.new() | |
38 | begin | |
39 | # initialize ncurses | |
40 | Ncurses.initscr | |
41 | Ncurses.start_color | |
42 | Ncurses.cbreak # provide unbuffered input | |
43 | Ncurses.noecho # turn off input echoing | |
44 | #Ncurses.nonl # turn off newline translation | |
45 | #Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt | |
46 | Ncurses.stdscr.keypad(true) # turn on keypad mode | |
47 | Ncurses.init_pair(1, Ncurses::COLOR_RED, Ncurses::COLOR_BLACK) | |
48 | Ncurses.init_pair(10, Ncurses::COLOR_WHITE, Ncurses::COLOR_BLACK) | |
49 | ||
50 | ||
51 | list = List_Win.new(inistruct.sections, inistruct.global['list_size']) | |
52 | bufwins = make_bufwins(inistruct.sections, inistruct.global['list_size']) | |
53 | entry = 0 | |
54 | cur_bufwin = bufwins[entry] | |
55 | cur_bufwin.show_win() | |
56 | list.print_list() | |
57 | while(ch = list.getch()) do | |
58 | case(ch) | |
59 | when "n".ord | |
60 | entry = (entry +1) % bufwins.length | |
61 | cur_bufwin = bufwins[entry] | |
62 | cur_bufwin.show_win() | |
63 | list.print_list(entry=entry) | |
64 | when "p".ord | |
65 | entry = (entry -1) % bufwins.length | |
66 | cur_bufwin = bufwins[entry] | |
67 | cur_bufwin.show_win() | |
68 | list.print_list(entry=entry) | |
69 | when 12 #ctrl+L | |
70 | redraw_all(list,bufwins,cur_bufwin, inistruct.global['list_size']) | |
71 | when 18 #ctrl+R | |
72 | cur_bufwin.update(force=true) | |
73 | when Ncurses::KEY_RESIZE | |
74 | redraw_all(list,bufwins,cur_bufwin, inistruct.global['list_size']) | |
75 | when Ncurses::KEY_LEFT | |
76 | cur_bufwin.hscroll(scroll=-1) | |
77 | when Ncurses::KEY_RIGHT | |
78 | cur_bufwin.hscroll(scroll=1) | |
79 | when Ncurses::KEY_DOWN | |
80 | cur_bufwin.scroll(scroll=-1) | |
81 | when Ncurses::KEY_UP | |
82 | cur_bufwin.scroll(scroll=1) | |
83 | when Ncurses::KEY_NPAGE | |
84 | cur_bufwin.scroll(scroll=0,goto=nil,fact=-0.75) | |
85 | when Ncurses::KEY_PPAGE | |
86 | cur_bufwin.scroll(scroll=0,goto=nil,fact=0.75) | |
87 | when Ncurses::KEY_HOME | |
88 | cur_bufwin.scroll(scroll=0,goto=1.0) | |
89 | when Ncurses::KEY_END | |
90 | cur_bufwin.scroll(scroll=0,goto=0.0) | |
91 | when Ncurses::ERR | |
92 | update_buffers(bufwins) | |
93 | cur_bufwin.show_win() | |
94 | when "q".ord | |
95 | break | |
96 | else | |
97 | next | |
98 | end | |
99 | end | |
100 | ||
101 | ensure | |
102 | Ncurses.echo | |
103 | Ncurses.nocbreak | |
104 | Ncurses.nl | |
105 | Ncurses.endwin | |
106 | end |