X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FRuby%2FMonitor.git;a=blobdiff_plain;f=monitor.rb;h=c2a57f899ff6066cd7a2b8322112ab8a7c09a092;hp=f61ce9b8d534361191d46d7ae40222c2d6df934d;hb=HEAD;hpb=7a1b77020cc139cc9240cd2c7ed2ae8990613d66 diff --git a/monitor.rb b/monitor.rb index f61ce9b..c2a57f8 100644 --- a/monitor.rb +++ b/monitor.rb @@ -1,110 +1,18 @@ #!/usr/bin/env ruby -require "time" require "ncurses" -require "inifile" -require "open3" -require 'optparse' -require 'ostruct' -require_relative 'buffer' +require_relative 'ini_read' require_relative 'windows' +require_relative 'buffer' -class IO - def readline_nonblock - buffer = "" - buffer << read_nonblock(1) while buffer[-1] != "\n" - buffer - rescue IO::WaitReadable => blocking - if (not buffer.empty?) - ungetc(buffer) - end - raise blocking - end -end - -class OptParse - def parse(args) - - options = OpenStruct.new() - options.inifile = nil - - opt_parser = OptionParser.new() do |opts| - - opts.banner = "Usage: monitor [options]" - opts.separator "" - - opts.on( '-f', "-f ini_file", "chose a different initialization file") do |ini| - options.inifile = ini - end - end - opt_parser.parse!(args) - return options - end -end - -def find_ini(option_inifile) - if(not option_inifile.nil?) - inifile = option_inifile - elsif(ENV.has_key?('MONITOR_RC')) - inifile = ENV['MONITOR_RC'] - elsif(Process.uid == 0) - inifile = "/etc/monitor.rc" - else - inifile = ENV['HOME']+"/.monitorrc" - end - return inifile -end - -def read_ini(ini) - inifile = IniFile.load(ini) - if(inifile.nil?) - puts "Initialization file not found or not readable" - exit - end - return inifile -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?) - str = "" - else - str = "…"+strcut - end - end - strlen = str.length - winlen = win.getmaxx-win.getcurx-1 - if(strlen <= winlen) - win.addstr(str + " "*(winlen-strlen)) - else - win.addstr(str[0,winlen-1]+"…") - end - if(revert_color) - win.attroff(Ncurses.COLOR_PAIR(10)) - end -end - -def make_bufwins(inifile) +def make_bufwins(sections,size) bufwins = [] - inifile.each_section do |section| - bufwin = Buff_Win.new(Ncurses.COLS()-Ncurses.COLS()/4, - Ncurses.COLS()/4, - inifile[section]) + sections.each { |section_name,section| + bufwin = Buff_Win.new(Ncurses.COLS()-size*Ncurses.COLS()/100, + size*Ncurses.COLS()/100, + section) bufwins.push(bufwin) - end + } return bufwins end @@ -114,11 +22,11 @@ def update_buffers(bufwins) end end -def redraw_all(list,bufwins,curr_bufwin) +def redraw_all(list,bufwins,curr_bufwin, size) bufwins.each do |bufwin| - bufwin.move_resize(Ncurses.COLS()-Ncurses.COLS()/4,Ncurses.COLS()/4) + bufwin.move_resize(Ncurses.COLS()-size*Ncurses.COLS()/100,size*Ncurses.COLS()/100) end - list.resize(Ncurses.LINES(), Ncurses.COLS()/4) + list.resize(Ncurses.LINES(), size*Ncurses.COLS()/100) list.clear() list.print_list() list.refresh() @@ -126,8 +34,7 @@ def redraw_all(list,bufwins,curr_bufwin) end -options = OptParse.new().parse(ARGV) -inifile = read_ini(find_ini(options.inifile)) +inistruct = Ini_read.new() begin # initialize ncurses Ncurses.initscr @@ -141,8 +48,8 @@ begin Ncurses.init_pair(10, Ncurses::COLOR_WHITE, Ncurses::COLOR_BLACK) - list = List_Win.new(inifile) - bufwins = make_bufwins(inifile) + list = List_Win.new(inistruct.sections, inistruct.global['list_size']) + bufwins = make_bufwins(inistruct.sections, inistruct.global['list_size']) entry = 0 cur_bufwin = bufwins[entry] cur_bufwin.show_win() @@ -160,11 +67,11 @@ begin cur_bufwin.show_win() list.print_list(entry=entry) when 12 #ctrl+L - redraw_all(list,bufwins,cur_bufwin) + redraw_all(list,bufwins,cur_bufwin, inistruct.global['list_size']) when 18 #ctrl+R cur_bufwin.update(force=true) when Ncurses::KEY_RESIZE - redraw_all(list,bufwins,cur_bufwin) + redraw_all(list,bufwins,cur_bufwin, inistruct.global['list_size']) when Ncurses::KEY_LEFT cur_bufwin.hscroll(scroll=-1) when Ncurses::KEY_RIGHT