rubytext 0.1.21 → 0.1.22

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90fd407e8a80cfc0fb79bdfed6f97184984ed43df8598b23bc166a5427402c5e
4
- data.tar.gz: 491e23b7274377c3e26f5b5375d965eaf666d009f373c74c72fc563c4f2ee4a2
3
+ metadata.gz: dc35032215721ae6cc67dcb1a801f94ea6eaabd68716362f62a1f82c84cf9c8e
4
+ data.tar.gz: 4298fe621d895c5392a2170f0ec29ba043516e4f245d80d80ef5c99cc01e9526
5
5
  SHA512:
6
- metadata.gz: a434a77e4195559a342ff089dc764999b36faeb33de55a9d703b6c3d87051c1643c13ab7f41600587f26757ef38fd3d598a291c595d94d9c4b3e8befcd06a56c
7
- data.tar.gz: e6b6b2e88ba130c1da44316d911925a4ed9743d5368e69f7d28a71425d8fa07dd449dde25bac7681c1cff69b2b53946f55bf4b1933778c803a8b6d513177c400
6
+ metadata.gz: 210598d6cacdfbe8ae32ef68f9997d094038486068e2fb5b453578aea53cd4b075cc26a1d2f191419b79e22c800989312f8a1c4ffe23f322a3cd74ba3dfe25d3
7
+ data.tar.gz: 63a08f8589711d9cb0b8c7224aba3fc5630dc474b24d92678c4ab0f3165d95689db0c1bee38a924c3f541a0a86863a83ca0de8a2f80607dc9e63aa73d7c18bb2
data/lib/menu.rb CHANGED
@@ -1,10 +1,8 @@
1
1
  module RubyText
2
2
 
3
3
  class Window
4
- def topmenu(items:, curr: 0,
5
- title: nil, fg: Green, bg: Black)
4
+ def topmenu(items:, curr: 0, fg: Green, bg: Black)
6
5
  r, c = 0, 0
7
- border = false
8
6
  high = 1
9
7
 
10
8
  RubyText.hide_cursor
@@ -16,7 +14,6 @@ module RubyText
16
14
  results = items
17
15
  end
18
16
 
19
- tlen = title.length + 8 rescue 0
20
17
  width = 0 # total width
21
18
  cols = [] # start-column of each item
22
19
  items.each do |item|
@@ -26,13 +23,9 @@ module RubyText
26
23
  end
27
24
 
28
25
  r, c = self.coords(r, c)
29
- # puts "topmenu saved"
30
- # sleep 2
31
26
  self.saveback(high, width, r, c)
32
27
  mr, mc = r+self.r0, c+self.c0
33
- title = nil
34
- mwin = RubyText.window(high, width, r: mr, c: mc, border: border,
35
- fg: fg, bg: bg, title: title)
28
+ mwin = RubyText.window(high, width, r: mr, c: mc, fg: fg, bg: bg, border: false, title: nil)
36
29
  Curses.stdscr.keypad(true)
37
30
  sel = curr
38
31
  max = items.size - 1
@@ -45,18 +38,16 @@ module RubyText
45
38
  end
46
39
  ch = getch
47
40
  case ch
48
- when Curses::KEY_LEFT
41
+ when Left
49
42
  sel -= 1 if sel > 0
50
- when Curses::KEY_RIGHT
43
+ when Right
51
44
  sel += 1 if sel < max
52
- when 27
45
+ when Esc, " " # spacebar also quits
53
46
  self.restback(high, width, r, c)
54
47
  RubyText.show_cursor
55
48
  return [nil, nil]
56
- when 10
49
+ when Down, Enter
57
50
  self.restback(high, width, r, c)
58
- # puts "topmenu restored"
59
- # sleep 2
60
51
  RubyText.show_cursor
61
52
  choice = results[sel]
62
53
  return [sel, choice] if choice.is_a? String
@@ -93,8 +84,6 @@ module RubyText
93
84
  row = row - high/2 if r == :center
94
85
  col = col - wide/2 if c == :center
95
86
  r, c = row, col
96
- # puts "menu2 saved"
97
- # sleep 2
98
87
  self.saveback(high, wide, r, c)
99
88
  mr, mc = r+self.r0, c+self.c0
100
89
  title = nil unless border
@@ -113,15 +102,15 @@ module RubyText
113
102
  end
114
103
  ch = getch
115
104
  case ch
116
- when Curses::KEY_UP
105
+ when Up
117
106
  sel -= 1 if sel > 0
118
- when Curses::KEY_DOWN
107
+ when Down
119
108
  sel += 1 if sel < max
120
- when 27
109
+ when Esc
121
110
  self.restback(high, wide, r, c)
122
111
  RubyText.show_cursor
123
112
  return [nil, nil]
124
- when 10
113
+ when Enter
125
114
  self.restback(high, wide, r, c)
126
115
  RubyText.show_cursor
127
116
  choice = results[sel]
@@ -165,15 +154,15 @@ module RubyText
165
154
  end
166
155
  ch = getch
167
156
  case ch
168
- when Curses::KEY_UP
157
+ when Up
169
158
  sel -= 1 if sel > 0
170
- when Curses::KEY_DOWN
159
+ when Down
171
160
  sel += 1 if sel < max
172
- when 27
161
+ when Esc
173
162
  self.restback(high, wide, r, c)
174
163
  RubyText.show_cursor
175
164
  return []
176
- when 10
165
+ when Enter
177
166
  self.restback(high, wide, r, c)
178
167
  RubyText.show_cursor
179
168
  return selected.map {|i| items[i] }
