]>
git.immae.eu Git - perso/Immae/Projets/Ruby/Monitor.git/blob - monitor.rb
f61ce9b8d534361191d46d7ae40222c2d6df934d
9 require_relative
'buffer'
10 require_relative
'windows'
15 buffer
<< read_nonblock(1) while buffer
[-1] !
= "\n"
17 rescue IO
::WaitReadable => blocking
18 if (not buffer
.empty
?)
28 options
= OpenStruct
.new()
31 opt_parser
= OptionParser
.new() do |opts
|
33 opts
.banner
= "Usage: monitor [options]"
36 opts
.on( '-f', "-f ini_file", "chose a different initialization file") do |ini
|
40 opt_parser
.parse!
(args
)
45 def find_ini(option_inifile
)
46 if(not option_inifile
.nil?)
47 inifile
= option_inifile
48 elsif(ENV.has_key
?('MONITOR_RC'))
49 inifile
= ENV['MONITOR_RC']
50 elsif(Process
.uid
== 0)
51 inifile
= "/etc/monitor.rc"
53 inifile
= ENV['HOME']+
"/.monitorrc"
59 inifile
= IniFile
.load(ini
)
61 puts
"Initialization file not found or not readable"
67 def print_line(win
, str
, hscroll
=0)
69 str
[0,5].match(/\033\[3(.)m/) { |c
| #Line starts with an escape sequence. We handle that `a la xterm`
70 Ncurses
.init_pair(10, c
[1].to_i
, Ncurses
::COLOR_BLACK)
71 win
.attron(Ncurses
.COLOR_PAIR(10))
73 str
= str
[5,str
.length
]
75 str
= str
.gsub("\011"," ")
76 #Any other control char is ignored and escaped
77 str
= str
.gsub(/[[:cntrl:]]/) { |m
|
81 strcut
= str
[hscroll
,str
.length
]
82 if(strcut
.nil? or strcut
.empty
?)
89 winlen
= win
.getmaxx-win
.getcurx-1
91 win
.addstr(str +
" "*(winlen-strlen
))
93 win
.addstr(str
[0,winlen-1
]+
"…")
96 win
.attroff(Ncurses
.COLOR_PAIR(10))
100 def make_bufwins(inifile
)
102 inifile
.each_section
do |section
|
103 bufwin
= Buff_Win
.new(Ncurses
.COLS()-Ncurses
.COLS()/4,
111 def update_buffers(bufwins
)
112 bufwins
.each
do |bufwin
|
117 def redraw_all(list
,bufwins
,curr_bufwin
)
118 bufwins
.each
do |bufwin
|
119 bufwin
.move_resize(Ncurses
.COLS()-Ncurses
.COLS()/4,Ncurses.COLS()/4)
121 list
.resize(Ncurses
.LINES(), Ncurses
.COLS()/4)
125 curr_bufwin
.refresh()
129 options
= OptParse
.new().parse(ARGV)
130 inifile
= read_ini(find_ini(options
.inifile
))
135 Ncurses
.cbreak
# provide unbuffered input
136 Ncurses
.noecho
# turn off input echoing
137 #Ncurses.nonl # turn off newline translation
138 #Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt
139 Ncurses
.stdscr
.keypad(true) # turn on keypad mode
140 Ncurses
.init_pair(1, Ncurses
::COLOR_RED, Ncurses
::COLOR_BLACK)
141 Ncurses
.init_pair(10, Ncurses
::COLOR_WHITE, Ncurses
::COLOR_BLACK)
144 list
= List_Win
.new(inifile
)
145 bufwins
= make_bufwins(inifile
)
147 cur_bufwin
= bufwins
[entry
]
148 cur_bufwin
.show_win()
150 while(ch
= list
.getch()) do
153 entry
= (entry +
1) % bufwins
.length
154 cur_bufwin
= bufwins
[entry
]
155 cur_bufwin
.show_win()
156 list
.print_list(entry
=entry
)
158 entry
= (entry
-1) % bufwins
.length
159 cur_bufwin
= bufwins
[entry
]
160 cur_bufwin
.show_win()
161 list
.print_list(entry
=entry
)
163 redraw_all(list
,bufwins
,cur_bufwin
)
165 cur_bufwin
.update(force
=true)
166 when Ncurses
::KEY_RESIZE
167 redraw_all(list
,bufwins
,cur_bufwin
)
168 when Ncurses
::KEY_LEFT
169 cur_bufwin
.hscroll(scroll
=-1)
170 when Ncurses
::KEY_RIGHT
171 cur_bufwin
.hscroll(scroll
=1)
172 when Ncurses
::KEY_DOWN
173 cur_bufwin
.scroll(scroll
=-1)
175 cur_bufwin
.scroll(scroll
=1)
176 when Ncurses
::KEY_NPAGE
177 cur_bufwin
.scroll(scroll
=0,goto
=nil,fact
=-0.75)
178 when Ncurses
::KEY_PPAGE
179 cur_bufwin
.scroll(scroll
=0,goto
=nil,fact
=0.75)
180 when Ncurses
::KEY_HOME
181 cur_bufwin
.scroll(scroll
=0,goto
=1.0)
182 when Ncurses
::KEY_END
183 cur_bufwin
.scroll(scroll
=0,goto
=0.0)
185 update_buffers(bufwins
)
186 cur_bufwin
.show_win()