Class: Cygnus::TextPad
- Inherits:
-
Widget
- Object
- Widget
- Cygnus::TextPad
- Includes:
- BorderTitle
- Defined in:
- lib/cygnus/textpad.rb
Instance Attribute Summary collapse
-
#cols ⇒ Object
readonly
Returns the value of attribute cols.
-
#current_index ⇒ Object
readonly
Returns the value of attribute current_index.
-
#rows ⇒ Object
readonly
Returns the value of attribute rows.
Instance Method Summary collapse
-
#ask_search ⇒ Object
Ask user for string to search for.
- #bottom_of_window ⇒ Object
- #content ⇒ Object
- #current_value ⇒ Object
-
#destroy ⇒ Object
Now since we use get_pad from window, upon the window being destroyed, it will call this.
-
#down(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
move down a line mimicking vim’s j key.
-
#ensure_visible(row = @current_index) ⇒ Object
Ensure current row is visible, if not make it first row NOTE - need to check if its at end and then reduce scroll at rows, check_prow does that.
-
#filename(filename) ⇒ Object
supply a filename as source for textpad Reads up file into @content.
-
#find_more ⇒ Object
Find next matching row for string accepted in ask_search.
-
#fire_action_event ⇒ Object
while loop.
- #formatted_text(text, fmt) ⇒ Object
- #forward_word ⇒ Object
-
#goto_end ⇒ Object
goto last line of file.
- #goto_last_position ⇒ Object
- #goto_line(line) ⇒ Object
-
#goto_start ⇒ Object
goto first line of file.
-
#handle_key(ch) ⇒ Object
NOTE : if advancing pcol one has to clear the pad or something or else there’ll be older content on the right side.
- #init_vars ⇒ Object
-
#initialize(form = nil, config = {}, &block) ⇒ TextPad
constructor
You may pass height, width, row and col for creating a window otherwise a fullscreen window will be created.
- #is_visible?(index) ⇒ Boolean
-
#map_keys ⇒ Object
key mappings.
- #middle_of_window ⇒ Object
-
#next_match(str) ⇒ Object
Find the next row that contains given string.
- #on_enter ⇒ Object
- #on_enter_row(arow) ⇒ Object
-
#padrefresh ⇒ Object
write pad onto window private.
-
#print(string, _width = @content_cols) ⇒ Object
2013-03-07 - 19:57 changed width to @content_cols since data not printing in some cases fully when ansi sequences were present int some line but not in others lines without ansi were printing less by a few chars.
-
#render(pad, lineno, text) ⇒ Object
default method for rendering a line.
-
#renderer(r) ⇒ Object
supply a custom renderer that implements render().
- #repaint ⇒ Object
-
#rowcol ⇒ Object
:nodoc:.
-
#scroll_backward ⇒ Object
scrolls lines backward a window full at a time, on pressing pageup C-u may not work since it is trapped by form earlier.
-
#scroll_forward ⇒ Object
scrolls lines a window full at a time, on pressing ENTER or C-d or pagedown.
-
#scroll_left ⇒ Object
to prevent right from retaining earlier painted values padreader does not do a clear, yet works fine.
- #scroll_right ⇒ Object
-
#scroll_window_down(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
scrolls window down mimicking vim C-e.
-
#scroll_window_up(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
scrolls window up mimicking vim C-y.
- #set_form_col ⇒ Object
- #set_form_row ⇒ Object
- #show_colored_chunks(chunks, defcolor = nil, defattr = nil) ⇒ Object
-
#text(lines) ⇒ Object
(also: #list)
XXX in list text returns the selected row, list returns the full thing, keep consistent.
- #top_of_window ⇒ Object
-
#up(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
move up a line mimicking vim’s k key.
Constructor Details
#initialize(form = nil, config = {}, &block) ⇒ TextPad
You may pass height, width, row and col for creating a window otherwise a fullscreen window will be created. If you pass a window from caller then that window will be used. Some keys are trapped, jkhl space, pgup, pgdown, end, home, t b This is currently very minimal and was created to get me started to integrating pads into other classes such as textview.
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 |
# File 'lib/cygnus/textpad.rb', line 46 def initialize form=nil, config={}, &block @editable = false @focusable = true @config = config @row = @col = 0 @prow = @pcol = 0 @startrow = 0 @startcol = 0 @list = [] super ## NOTE # --------------------------------------------------- # Since we are using pads, you need to get your height, width and rows correct # Make sure the height factors in the row, else nothing may show # --------------------------------------------------- #@height = @height.ifzero(FFI::NCurses.LINES) #@width = @width.ifzero(FFI::NCurses.COLS) @rows = @height @cols = @width # NOTE XXX if cols is > COLS then padrefresh can fail @startrow = @row @startcol = @col #@suppress_border = config[:suppress_border] @row_offset = @col_offset = 1 unless @suppress_border @startrow += 1 @startcol += 1 @rows -=3 # 3 is since print_border_only reduces one from width, to check whether this is correct @cols -=3 else # seeing why nothing is printing @rows -=0 # 3 is since print_border_only reduces one from width, to check whether this is correct ## if next is 0 then padrefresh doesn't print @cols -=1 end @row_offset = @col_offset = 0 if @suppress_borders @top = @row @left = @col @lastrow = @row + 1 @lastcol = @col + 1 @_events << :PRESS @_events << :ENTER_ROW @scrollatrows = @height - 3 init_vars end |
Instance Attribute Details
#cols ⇒ Object (readonly)
Returns the value of attribute cols.
40 41 42 |
# File 'lib/cygnus/textpad.rb', line 40 def cols @cols end |
#current_index ⇒ Object (readonly)
Returns the value of attribute current_index.
39 40 41 |
# File 'lib/cygnus/textpad.rb', line 39 def current_index @current_index end |
#rows ⇒ Object (readonly)
Returns the value of attribute rows.
40 41 42 |
# File 'lib/cygnus/textpad.rb', line 40 def rows @rows end |
Instance Method Details
#ask_search ⇒ Object
Ask user for string to search for
714 715 716 717 718 719 720 721 722 723 724 725 726 727 |
# File 'lib/cygnus/textpad.rb', line 714 def ask_search str = get_string("Enter pattern: ") return if str.nil? str = @last_regex if str == "" return if str == "" ix = next_match str return unless ix @last_regex = str #@oldindex = @current_index @current_index = ix[0] @curpos = ix[1] ensure_visible end |
#bottom_of_window ⇒ Object
410 411 412 413 414 415 416 417 |
# File 'lib/cygnus/textpad.rb', line 410 def bottom_of_window @current_index = @prow + @scrollatrows $multiplier ||= 0 if $multiplier > 0 @current_index -= $multiplier $multiplier = 0 end end |
#content ⇒ Object
212 213 214 215 |
# File 'lib/cygnus/textpad.rb', line 212 def content raise "content is nil " unless @content return @content end |
#current_value ⇒ Object
604 605 606 |
# File 'lib/cygnus/textpad.rb', line 604 def current_value @content[@current_index] end |
#destroy ⇒ Object
Now since we use get_pad from window, upon the window being destroyed, it will call this. Else it will destroy pad
622 623 624 625 |
# File 'lib/cygnus/textpad.rb', line 622 def destroy FFI::NCurses.delwin(@pad) if @pad # when do i do this ? FIXME @pad = nil end |
#down(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
move down a line mimicking vim’s j key
425 426 427 428 429 430 |
# File 'lib/cygnus/textpad.rb', line 425 def down num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier) #@oldindex = @current_index if num > 10 @current_index += num ensure_visible $multiplier = 0 end |
#ensure_visible(row = @current_index) ⇒ Object
Ensure current row is visible, if not make it first row NOTE - need to check if its at end and then reduce scroll at rows, check_prow does that
766 767 768 769 770 |
# File 'lib/cygnus/textpad.rb', line 766 def ensure_visible row = @current_index unless is_visible? row @prow = @current_index end end |
#filename(filename) ⇒ Object
supply a filename as source for textpad Reads up file into @content
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/cygnus/textpad.rb', line 182 def filename(filename) @file = filename unless File.exists? filename alert "#{filename} does not exist" return end @filetype = File.extname filename @content = File.open(filename,"r").readlines if @filetype == "" if @content.first.index("ruby") @filetype = ".rb" end end init_vars @repaint_all = true @_populate_needed = true end |
#find_more ⇒ Object
Find next matching row for string accepted in ask_search
731 732 733 734 735 736 737 738 739 |
# File 'lib/cygnus/textpad.rb', line 731 def find_more return unless @last_regex ix = next_match @last_regex return unless ix #@oldindex = @current_index @current_index = ix[0] @curpos = ix[1] ensure_visible end |
#fire_action_event ⇒ Object
while loop
598 599 600 601 602 603 |
# File 'lib/cygnus/textpad.rb', line 598 def fire_action_event return if @content.nil? || @content.size == 0 require 'rbcurse/core/include/ractionevent' aev = TextActionEvent.new self, :PRESS, current_value().to_s, @current_index, @curpos fire_handler :PRESS, aev end |
#formatted_text(text, fmt) ⇒ Object
258 259 260 261 262 263 264 265 266 |
# File 'lib/cygnus/textpad.rb', line 258 def formatted_text text, fmt require 'rbcurse/core/include/chunk' @formatted_text = text @color_parser = fmt @repaint_required = true # don't know if start is always required. so putting in caller #goto_start #remove_all end |
#forward_word ⇒ Object
771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 |
# File 'lib/cygnus/textpad.rb', line 771 def forward_word $multiplier = 1 if !$multiplier || $multiplier == 0 line = @current_index buff = @content[line].to_s return unless buff pos = @curpos || 0 # list does not have curpos $multiplier.times { found = buff.index(/[[:punct:][:space:]]\w/, pos) if !found # if not found, we've lost a counter if line+1 < @content.length line += 1 else return end pos = 0 else pos = found + 1 end $log.debug " forward_word: pos #{pos} line #{line} buff: #{buff}" } $multiplier = 0 @current_index = line @curpos = pos ensure_visible #@buffer = @list[@current_index].to_s #set_form_row #set_form_col pos @repaint_required = true end |
#goto_end ⇒ Object
goto last line of file
383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/cygnus/textpad.rb', line 383 def goto_end #@oldindex = @current_index $multiplier ||= 0 if $multiplier > 0 goto_line $multiplier - 1 return end @current_index = @content.count() - 1 @prow = @current_index - @scrollatrows $multiplier = 0 end |
#goto_last_position ⇒ Object
483 484 485 486 487 488 489 |
# File 'lib/cygnus/textpad.rb', line 483 def goto_last_position return unless @oldindex tmp = @current_index @current_index = @oldindex @oldindex = tmp bounds_check end |
#goto_line(line) ⇒ Object
394 395 396 397 398 399 400 401 |
# File 'lib/cygnus/textpad.rb', line 394 def goto_line line ## we may need to calculate page, zfm style and place at right position for ensure visible #line -= 1 @current_index = line ensure_visible line bounds_check $multiplier = 0 end |
#goto_start ⇒ Object
goto first line of file
369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/cygnus/textpad.rb', line 369 def goto_start #@oldindex = @current_index $multiplier ||= 0 if $multiplier > 0 goto_line $multiplier - 1 return end @current_index = 0 @curpos = @pcol = @prow = 0 @prow = 0 $multiplier = 0 end |
#handle_key(ch) ⇒ Object
NOTE : if advancing pcol one has to clear the pad or something or else there’ll be older content on the right side.
519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 |
# File 'lib/cygnus/textpad.rb', line 519 def handle_key ch return :UNHANDLED unless @content map_keys unless @mapped_keys @maxrow = @content_rows - @rows @maxcol = @content_cols - @cols # need to understand the above line, can go below zero. # all this seems to work fine in padreader.rb in util. # somehow maxcol going to -33 @oldrow = @prow @oldcol = @pcol $log.debug "XXX: PAD got #{ch} prow = #{@prow}" begin case ch when key(?l) # TODO take multipler #@pcol += 1 if @curpos < @cols @curpos += 1 end when key(?$) #@pcol = @maxcol - 1 @curpos = [@content[@current_index].size, @cols].min when key(?h) # TODO take multipler if @curpos > 0 @curpos -= 1 end #when key(?0) #@curpos = 0 when ?0.getbyte(0)..?9.getbyte(0) if ch == ?0.getbyte(0) && $multiplier == 0 # copy of C-a - start of line @repaint_required = true if @pcol > 0 # tried other things but did not work @pcol = 0 @curpos = 0 return 0 end # storing digits entered so we can multiply motion actions $multiplier *= 10 ; $multiplier += (ch-48) return 0 when ?\C-c.getbyte(0) $multiplier = 0 return 0 else # check for bindings, these cannot override above keys since placed at end begin ret = process_key ch, self $multiplier = 0 bounds_check ## If i press C-x > i get an alert from rwidgets which blacks the screen # if i put a padrefresh here it becomes okay but only for one pad, # i still need to do it for all pads. rescue => err $log.error " TEXTPAD ERROR INS #{err} " $log.debug(err.backtrace.join("\n")) textdialog ["Error in TextPad: #{err} ", *err.backtrace], :title => "Exception" end ## NOTE if textpad does not handle the event and it goes to form which pops # up a messagebox, then padrefresh does not happen, since control does not # come back here, so a black rect is left on screen # please note that a bounds check will not happen for stuff that # is triggered by form, so you'll have to to it yourself or # call setrowcol explicity if the cursor is not updated return :UNHANDLED if ret == :UNHANDLED end rescue => err $log.error " TEXTPAD ERROR 111 #{err} " $log.debug( err) if err $log.debug(err.backtrace.join("\n")) if err textdialog ["Error in TextPad: #{err} ", *err.backtrace], :title => "Exception" $error_message.value = "" ensure padrefresh Ncurses::Panel.update_panels end return 0 end |
#init_vars ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/cygnus/textpad.rb', line 93 def init_vars $multiplier = 0 @oldindex = @current_index = 0 # column cursor @prow = @pcol = @curpos = 0 if @row && @col @lastrow = @row + 1 @lastcol = @col + 1 end @repaint_required = true end |
#is_visible?(index) ⇒ Boolean
626 627 628 629 |
# File 'lib/cygnus/textpad.rb', line 626 def is_visible? index j = index - @prow #@toprow j >= 0 && j <= @scrollatrows end |
#map_keys ⇒ Object
key mappings
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/cygnus/textpad.rb', line 342 def map_keys @mapped_keys = true bind_key([?g,?g], 'goto_start'){ goto_start } # mapping double keys like vim bind_key(279, 'goto_start'){ goto_start } bind_keys([?G,277], 'goto end'){ goto_end } bind_keys([?k,KEY_UP], "Up"){ up } bind_keys([?j,KEY_DOWN], "Down"){ down } bind_key(?\C-e, "Scroll Window Down"){ scroll_window_down } bind_key(?\C-y, "Scroll Window Up"){ scroll_window_up } bind_keys([32,338, ?\C-d], "Scroll Forward"){ scroll_forward } bind_keys([?\C-b,339]){ scroll_backward } # the next one invalidates the single-quote binding for bookmarks #bind_key([?',?']){ goto_last_position } # vim , goto last row position (not column) bind_key(?/, :ask_search) bind_key(?n, :find_more) bind_key([?\C-x, ?>], :scroll_right) bind_key([?\C-x, ?<], :scroll_left) bind_key(?\M-l, :scroll_right) bind_key(?\M-h, :scroll_left) bind_key(?L, :bottom_of_window) bind_key(?M, :middle_of_window) bind_key(?H, :top_of_window) bind_key(?w, :forward_word) bind_key(KEY_ENTER, :fire_action_event) end |
#middle_of_window ⇒ Object
418 419 420 421 |
# File 'lib/cygnus/textpad.rb', line 418 def middle_of_window @current_index = @prow + (@scrollatrows/2) $multiplier = 0 end |
#next_match(str) ⇒ Object
Find the next row that contains given string
745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 |
# File 'lib/cygnus/textpad.rb', line 745 def next_match str first = nil ## content can be string or Chunkline, so we had to write <tt>index</tt> for this. ## =~ does not give an error, but it does not work. @content.each_with_index do |line, ix| col = line.index str if col first ||= [ ix, col ] if ix > @current_index return [ix, col] end end end return first end |
#on_enter ⇒ Object
630 631 632 |
# File 'lib/cygnus/textpad.rb', line 630 def on_enter set_form_row end |
#on_enter_row(arow) ⇒ Object
608 609 610 611 612 613 614 |
# File 'lib/cygnus/textpad.rb', line 608 def on_enter_row arow return if @content.nil? || @content.size == 0 require 'rbcurse/core/include/ractionevent' aev = TextActionEvent.new self, :ENTER_ROW, current_value().to_s, @current_index, @curpos fire_handler :ENTER_ROW, aev @repaint_required = true end |
#padrefresh ⇒ Object
write pad onto window private
270 271 272 273 274 275 276 277 278 279 |
# File 'lib/cygnus/textpad.rb', line 270 def padrefresh top = @window.top left = @window.left sr = @startrow + top sc = @startcol + left retval = FFI::NCurses.prefresh(@pad,@prow,@pcol, sr , sc , @rows + sr , @cols+ sc ); $log.warn "XXX: PADREFRESH #{retval}, #{@prow}, #{@pcol}, #{sr}, #{sc}, #{@rows+sr}, #{@cols+sc}." if retval == -1 # padrefresh can fail if width is greater than NCurses.COLS #FFI::NCurses.prefresh(@pad,@prow,@pcol, @startrow + top, @startcol + left, @rows + @startrow + top, @cols+@startcol + left); end |
#print(string, _width = @content_cols) ⇒ Object
2013-03-07 - 19:57 changed width to @content_cols since data not printing in some cases fully when ansi sequences were present int some line but not in others lines without ansi were printing less by a few chars. This was prolly copied from rwindow, where it is okay since its for a specific width
225 226 227 228 229 |
# File 'lib/cygnus/textpad.rb', line 225 def print(string, _width = @content_cols) #return unless visible? w = _width == 0? Ncurses.COLS : _width FFI::NCurses.waddnstr(@pad,string.to_s, w) # changed 2011 dts end |
#render(pad, lineno, text) ⇒ Object
default method for rendering a line
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/cygnus/textpad.rb', line 157 def render pad, lineno, text if text.is_a? Chunks::ChunkLine FFI::NCurses.wmove @pad, lineno, 0 a = get_attrib @attrib show_colored_chunks text, nil, a return end if @renderer @renderer.render @pad, lineno, text else ## messabox does have a method to paint the whole window in bg color its in rwidget.rb att = NORMAL FFI::NCurses.wattron(@pad, @cp | att) FFI::NCurses.mvwaddstr(@pad,lineno, 0, @clearstring) if @clearstring FFI::NCurses.mvwaddstr(@pad,lineno, 0, @content[lineno]) #FFI::NCurses.mvwaddstr(pad, lineno, 0, text) FFI::NCurses.wattroff(@pad, @cp | att) end end |
#renderer(r) ⇒ Object
supply a custom renderer that implements render()
151 152 153 |
# File 'lib/cygnus/textpad.rb', line 151 def renderer r @renderer = r end |
#repaint ⇒ Object
299 300 301 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 |
# File 'lib/cygnus/textpad.rb', line 299 def repaint ## 2013-03-08 - 21:01 This is the fix to the issue of form callign an event like ? or F1 # which throws up a messagebox which leaves a black rect. We have no place to put a refresh # However, form does call repaint for all objects, so we can do a padref here. Otherwise, # it would get rejected. UNfortunately this may happen more often we want, but we never know # when something pops up on the screen. padrefresh unless @repaint_required return unless @repaint_required if @formatted_text $log.debug "XXX: INSIDE FORMATTED TEXT " l = RubyCurses::Utils.parse_formatted_text(@color_parser, @formatted_text) text(l) @formatted_text = nil end ## moved this line up or else create_p was crashing @window ||= @graphic populate_pad if @_populate_needed #HERE we need to populate once so user can pass a renderer unless @suppress_border if @repaint_all ## XXX im not getting the background color. #@window.print_border_only @top, @left, @height-1, @width, $datacolor clr = get_color $datacolor, @color, @bgcolor #@window.print_border @top, @left, @height-1, @width, clr @window.print_border_only @top, @left, @height-1, @width, clr print_title @window.wrefresh end end padrefresh Ncurses::Panel.update_panels @repaint_required = false @repaint_all = false end |
#rowcol ⇒ Object
:nodoc:
104 105 106 |
# File 'lib/cygnus/textpad.rb', line 104 def rowcol #:nodoc: return @row+@row_offset, @col+@col_offset end |
#scroll_backward ⇒ Object
scrolls lines backward a window full at a time, on pressing pageup C-u may not work since it is trapped by form earlier. Need to fix
478 479 480 481 482 |
# File 'lib/cygnus/textpad.rb', line 478 def scroll_backward #@oldindex = @current_index @current_index -= @scrollatrows @prow = @current_index - @scrollatrows end |
#scroll_forward ⇒ Object
scrolls lines a window full at a time, on pressing ENTER or C-d or pagedown
470 471 472 473 474 |
# File 'lib/cygnus/textpad.rb', line 470 def scroll_forward #@oldindex = @current_index @current_index += @scrollatrows @prow = @current_index - @scrollatrows end |
#scroll_left ⇒ Object
to prevent right from retaining earlier painted values padreader does not do a clear, yet works fine. OK it has an update_panel after padrefresh, that clears it seems. this clears entire window not just the pad FFI::NCurses.wclear(@window.get_window) so border and title is repainted after window clearing
Next line was causing all sorts of problems when scrolling with ansi formatted text
510 511 512 |
# File 'lib/cygnus/textpad.rb', line 510 def scroll_left @pcol -= 1 end |
#scroll_right ⇒ Object
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 |
# File 'lib/cygnus/textpad.rb', line 490 def scroll_right # I don't think it will ever be less since we've increased it to cols if @content_cols <= @cols maxpcol = 0 @pcol = 0 else maxpcol = @content_cols - @cols - 1 @pcol += 1 @pcol = maxpcol if @pcol > maxpcol end # to prevent right from retaining earlier painted values # padreader does not do a clear, yet works fine. # OK it has an update_panel after padrefresh, that clears it seems. #this clears entire window not just the pad #FFI::NCurses.wclear(@window.get_window) # so border and title is repainted after window clearing # # Next line was causing all sorts of problems when scrolling with ansi formatted text #@repaint_all = true end |
#scroll_window_down(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
scrolls window down mimicking vim C-e
449 450 451 452 453 454 455 456 |
# File 'lib/cygnus/textpad.rb', line 449 def scroll_window_down num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier) @prow += num if @prow > @current_index @current_index += 1 end #check_prow $multiplier = 0 end |
#scroll_window_up(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
scrolls window up mimicking vim C-y
460 461 462 463 464 465 466 467 |
# File 'lib/cygnus/textpad.rb', line 460 def scroll_window_up num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier) @prow -= num unless is_visible? @current_index # one more check may be needed here TODO @current_index -= num end $multiplier = 0 end |
#set_form_col ⇒ Object
636 637 |
# File 'lib/cygnus/textpad.rb', line 636 def set_form_col end |
#set_form_row ⇒ Object
633 634 635 |
# File 'lib/cygnus/textpad.rb', line 633 def set_form_row setrowcol @lastrow, @lastcol end |
#show_colored_chunks(chunks, defcolor = nil, defattr = nil) ⇒ Object
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 |
# File 'lib/cygnus/textpad.rb', line 231 def show_colored_chunks(chunks, defcolor = nil, defattr = nil) #return unless visible? chunks.each do |chunk| #|color, chunk, attrib| case chunk when Chunks::Chunk color = chunk.color attrib = chunk.attrib text = chunk.text when Array # for earlier demos that used an array color = chunk[0] attrib = chunk[2] text = chunk[1] end color ||= defcolor attrib ||= defattr || NORMAL #cc, bg = ColorMap.get_colors_for_pair color #$log.debug "XXX: CHUNK textpad #{text}, cp #{color} , attrib #{attrib}. #{cc}, #{bg} " FFI::NCurses.wcolor_set(@pad, color,nil) if color FFI::NCurses.wattron(@pad, attrib) if attrib print(text) FFI::NCurses.wattroff(@pad, attrib) if attrib end end |
#text(lines) ⇒ Object Also known as: list
XXX in list text returns the selected row, list returns the full thing, keep consistent
204 205 206 207 208 209 210 |
# File 'lib/cygnus/textpad.rb', line 204 def text lines raise "text() receiving null content" unless lines @content = lines @_populate_needed = true @repaint_all = true init_vars end |
#top_of_window ⇒ Object
402 403 404 405 406 407 408 409 |
# File 'lib/cygnus/textpad.rb', line 402 def top_of_window @current_index = @prow $multiplier ||= 0 if $multiplier > 0 @current_index += $multiplier $multiplier = 0 end end |
#up(num = (($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)) ⇒ Object
move up a line mimicking vim’s k key
434 435 436 437 438 439 440 441 442 443 444 445 |
# File 'lib/cygnus/textpad.rb', line 434 def up num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier) #@oldindex = @current_index if num > 10 @current_index -= num #unless is_visible? @current_index #if @prow > @current_index ##$status_message.value = "1 #{@prow} > #{@current_index} " #@prow -= 1 #else #end #end $multiplier = 0 end |