Top Level Namespace
Instance Method Summary collapse
-
#getchr ⇒ Object
GENERAL FUNCTIONS.
-
#main_getkey ⇒ Object
GET KEY FROM USER.
-
#w_b(info) ⇒ Object
BOTTOM WINDOW FUNCTIONS.
-
#w_b_getstr(pretext, text) ⇒ Object
A SIMPLE READLINE-LIKE ROUTINE.
-
#w_r_info(info) ⇒ Object
RIGHT WINDOW FUNCTIONS.
Instance Method Details
#getchr ⇒ Object
GENERAL FUNCTIONS
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 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 |
# File 'lib/curses-template.rb', line 167 def getchr # Process key presses c = STDIN.getch #c = STDIN.getch(min: 0, time: 1) # Use this if you need to poll for user keys case c when "\e" # ANSI escape sequences case STDIN.getc when '[' # CSI case STDIN.getc when 'A' then chr = "UP" when 'B' then chr = "DOWN" when 'C' then chr = "RIGHT" when 'D' then chr = "LEFT" when 'Z' then chr = "S-TAB" when '2' then chr = "INS" ; chr = "C-INS" if STDIN.getc == "^" when '3' then chr = "DEL" ; chr = "C-DEL" if STDIN.getc == "^" when '5' then chr = "PgUP" ; chr = "C-PgUP" if STDIN.getc == "^" when '6' then chr = "PgDOWN" ; chr = "C-PgDOWN" if STDIN.getc == "^" when '7' then chr = "HOME" ; chr = "C-HOME" if STDIN.getc == "^" when '8' then chr = "END" ; chr = "C-END" if STDIN.getc == "^" end when 'O' # Set Ctrl+ArrowKey equal to ArrowKey; May be used for other purposes in the future case STDIN.getc when 'a' then chr = "C-UP" when 'b' then chr = "C-DOWN" when 'c' then chr = "C-RIGHT" when 'd' then chr = "C-LEFT" end end when "", "" then chr = "BACK" when "" then chr = "C-C" when "" then chr = "C-D" when "" then chr = "C-E" when "" then chr = "C-G" when "" then chr = "C-K" when "" then chr = "C-L" when "" then chr = "C-N" when "" then chr = "C-O" when "" then chr = "C-P" when "" then chr = "C-T" when "" then chr = "C-Y" when "" then chr = "WBACK" when "" then chr = "LDEL" when "\r" then chr = "ENTER" when "\t" then chr = "TAB" when /[[:print:]]/ then chr = c end return chr end |
#main_getkey ⇒ Object
GET KEY FROM USER
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/curses-template.rb', line 215 def main_getkey # GET KEY FROM USER chr = getchr case chr when '?' # Show helptext in right window - add code to show help text here @w_t.p0(255,27,"Try pressing 'w'") @w_t.update = false # Examples of moving up and down in a window # You must set @min_index and @max_index in the main loop of the program when 'UP' @w_l.index = @w_l.index <= @min_index ? @max_index : @w_l.index - 1 when 'DOWN' @w_l.index = @w_l.index >= @max_index ? @min_index : @w_l.index + 1 when 'PgUP' @w_l.index -= @w_l.maxy - 2 @w_l.index = @min_index if @w_l.index < @min_index when 'PgDOWN' @w_l.index += @w_l.maxy - 2 @w_l.index = @max_index if @w_l.index > @max_index when 'HOME' @w_l.index = @min_index when 'END' @w_l.index = @max_index when 'w' # Shows how you can add a window and get input from there and then close the window maxx = Curses.cols maxy = Curses.lines # Curses::Window.new ( h, w, y, x) @w_w = Curses::Window.new( 6, 20, maxy/2-3, maxx/2-10) @w_w.fg, @w_w.bg, @w_w.attr = 255, 233, Curses::A_BOLD @w_w.frame @w_w.setpos(4, 7) @w_w.p(255,130," y/n? ") chrw = getchr case chrw when 'y' @w_w.setpos(4, 7) @w_w.p(255,22," YES! ") when 'n' @w_w.setpos(4, 7) @w_w.p(255,52," NO!! ") end chrw = getchr @w_l.fill; @w_r.fill # Fill the underlying windows to remove the overlaying window @w_w.close # Remove the overlying window from memory when 'a' # ...etc when 'r' @break = true when 'q' # Exit exit 0 when '@' # Enter "Ruby debug" cmd = w_b_getstr("◆ ", "") @w_b.update = true @w_r.fill info = "Command: #{cmd}\n\n" begin info += eval(cmd).to_s rescue Exception => err info += "Error: #{err.inspect}" end w_r_info(info) @w_r.update = false cmd = w_b_getstr("◆ ", "") begin @w_r.fill @w_r.p(eval(cmd)) rescue StandardError => e w_b("Error: #{e.inspect}") chr = STDIN.getc end end while STDIN.ready? chr = STDIN.getc end end |
#w_b(info) ⇒ Object
BOTTOM WINDOW FUNCTIONS
293 294 295 296 297 298 299 300 301 |
# File 'lib/curses-template.rb', line 293 def w_b(info) # SHOW INFO IN @W_B @w_b.fill info = "Choose window: i=IMDB list (+/- to add/remove from my? list), g=Genres (+/- to add/remove), m=my? list. " if info == nil info = info[1..(@w_b.mx? - 3)] + "…" if info.length + 3 > @w_b.mx? info += " " * (@w_b.mx? - info.length) if info.length < @w_b.mx? @w_b.p(info) @w_b.nl @w_b.update = false end |
#w_b_getstr(pretext, text) ⇒ Object
A SIMPLE READLINE-LIKE ROUTINE
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/curses-template.rb', line 302 def w_b_getstr(pretext, text) # A SIMPLE READLINE-LIKE ROUTINE Curses.curs_set(1) Curses.echo stk = 0 pos = text.length chr = "" while chr != "ENTER" @w_b.xy(0,0) @w_b.p(pretext + text) @w_b.nl @w_b.xy(pretext.length + pos,0) @w_b.refresh chr = getchr case chr when 'C-C', 'C-G' return "" when 'RIGHT' pos += 1 unless pos > text.length when 'LEFT' pos -= 1 unless pos == 0 when 'HOME' pos = 0 when 'END' pos = text.length when 'DEL' text[pos] = "" when 'BACK' unless pos == 0 pos -= 1 text[pos] = "" end when 'LDEL' text = "" pos = 0 when /^.$/ text.insert(pos,chr) pos += 1 end end Curses.curs_set(1); Curses.curs_set(0) #Curses.noecho return text end |
#w_r_info(info) ⇒ Object
RIGHT WINDOW FUNCTIONS
349 350 351 352 353 354 355 356 357 |
# File 'lib/curses-template.rb', line 349 def w_r_info(info) # SHOW INFO IN THE RIGHT WINDOW begin @w_r.clr @w_r.refresh @w_r.p(info) @w_r.update = false rescue end end |