X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FRuby%2FMonitor.git;a=blobdiff_plain;f=monitor.rb;h=249e2a3c7d63cfb93f1f66ff0a5ff8a043ad176d;hp=5e32cf28f2d5f83e66e42763f84d50193fc80f87;hb=9b96f7cb7a37e00044b068cbeb3027d559a4d9f7;hpb=671fb38b7f0ee4168e2854fef26c02104dbc0153 diff --git a/monitor.rb b/monitor.rb index 5e32cf2..249e2a3 100644 --- a/monitor.rb +++ b/monitor.rb @@ -152,6 +152,7 @@ class Buff_Win end def print_buffer() + #clear() win_border() j = 1 @buffer.yield(@win.getmaxy-2,@curr_offset) { |l,type| @@ -185,12 +186,12 @@ class Buff_Win end end - def update() + def update(force=false) if(@params['Type'] == 'continuous') proc_readlines() end if(@params['Type'] == 'oneshot') - if(Time.now - @last_update > @params['Periodic'].to_i) + if(force or (Time.now - @last_update > @params['Periodic'].to_i)) @buffer.clear() spawn_proc() end @@ -257,6 +258,7 @@ class Buffer end end def yield(size,offset=0,&block) + if(size < 0) then size = 0 end range = Range.new(0,@current-1).to_a if(@wrap) range = Range.new(@current,@size-1).to_a + range @@ -291,6 +293,18 @@ def read_ini() end def print_line(win, str, hscroll=0) + revert_color = false + str[0,5].match(/\033\[3(.)m/) { |c| #Line starts with an escape sequence. We handle that `a la xterm` + Ncurses.init_pair(10, c[1].to_i, Ncurses::COLOR_BLACK) + win.attron(Ncurses.COLOR_PAIR(10)) + revert_color = true + str = str[5,str.length] + } + str = str.gsub("\011"," ") + #Any other control char is ignored and escaped + str = str.gsub(/[[:cntrl:]]/) { |m| + "^"+(m.ord + 64).chr + } if(hscroll > 0) strcut = str[hscroll,str.length] if(strcut.nil? or strcut.empty?) @@ -306,6 +320,9 @@ def print_line(win, str, hscroll=0) else win.addstr(str[0,winlen-1]+"…") end + if(revert_color) + win.attroff(Ncurses.COLOR_PAIR(10)) + end end def make_bufwins(inifile) @@ -345,6 +362,7 @@ begin #Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt Ncurses.stdscr.keypad(true) # turn on keypad mode Ncurses.init_pair(1, Ncurses::COLOR_RED, Ncurses::COLOR_BLACK) + Ncurses.init_pair(10, Ncurses::COLOR_WHITE, Ncurses::COLOR_BLACK) inifile = read_ini() @@ -369,6 +387,8 @@ begin list.print_list(entry=entry) when 12 #ctrl+L redraw_all(list,bufwins,cur_bufwin) + when 18 #ctrl+R + cur_bufwin.update(force=true) when Ncurses::KEY_RESIZE redraw_all(list,bufwins,cur_bufwin) when Ncurses::KEY_LEFT