rubytext 0.1.21 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/navigation.rb CHANGED
@@ -1,5 +1,9 @@
1
+ # Reopening: Coordinate handling (1-based!)
2
+
1
3
  class RubyText::Window
2
4
 
5
+ # Handle special coordinate names (symbols)
6
+
3
7
  def coords(r, c)
4
8
  r = case
5
9
  when r == :center
@@ -24,10 +28,17 @@ class RubyText::Window
24
28
  [r, c]
25
29
  end
26
30
 
31
+ # Go to specified row/column in current window
32
+
27
33
  def goto(r, c) # only accepts numbers!
28
34
  @cwin.setpos(r, c)
35
+ @cwin.refresh
29
36
  end
30
37
 
38
+
39
+ # Go to specified row/column in current window,
40
+ # execute block, and return cursor
41
+
31
42
  def go(r0, c0)
32
43
  r, c = coords(r0, c0)
33
44
  save = self.rc
@@ -38,60 +49,84 @@ class RubyText::Window
38
49
  end
39
50
  end
40
51
 
52
+ # Move cursor up
53
+
41
54
  def up(n=1)
42
55
  r, c = rc
43
56
  go r-n, c
44
57
  end
45
58
 
59
+ # Move cursor down
60
+
46
61
  def down(n=1)
47
62
  r, c = rc
48
63
  go r+n, c
49
64
  end
50
65
 
66
+ # Move cursor left
67
+
51
68
  def left(n=1)
52
69
  r, c = rc
53
70
  go r, c-n
54
71
  end
55
72
 
73
+ # Move cursor right
74
+
56
75
  def right(n=1)
57
76
  r, c = rc
58
77
  go r, c+n
59
78
  end
60
79
 
80
+ # Move cursor to top of window
81
+
61
82
  def top
62
83
  r, c = rc
63
84
  go 0, c
64
85
  end
65
86
 
87
+ # Move cursor to bottom of window
88
+
66
89
  def bottom
67
90
  r, c = rc
68
91
  rmax = self.rows - 1
69
92
  go rmax, c
70
93
  end
71
94
 
95
+ # Move cursor to top of window
96
+
72
97
  def up!
73
98
  top
74
99
  end
75
100
 
101
+ # Move cursor to bottom of window
102
+
76
103
  def down!
77
104
  bottom
78
105
  end
79
106
 
107
+ # Move cursor to far left of window
108
+
80
109
  def left!
81
110
  r, c = rc
82
111
  go r, 0
83
112
  end
84
113
 
114
+ # Move cursor to far left of window
115
+
85
116
  def right!
86
117
  r, c = rc
87
118
  cmax = self.cols - 1
88
119
  go r, cmax
89
120
  end
90
121
 
122
+ # Move cursor to home (upper left)
123
+
91
124
  def home
92
125
  go 0, 0
93
126
  end
94
127
 
128
+ # Return current row/column
129
+
95
130
  def rc
96
131
  [@cwin.cury, @cwin.curx]
97
132
  end
data/lib/output.rb CHANGED
@@ -123,17 +123,31 @@ class RubyText::Window
123
123
  $stdscr = STDSCR
124
124
  end
125
125
 
126
+ =begin
127
+ def go(r0, c0)
128
+ r, c = coords(r0, c0)
129
+ save = self.rc
130
+ goto r, c
131
+ if block_given?
132
+ yield
133
+ goto *save
134
+ end
135
+ end
136
+ =end
137
+
126
138
  def [](r, c)
127
- ch = nil
128
- go(r, c) { ch = @cwin.inch }
129
- debug "ch = #{ch} ch.chr = #{ch.chr}"
139
+ r0, c0 = self.rc
140
+ @cwin.setpos(r, c)
141
+ ch = @cwin.inch
142
+ @cwin.setpos(r0, c0)
130
143
  ch.chr
131
144
  end
132
145
 
133
146
  def []=(r, c, char)
147
+ r0, c0 = self.rc
134
148
  @cwin.setpos(r, c)
135
149
  @cwin.addch(char[0].ord|Curses::A_NORMAL)
