Class: Cygnus::TextPad

Inherits:
Widget
  • Object
show all
Includes:
BorderTitle
Defined in:
lib/cygnus/textpad.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#colsObject (readonly)

Returns the value of attribute cols.



40
41
42
# File 'lib/cygnus/textpad.rb', line 40

def cols
  @cols
end

#current_indexObject (readonly)

Returns the value of attribute current_index.



39
40
41
# File 'lib/cygnus/textpad.rb', line 39

def current_index
  @current_index
end

#rowsObject (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_searchObject

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_windowObject



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

#contentObject



212
213
214
215
# File 'lib/cygnus/textpad.rb', line 212

def content
  raise "content is nil " unless @content
  return @content
end

#current_valueObject



604
605
606
# File 'lib/cygnus/textpad.rb', line 604

def current_value
  @content[@current_index]
end

#destroyObject

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

Parameters:

  • multiplier (int)

    entered prior to invoking 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

Parameters:

  • current_index (default if not given)


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_moreObject

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_eventObject

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_wordObject



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_endObject

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_positionObject



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_startObject

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_varsObject



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

Returns:

  • (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_keysObject

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_windowObject



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

Parameters:

  • String

    to find

Returns:

  • row and col offset of match, or nil



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_enterObject



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

#padrefreshObject

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

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()

See Also:



151
152
153
# File 'lib/cygnus/textpad.rb', line 151

def renderer r
  @renderer = r
end

#repaintObject



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

#rowcolObject

:nodoc:



104
105
106
# File 'lib/cygnus/textpad.rb', line 104

def rowcol #:nodoc:
  return @row+@row_offset, @col+@col_offset
end

#scroll_backwardObject

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_forwardObject

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_leftObject

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_rightObject



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

Parameters:

  • multiplier (int)

    entered prior to invoking key



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

Parameters:

  • multiplier (int)

    entered prior to invoking key



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_colObject



636
637
# File 'lib/cygnus/textpad.rb', line 636

def set_form_col
end

#set_form_rowObject



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_windowObject



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

Parameters:

  • multiplier (int)

    entered prior to invoking 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