Module: Canis::Io
- Included in:
- ActionManager, PromptMenu, Widget, WidgetMenu
- Defined in:
- lib/canis/core/include/io.rb
Instance Method Summary collapse
-
#__create_footer_window(h = 2, w = Ncurses.COLS, t = Ncurses.LINES-2, l = 0) ⇒ Object
create a 2 line window at bottom to accept user input.
- #clear_this(win, r, c, color, len) ⇒ Object
-
#get_file(prompt, config = {}) ⇒ String
This is just experimental, trying out tab_completion Prompt user for a file name, allowing him to tab to complete filenames.
-
#print_this(win, text, color, x, y) ⇒ Object
prints given text to window, in color at x and y coordinates.
-
#rb_getchar(prompt, config = {}) ⇒ Integer
get a character.
-
#rb_gets(prompt, config = {}) {|Field| ... } ⇒ String?
get a string at the bottom of the screen.
- #rb_getstr(nolongerused, r, c, prompt, maxlen, config = {}) ⇒ Object deprecated Deprecated.
-
#warn(string) ⇒ Object
warn user: currently flashes and places error in log file experimental, may change interface later it does not say anything on screen.
Instance Method Details
#__create_footer_window(h = 2, w = Ncurses.COLS, t = Ncurses.LINES-2, l = 0) ⇒ Object
create a 2 line window at bottom to accept user input
26 27 28 |
# File 'lib/canis/core/include/io.rb', line 26 def h = 2 , w = Ncurses.COLS, t = Ncurses.LINES-2, l = 0 ewin = Canis::Window.new(h, w , t, l) end |
#clear_this(win, r, c, color, len) ⇒ Object
256 257 258 |
# File 'lib/canis/core/include/io.rb', line 256 def clear_this win, r, c, color, len print_this(win, "%-*s" % [len," "], color, r, c) end |
#get_file(prompt, config = {}) ⇒ String
This is just experimental, trying out tab_completion Prompt user for a file name, allowing him to tab to complete filenames
243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/canis/core/include/io.rb', line 243 def get_file prompt, config={} #:nodoc: maxlen = 70 tabc = Proc.new {|str| Dir.glob(str +"*") } config[:tab_completion] ||= tabc config[:maxlen] ||= maxlen #config[:default] = "test" #ret, str = rb_getstr(nil,0,0, prompt, maxlen, config) # 2014-04-25 - 12:42 removed call to deprecated method str = rb_gets(prompt, config) #$log.debug " get_file returned #{ret} , #{str} " str ||= "" return str end |
#print_this(win, text, color, x, y) ⇒ Object
prints given text to window, in color at x and y coordinates
270 271 272 273 274 275 276 277 278 |
# File 'lib/canis/core/include/io.rb', line 270 def print_this(win, text, color, x, y) raise "win nil in print_this" unless win color=Ncurses.COLOR_PAIR(color); win.attron(color); #win.mvprintw(x, y, "%-40s" % text); win.mvprintw(x, y, "%s" % text); win.attroff(color); win.refresh end |
#rb_getchar(prompt, config = {}) ⇒ Integer
get a character. unlike rb_gets allows user to enter control or alt or function character too. If default provided, then ENTER returns the default
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/canis/core/include/io.rb', line 188 def rb_getchar(prompt, config={}) # yield field begin win = #form = Form.new win r = 0; c = 1; default = config[:default] prompt = "#{prompt} [#{default}] " if default win.mvprintw(r, c, "%s: " % prompt); bg = Ncurses.COLORS >= 236 ? 236 : :blue color_pair = get_color($reversecolor, :white, bg) win.printstring r, c + prompt.size + 2, " ", color_pair win.wrefresh prevchar = 0 entries = nil while ((ch = win.getchar()) != 999) return default.ord if default && (ch == 13 || ch == KEY_ENTER) return nil if ch == ?\C-c.getbyte(0) || ch == ?\C-g.getbyte(0) if ch == KEY_F1 help_text = config[:help_text] || "No help provided. C-c/C-g aborts." help_text, :wait => 7 win.wrefresh # nevr had to do this with ncurses, but have to with ffi-ncurses ?? next end if config[:regexp] reg = config[:regexp] if ch > 0 && ch < 256 chs = ch.chr return ch if chs =~ reg alert "Wrong character. #{reg} " else alert "Wrong character. #{reg} " end else return ch end #form.handle_key ch win.wrefresh end rescue => err Ncurses.beep $log.error "EXC in rb_getstr #{err} " $log.error(err.backtrace.join("\n")) ensure win.destroy if win end return nil end |
#rb_gets(prompt, config = {}) {|Field| ... } ⇒ String?
get a string at the bottom of the screen
help_text is displayed on F1 tab_completion is a proc which helps to complete user input
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/canis/core/include/io.rb', line 39 def rb_gets(prompt, config={}) # yield field if config.is_a? Hash # okay # elsif config.is_a? Array # an array is supplied, and tabbing helps complete from that # array. = config completion_proc = Proc.new{|str| .dup.grep Regexp.new("^#{str}"); } config = {} config[:tab_completion] = completion_proc elsif config == Pathname # we need to return a pathname TODO and prepend dirname # allow user to specify startdir else take current completion_proc = Proc.new {|str| Dir.glob(str +"*").collect { |f| File.directory?(f) ? f+"/" : f } } help_text = "Enter start of filename and tab to get completion" config = {} config[:tab_completion] = completion_proc config[:help_text] = help_text elsif config == Integer config = {} config[:datatype] = 1.class config[:type] = :integer elsif config == Float config = {} v = 0.11 config[:datatype] = v.class config[:type] = :float elsif config == :phone config = {} end begin win = form = Form.new win r = 0; c = 1; default = config[:default] || "" prompt = "#{prompt} [#{default}]:" if default.size > 0 _max = FFI::NCurses.COLS-1-prompt.size-4 displen = config[:width] || [config[:maxlen] || 999, _max].min maxlen = config[:maxlen] || _max field = LabeledField.new form, :row => r, :col => c, :maxlen => maxlen, :default => default, :label => prompt, :width => displen field.datatype(config[:datatype]) if config[:datatype] field.type(config[:type]) if config[:type] bg = Ncurses.COLORS >= 236 ? 233 : :blue field.bgcolor = bg field.cursor_end if default.size > 0 def field.default=(x); default(x);end # if user wishes to use the yield and say "field.history = [x,y,z] then # we should alredy have extended this, so lets make it permanent require 'canis/core/include/rhistory' field.extend(FieldHistory) field.history = config[:history] yield field if block_given? form.repaint win.wrefresh prevchar = 0 entries = nil oldstr = nil # for tab completion, origal word entered by user while ((ch = win.getchar()) != 999) if ch == 10 || ch == 13 || ch == KEY_ENTER begin # validate in case ranges or other validation given field.on_leave break rescue FieldValidationException => err # added 2011-10-2 v1.3.1 so we can rollback #alert err.to_s # unable to use alert now, since closing alert repaints root window and clears the # window this was on (command window in numbered menu). print_this(win, err.to_s, $errorcolor, 1, 0) form.setpos rescue => err Ncurses.beep break end end #return -1, nil if ch == ?\C-c.getbyte(0) || ch == ?\C-g.getbyte(0) return nil if ch == ?\C-c.getbyte(0) || ch == ?\C-g.getbyte(0) #if ch == ?\M-h.getbyte(0) # HELP KEY #help_text = config[:help_text] || "No help provided" #color = $datacolor #print_help(win, r, c, color, help_text) ## this will come over our text #end # tab completion and help_text print on F1 # that field objects can extend, same for tab completion and gmail completion if ch == KEY_TAB if config str = field.text # tab_completion # if previous char was not tab, execute tab_completion_proc and push first entry # else push the next entry if prevchar == KEY_TAB if !entries.nil? && !entries.empty? str = entries.delete_at(0) else str = oldstr if oldstr prevchar = ch = nil # so it can start again completing end else tabc = config[:tab_completion] unless tabc next unless tabc oldstr = str.dup entries = tabc.call(str).dup $log.debug " tab got #{entries} for str=#{str}" str = entries.delete_at(0) unless entries.nil? || entries.empty? str = str.to_s.dup end if str field.text = str field.cursor_end field.set_form_col # shit why are we doign this, text sets curpos to 0 end form.repaint win.wrefresh end elsif ch == KEY_F1 help_text = config[:help_text] || "No help provided. C-c/C-g aborts. <TAB> completion. Alt-h history. C-a/e" help_text, :wait => 7 else form.handle_key ch end prevchar = ch win.wrefresh end rescue => err Ncurses.beep textdialog [err.to_s, *err.backtrace], :title => "Exception" $log.error "EXC in rb_getstr #{err} " $log.error(err.backtrace.join("\n")) ensure win.destroy if win end config[:history] << field.text if config[:history] && field.text return field.text end |
#rb_getstr(nolongerused, r, c, prompt, maxlen, config = {}) ⇒ Object
routine to get a string at bottom of window. The first 3 params are no longer required since we create a window of our own. help_text is displayed on F1 tab_completion is a proc which helps to complete user input NOTE : This method is now only for **backward compatibility** rb_getstr had various return codes based on whether user asked for help possibly mimicking alpine, or because i could do nothing about it. Now, rb_getstr handles that and only returns if the user cancels or enters a string, so rb_getstr does not need to return other codes.
307 308 309 310 311 312 313 314 315 |
# File 'lib/canis/core/include/io.rb', line 307 def rb_getstr(nolongerused, r, c, prompt, maxlen, config={}) config[:maxlen] = maxlen str = rb_gets(prompt, config) if str return 0, str else return -1, nil end end |