136
- @cwin.setpos(r, c)
150
+ @cwin.setpos(r0, c0)
137
151
  @cwin.refresh
138
152
  end
139
153
 
@@ -147,7 +161,7 @@ class RubyText::Window
147
161
  end
148
162
 
149
163
  class GetString
150
- def initialize(win = STDSCR, str = "", i = 0, history: [], limit: nil, tab: [])
164
+ def initialize(win = STDSCR, str = "", i = 0, history: [], limit: nil, tab: [], capture: [])
151
165
  @win = win
152
166
  @r0, @c0 = @win.rc
153
167
  @limit = limit || (@win.cols - @r0 - 1)
@@ -249,15 +263,20 @@ class RubyText::Window
249
263
  end
250
264
  end
251
265
 
252
- def gets(history: [], limit: nil, tab: [], default: "") # still needs improvement
266
+ def gets(history: [], limit: nil, tab: [], default: "", capture: [])
267
+ # needs improvement
253
268
  # echo assumed to be OFF, keypad ON
254
269
  @history = history
255
- gs = GetString.new(self, default, history: history, limit: limit, tab: tab)
270
+ gs = GetString.new(self, default, history: history, limit: limit, tab: tab,
271
+ capture: capture)
256
272
  count = 0
257
273
  loop do
258
- count += 1 # Escape has special meaning if first char
274
+ count += 1 # Escape and 'capture' chars have special meaning if first char
259
275
  ch = self.getch
260
276
  case ch
277
+ when *capture
278
+ return ch if count == 1
279
+ gs.add(ch)
261
280
  when Escape
262
281
  return Escape if count == 1
263
282
  gs.enter
@@ -1,6 +1,6 @@
1
1
 
2
2
  module RubyText
3
- VERSION = "0.1.21"
3
+ VERSION = "0.1.25"
4
4
 
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
  end
data/lib/settings.rb CHANGED
@@ -9,7 +9,7 @@ module RubyText
9
9
  @current = @defaults.dup
10
10
  @stack = []
11
11
  @stack.push @current # Note: Never let stack be empty
12
- set_curses(@current) # Set them for real
12
+ set_curses(**@current) # Set them for real
13
13
  # FIXME To be continued...
14
14
  end
15
15
 
@@ -39,7 +39,7 @@ module RubyText
39
39
  cursor ||= @current[:cursor]
40
40
  @stack.push @current
41
41
  @current = {raw: raw, echo: echo, cbreak: cbreak, keypad: keypad, cursor: cursor}
42
- set_curses(@current)
42
+ set_curses(**@current)
43
43
  end
44
44
 
45
45
  def reset_boolean
@@ -57,7 +57,7 @@ module RubyText
57
57
  sym0 = val ? sym : str[1..-1].to_sym
58
58
  list[sym0] = val
59
59
  end
60
- set_boolean(list)
60
+ set_boolean(**list)
61
61
  # allow a block here?
62
62
  end
63
63
 
@@ -101,6 +101,7 @@ module RubyText
101
101
  Object.const_set(:STDSCR, main) unless defined? STDSCR
102
102
  $stdscr = STDSCR # FIXME global needed?
103
103
  Object.include(WindowIO)
104
+ Curses.ESCDELAY = 10
104
105
  @started = true
105
106
  # rescue => err
106
107
  # puts(err.inspect)
@@ -129,7 +130,7 @@ module RubyText
129
130
  if name[0] == '_'
130
131
  Curses.send(name[1..-1], *args)
131
132
  else
132
- raise "#{name} #{args.inspect}" # NoMethodError
133
+ raise "Missing: #{name} #{args.inspect}" # NoMethodError
133
134
  end
134
135
  end
135
136
 
data/lib/widgets.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'stringio'
2
+
1
3
  module RubyText
2
4
  def self.ticker(row: STDSCR.rows-1, col: 0, width: STDSCR.cols,
3
5
  fg: White, bg: Blue, text:, delay: 0.1)
@@ -35,14 +37,20 @@ module RubyText
35
37
  ret
36
38
  end
37
39
 
