]> git.immae.eu Git - perso/Immae/Projets/Ruby/Monitor.git/blobdiff - monitor.rb
- Added possibility to mark a line in red, using escape sequence `a la xterm`
[perso/Immae/Projets/Ruby/Monitor.git] / monitor.rb
index 5e32cf28f2d5f83e66e42763f84d50193fc80f87..249e2a3c7d63cfb93f1f66ff0a5ff8a043ad176d 100644 (file)
@@ -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