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 This uses the dialog, but what if user wants the old style.
- #bottom_of_window ⇒ Object
- #content ⇒ Object (also: #get_content)
-
#current_value ⇒ Object
returns current value (what cursor is on).
-
#cursor_backward ⇒ Object
move cursor backward by one char (currently will not pan).
-
#cursor_bol ⇒ Object
moves cursor to start of line, panning if required.
-
#cursor_eol ⇒ Object
moves cursor to end of line also panning window if necessary NOTE: if one line on another page (not displayed) is way longer than any displayed line, then this will pan way ahead, so may not be very intelligent in such situations.
-
#cursor_forward ⇒ Object
move cursor forward by one char (currently will not pan).
-
#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, reader = nil) ⇒ Object
supply a filename as source for textpad Reads up file into @content One can optionally send in a method which takes a filename and returns an array of data This is required if you are processing files which are binary such as zip/archives and wish to print the contents.
-
#find_more ⇒ Object
Find next matching row for string accepted in ask_search.
-
#fire_action_event ⇒ Object
event when user hits enter on a row, user would bind :PRESS.
-
#formatted_text(text, fmt) ⇒ Object
pass in formatted text along with parser (:tmux or :ansi).
-
#forward_word ⇒ Object
jumps cursor to next work, like vim’s w key.
-
#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
- #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
return true if the given row is visible.
-
#map_keys ⇒ Object
key mappings.
- #middle_of_window ⇒ Object
-
#next_match(str) ⇒ Object
Find the next row that contains given string.
-
#on_enter ⇒ Object
called when this widget is entered, by form.
-
#on_enter_row(arow) ⇒ Object
execute binding when a row is entered, used more in lists to display some text in a header or footer as one traverses.
-
#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.
-
#print_foot ⇒ Object
print footer containing line and position.
-
#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
called by form.
-
#set_form_row ⇒ Object
called by form.
- #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.
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 |
# File 'lib/cygnus/textpad.rb', line 47 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.
41 42 43 |
# File 'lib/cygnus/textpad.rb', line 41 def cols @cols end |
#current_index ⇒ Object (readonly)
Returns the value of attribute current_index.
40 41 42 |
# File 'lib/cygnus/textpad.rb', line 40 def current_index @current_index end |
#rows ⇒ Object (readonly)
Returns the value of attribute rows.
41 42 43 |
# File 'lib/cygnus/textpad.rb', line 41 def rows @rows end |
Instance Method Details
#ask_search ⇒ Object
Ask user for string to search for This uses the dialog, but what if user wants the old style. Isn’t there a cleaner way to let user override style, or allow user to use own UI for getting pattern and then passing here.
722 723 724 725 726 727 728 729 730 731 732 733 734 735 |
# File 'lib/cygnus/textpad.rb', line 722 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
440 441 442 443 444 445 446 447 |
# File 'lib/cygnus/textpad.rb', line 440 def bottom_of_window @current_index = @prow + @scrollatrows $multiplier ||= 0 if $multiplier > 0 @current_index -= $multiplier $multiplier = 0 end end |
#content ⇒ Object Also known as: get_content
223 224 225 226 |
# File 'lib/cygnus/textpad.rb', line 223 def content raise "content is nil " unless @content return @content end |
#current_value ⇒ Object
returns current value (what cursor is on)
614 615 616 |
# File 'lib/cygnus/textpad.rb', line 614 def current_value @content[@current_index] end |
#cursor_backward ⇒ Object
move cursor backward by one char (currently will not pan)
824 825 826 827 828 829 830 831 832 |
# File 'lib/cygnus/textpad.rb', line 824 def cursor_backward $multiplier = 1 if $multiplier == 0 if @curpos > 0 @curpos -= $multiplier @curpos = 0 if @curpos < 0 @repaint_required = true end $multiplier = 0 end |
#cursor_bol ⇒ Object
moves cursor to start of line, panning if required
845 846 847 848 849 850 |
# File 'lib/cygnus/textpad.rb', line 845 def cursor_bol # copy of C-a - start of line @repaint_required = true if @pcol > 0 @pcol = 0 @curpos = 0 end |
#cursor_eol ⇒ Object
moves cursor to end of line also panning window if necessary NOTE: if one line on another page (not displayed) is way longer than any displayed line, then this will pan way ahead, so may not be very intelligent in such situations.
837 838 839 840 841 842 |
# File 'lib/cygnus/textpad.rb', line 837 def cursor_eol # pcol is based on max length not current line's length @pcol = @content_cols - @cols - 1 @curpos = @content[@current_index].size @repaint_required = true end |
#cursor_forward ⇒ Object
move cursor forward by one char (currently will not pan)
811 812 813 814 815 816 817 818 819 820 821 |
# File 'lib/cygnus/textpad.rb', line 811 def cursor_forward $multiplier = 1 if $multiplier == 0 if @curpos < @cols @curpos += $multiplier if @curpos > @cols @curpos = @cols end @repaint_required = true end $multiplier = 0 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
635 636 637 638 |
# File 'lib/cygnus/textpad.rb', line 635 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
455 456 457 458 459 460 |
# File 'lib/cygnus/textpad.rb', line 455 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
774 775 776 777 778 |
# File 'lib/cygnus/textpad.rb', line 774 def ensure_visible row = @current_index unless is_visible? row @prow = @current_index end end |
#filename(filename, reader = nil) ⇒ Object
supply a filename as source for textpad Reads up file into @content One can optionally send in a method which takes a filename and returns an array of data This is required if you are processing files which are binary such as zip/archives and wish to print the contents. (e.g. cygnus gem sends in :get_file_contents).
filename("a.c", method(:get_file_contents))
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/cygnus/textpad.rb', line 187 def filename(filename, reader=nil) @file = filename unless File.exists? filename alert "#{filename} does not exist" return end @filetype = File.extname filename if reader @content = reader.call(filename) else @content = File.open(filename,"r").readlines end 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
739 740 741 742 743 744 745 746 747 |
# File 'lib/cygnus/textpad.rb', line 739 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
event when user hits enter on a row, user would bind :PRESS
606 607 608 609 610 611 |
# File 'lib/cygnus/textpad.rb', line 606 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
pass in formatted text along with parser (:tmux or :ansi)
281 282 283 284 285 286 287 288 289 |
# File 'lib/cygnus/textpad.rb', line 281 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
jumps cursor to next work, like vim’s w key
782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 |
# File 'lib/cygnus/textpad.rb', line 782 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 @repaint_required = true end |
#goto_end ⇒ Object
goto last line of file
413 414 415 416 417 418 419 420 421 422 423 |
# File 'lib/cygnus/textpad.rb', line 413 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
513 514 515 516 517 518 519 |
# File 'lib/cygnus/textpad.rb', line 513 def goto_last_position return unless @oldindex tmp = @current_index @current_index = @oldindex @oldindex = tmp bounds_check end |
#goto_line(line) ⇒ Object
424 425 426 427 428 429 430 431 |
# File 'lib/cygnus/textpad.rb', line 424 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
399 400 401 402 403 404 405 406 407 408 409 410 |
# File 'lib/cygnus/textpad.rb', line 399 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
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 598 599 600 601 |
# File 'lib/cygnus/textpad.rb', line 547 def handle_key ch return :UNHANDLED unless @content map_keys unless @mapped_keys @oldrow = @prow @oldcol = @pcol $log.debug "XXX: PAD got #{ch} prow = #{@prow}" begin case ch when ?0.getbyte(0)..?9.getbyte(0) if ch == ?0.getbyte(0) && $multiplier == 0 cursor_bol 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 591 #{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
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/cygnus/textpad.rb', line 94 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
return true if the given row is visible
641 642 643 644 |
# File 'lib/cygnus/textpad.rb', line 641 def is_visible? index j = index - @prow #@toprow j >= 0 && j <= @scrollatrows end |
#map_keys ⇒ Object
key mappings
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 |
# File 'lib/cygnus/textpad.rb', line 369 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(?l, :cursor_forward) bind_key(?h, :cursor_backward) bind_key(?$, :cursor_eol) bind_key(KEY_ENTER, :fire_action_event) end |
#middle_of_window ⇒ Object
448 449 450 451 |
# File 'lib/cygnus/textpad.rb', line 448 def middle_of_window @current_index = @prow + (@scrollatrows/2) $multiplier = 0 end |
#next_match(str) ⇒ Object
Find the next row that contains given string
753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 |
# File 'lib/cygnus/textpad.rb', line 753 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
called when this widget is entered, by form
647 648 649 |
# File 'lib/cygnus/textpad.rb', line 647 def on_enter set_form_row end |
#on_enter_row(arow) ⇒ Object
execute binding when a row is entered, used more in lists to display some text in a header or footer as one traverses
621 622 623 624 625 626 627 |
# File 'lib/cygnus/textpad.rb', line 621 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
293 294 295 296 297 298 299 300 301 302 |
# File 'lib/cygnus/textpad.rb', line 293 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
246 247 248 249 250 |
# File 'lib/cygnus/textpad.rb', line 246 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 |
#print_foot ⇒ Object
print footer containing line and position
230 231 232 233 234 235 236 |
# File 'lib/cygnus/textpad.rb', line 230 def print_foot #:nodoc: @footer_attrib ||= Ncurses::A_REVERSE = "R: #{@current_index+1}, C: #{@curpos+@pcol}, #{@list.length} lines " $log.debug " print_foot calling printstring with #{@row} + #{@height} -1, #{@col}+2" @graphic.printstring( @row + @height -1 , @col+2, , @color_pair || $datacolor, @footer_attrib) @repaint_footer_required = false # 2010-01-23 22:55 end |
#render(pad, lineno, text) ⇒ Object
default method for rendering a line
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/cygnus/textpad.rb', line 158 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()
152 153 154 |
# File 'lib/cygnus/textpad.rb', line 152 def renderer r @renderer = r end |
#repaint ⇒ Object
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/cygnus/textpad.rb', line 322 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 @repaint_footer_required = true if @oldrow != @current_index print_foot if @print_footer && !@suppress_borders && @repaint_footer_required @window.wrefresh end end padrefresh Ncurses::Panel.update_panels @repaint_required = false @repaint_all = false end |
#rowcol ⇒ Object
:nodoc:
105 106 107 |
# File 'lib/cygnus/textpad.rb', line 105 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
508 509 510 511 512 |
# File 'lib/cygnus/textpad.rb', line 508 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
500 501 502 503 504 |
# File 'lib/cygnus/textpad.rb', line 500 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
540 541 542 |
# File 'lib/cygnus/textpad.rb', line 540 def scroll_left @pcol -= 1 end |
#scroll_right ⇒ Object
520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 |
# File 'lib/cygnus/textpad.rb', line 520 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
479 480 481 482 483 484 485 486 |
# File 'lib/cygnus/textpad.rb', line 479 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
490 491 492 493 494 495 496 497 |
# File 'lib/cygnus/textpad.rb', line 490 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
called by form
655 656 |
# File 'lib/cygnus/textpad.rb', line 655 def set_form_col end |
#set_form_row ⇒ Object
called by form
651 652 653 |
# File 'lib/cygnus/textpad.rb', line 651 def set_form_row setrowcol @lastrow, @lastcol end |
#show_colored_chunks(chunks, defcolor = nil, defattr = nil) ⇒ Object
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 |
# File 'lib/cygnus/textpad.rb', line 252 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
213 214 215 216 217 218 219 220 221 |
# File 'lib/cygnus/textpad.rb', line 213 def text(lines) #raise "text() receiving null content" unless lines return @content if lines.empty? @content = lines @_populate_needed = true @repaint_all = true init_vars self end |
#top_of_window ⇒ Object
432 433 434 435 436 437 438 439 |
# File 'lib/cygnus/textpad.rb', line 432 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
464 465 466 467 468 469 470 471 472 473 474 475 |
# File 'lib/cygnus/textpad.rb', line 464 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 |