38
- def self.splash(msg)
40
+ def self.splash(msg = nil)
41
+ io = StringIO.new("")
42
+ if msg.nil?
43
+ yield io
44
+ msg = io.string
45
+ end
46
+
39
47
  lines = msg.split("\n")
40
48
  high = lines.size + 4
41
49
  wide = lines.map {|x| x.length }.max + 4
42
50
  r0 = (STDSCR.rows - high)/2
43
51
  c0 = (STDSCR.cols - wide)/2
44
52
  STDSCR.saveback(high, wide, r0, c0)
45
- win = RubyText.window(high, wide, r: r0, c: c0,
53
+ win = RubyText.window(high, wide, r: r0, c: c0, scroll: true,
46
54
  fg: White, bg: Red, title: "[Press any key]")
47
55
  win.print "\n "
48
56
  win.puts msg
data/lib/window.rb CHANGED
@@ -1,12 +1,12 @@
1
1
 
2
2
  module RubyText
3
- # TODO add title:?
4
3
  def self.window(high, wide, r: nil, c: nil, border: true,
5
4
  fg: White, bg: Blue, scroll: false, title: nil)
6
5
  r ||= (STDSCR.rows - high)/2
7
6
  c ||= (STDSCR.cols - wide)/2
8
7
  win = RubyText::Window.new(high, wide, r, c, border, fg, bg, scroll)
9
8
  win.add_title(title) if title
9
+ 0.upto(high) {|row| 0.upto(wide) {|col| win[row, col] = " " } }
10
10
  win
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubytext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.21
4
+ version: 0.1.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-03 00:00:00.000000000 Z
11
+ date: 2022-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -72,11 +72,38 @@ files:
72
72
  - examples/sym_navigate.rb
73
73
  - examples/ticker_threads.rb
74
74
  - examples/topbottom.rb
75
+ - examples/topmenu.rb
75
76
  - examples/udlr_bang.rb
76
77
  - examples/updown_etc.rb
77
78
  - examples/win_centering.rb
78
79
  - examples/window_full.rb
80
+ - lib/.yardoc/checksums
81
+ - lib/.yardoc/complete
82
+ - lib/.yardoc/object_types
83
+ - lib/.yardoc/objects/root.dat
84
+ - lib/.yardoc/proxy_types
79
85
  - lib/color.rb
86
+ - lib/doc/RubyText.html
87
+ - lib/doc/RubyText/Color.html
88
+ - lib/doc/RubyText/Effects.html
89
+ - lib/doc/RubyText/Keys.html
90
+ - lib/doc/RubyText/Settings.html
91
+ - lib/doc/RubyText/Window.html
92
+ - lib/doc/RubyText/Window/GetString.html
93
+ - lib/doc/WindowIO.html
94
+ - lib/doc/_index.html
95
+ - lib/doc/class_list.html
96
+ - lib/doc/css/common.css
97
+ - lib/doc/css/full_list.css
98
+ - lib/doc/css/style.css
99
+ - lib/doc/file_list.html
100
+ - lib/doc/frames.html
101
+ - lib/doc/index.html
102
+ - lib/doc/js/app.js
103
+ - lib/doc/js/full_list.js
104
+ - lib/doc/js/jquery.js
105
+ - lib/doc/method_list.html
106
+ - lib/doc/top-level-namespace.html
80
107
  - lib/effects.rb
81
108
  - lib/keys.rb
82
109
  - lib/menu.rb
@@ -119,7 +146,7 @@ homepage: https://github.com/Hal9000/rubytext
119
146
  licenses:
120
147
  - Ruby
121
148
  metadata: {}
122
- post_install_message:
149
+ post_install_message:
123
150
  rdoc_options: []
124
151
  require_paths:
125
152
  - lib
@@ -134,8 +161,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
161
  - !ruby/object:Gem::Version
135
162
  version: '0'
136
163
  requirements: []
137
- rubygems_version: 3.0.4
138
- signing_key:
164
+ rubygems_version: 3.1.2
165
+ signing_key:
139
166
  specification_version: 4
140
167
  summary: A thick wrapper for Curses
141
168
  test_files: []