@@ -192,6 +181,75 @@ module RubyText
192
181
  num, str = STDSCR.menu(r: r, c: c+6, items: ["yes", "no"])
193
182
  num == 0
194
183
  end
184
+
185
+ def radio_menu(r: :center, c: :center, items:, curr: 0,
186
+ # Handle current value better?
187
+ border: true,
188
+ title: nil, fg: Green, bg: Black)
189
+ RubyText.hide_cursor
190
+ if items.is_a?(Hash)
191
+ results = items.values
192
+ items = items.keys
193
+ hash_flag = true
194
+ else
195
+ results = items
196
+ end
197
+
198
+ high = items.size
199
+ wide = items.map(&:length).max + 3
200
+ high += 2 if border
201
+ wide += 2 if border
202
+
203
+ tlen = title.length + 8 rescue 0
204
+ wide = [wide, tlen].max
205
+ row, col = self.coords(r, c)
206
+ row = row - high/2 if r == :center
207
+ col = col - wide/2 if c == :center
208
+ r, c = row, col
209
+ self.saveback(high, wide, r, c)
210
+ mr, mc = r+self.r0, c+self.c0
211
+ title = nil unless border
212
+ mwin = RubyText.window(high, wide, r: mr, c: mc, border: border,
213
+ fg: fg, bg: bg, title: title)
214
+ Curses.stdscr.keypad(true)
215
+ sel = curr
216
+ max = items.size - 1
217
+ loop do
218
+ RubyText.hide_cursor # FIXME should be unnecessary
219
+ items.each.with_index do |item, row|
220
+ mark = row == curr ? ">" : " "
221
+ mwin.go row, 0
222
+ style = (sel == row) ? :reverse : :normal
223
+ label = "#{mark} #{item}"
224
+ mwin.print fx(label, style)
225
+ end
226
+ ch = getch
227
+ case ch
228
+ when Up
229
+ sel -= 1 if sel > 0
230
+ when Down
231
+ sel += 1 if sel < max
232
+ when Esc
233
+ self.restback(high, wide, r, c)
234
+ RubyText.show_cursor
235
+ return [nil, nil]
236
+ when " "
237
+ mwin[curr, 0] = " "
238
+ mwin[sel, 0] = ">"
239
+ curr = sel
240
+ when Enter
241
+ self.restback(high, wide, r, c)
242
+ RubyText.show_cursor
243
+ choice = results[sel]
244
+ return [sel, choice] if choice.is_a? String
245
+ result = choice.call
246
+ return [nil, nil] if result.nil? || result.empty?
247
+ return result
248
+ else Curses.beep
249
+ end
250
+ RubyText.show_cursor
251
+ end
252
+ end
195
253
  end
196
254
 
197
255
  def self.selector(win: STDSCR, r: 0, c: 0, rows: 10, cols: 20,
@@ -215,17 +273,17 @@ module RubyText
215
273
  end
216
274
  ch = getch
217
275
  case ch
218
- when Curses::KEY_UP
276
+ when Up
219
277
  if sel > 0
220
278
  sel -= 1
221
279
  handler.call(sel, items[sel], win2)
222
280
  end
223
- when Curses::KEY_DOWN
281
+ when Down
224
282
  if sel < max
225
283
  sel += 1
226
284
  handler.call(sel, items[sel], win2)
227
285
  end
228
- when 10 # Enter
286
+ when Enter
229
287
  if enter
230
288
  del = enter.call(sel, items[sel], win2)
231
289
  if del
@@ -233,7 +291,7 @@ module RubyText
233
291
  raise
234
292
  end
235
293
  end
236
- when 9 # tab
294
+ when Tab
237
295
  Curses.flash
238
296
  when quit # parameter
239
297
  exit
data/lib/output.rb CHANGED
@@ -147,7 +147,7 @@ class RubyText::Window
147
147
  end
148
148
 
149
149
  class GetString
150
- def initialize(win = STDSCR, str = "", i = 0, history: [], limit: nil, tab: [])
150
+ def initialize(win = STDSCR, str = "", i = 0, history: [], limit: nil, tab: [], capture: [])
151
151
  @win = win
152
152
  @r0, @c0 = @win.rc
153
153
  @limit = limit || (@win.cols - @r0 - 1)
@@ -249,15 +249,20 @@ class RubyText::Window
249
249
  end
250
250
  end
251
251
 
252
- def gets(history: [], limit: nil, tab: [], default: "") # still needs improvement
252
+ def gets(history: [], limit: nil, tab: [], default: "", capture: [])
253
+ # needs improvement
253
254
  # echo assumed to be OFF, keypad ON
254
255
  @history = history
255
- gs = GetString.new(self, default, history: history, limit: limit, tab: tab)
256
+ gs = GetString.new(self, default, history: history, limit: limit, tab: tab,
257
+ capture: capture)
256
258
  count = 0
257
259
  loop do
258
- count += 1 # Escape has special meaning if first char
260
+ count += 1 # Escape and 'capture' chars have special meaning if first char
259
261
  ch = self.getch
260
262
  case ch
263
+ when *capture
264
+ return ch if count == 1
265
+ gs.add(ch)
261
266
  when Escape
262
267
  return Escape if count == 1
263
268
  gs.enter
@@ -1,6 +1,6 @@
1
1
 
2
2
  module RubyText
3
- VERSION = "0.1.21"
3
+ VERSION = "0.1.22"
4
4
 
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
  end
data/lib/window.rb CHANGED
@@ -1,6 +1,5 @@
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
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.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-03 00:00:00.000000000 Z
11
+ date: 2020-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses