rubytext 0.0.41 → 0.0.42

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: bfb5ca1d05e1fc85ff4de0f5d028e83611176142fbf022b26b91bd608b6fe9e8
4
- data.tar.gz: ae55d53aedf1a0da15cfcf2c9dff8d76bf7274804dc942ea67372adc287ca827
3
+ metadata.gz: b3bc88c14a4cf43b7d4669cc1e00e408983f633cf72d1a04a3310c17c538b8e7
4
+ data.tar.gz: 2f9476d26e485a802425efa8f3b0c8faf9cff875e60105f487f44d14ee22e1f4
5
5
  SHA512:
6
- metadata.gz: 48d354dcf57a37dffbe6605da23bed650a34a8f05d8d024929c5fb681cc8beb13eea09cdedc5ba5583a03a2a0e99b35c57d4a9e3c380b297dbc119e073300dc0
7
- data.tar.gz: 42ba4bbd57b6b7f5936dad8547a9f9f3b0db1bc968b549c578d480fe6d7f2b6131282b91ff428317ea90207c3931525b58ce45998b50d3af4083b4a326ec5e58
6
+ metadata.gz: 9f368ca6d83dbe958071972a5995a8e20ef829572342eb8438deb64b28c1cbdd21b42e1f81c31a1e63f24e1efe24975e72eb3d3e1ae5f0cc24788c0992f0d021
7
+ data.tar.gz: 11282127ca9e72e7ee1dde18f405ceed426d4435ab3a48680d3d598a89fd6cabd1f3e27afa2ddc6096215cbc24f88caa58b3b6c33ac260e35585cb9a90268fac
data/lib/menu.rb CHANGED
@@ -22,7 +22,7 @@ module RubyText
22
22
 
23
23
  def self.menu(r: 0, c: 0, items:)
24
24
  high = items.size + 2
25
- wide = items.map(&:length).max + 2
25
+ wide = items.map(&:length).max + 4
26
26
  saveback(high, wide, r, c)
27
27
  @mywin = RubyText.window(high, wide, r, c, true, fg: :white, bg: :blue)
28
28
  RubyText.set(:raw)
@@ -77,10 +77,12 @@ module RubyText
77
77
  when X::KEY_UP
78
78
  if sel > 0
79
79
  sel -= 1
80
+ handler.call(sel, items[sel])
80
81
  end
81
82
  when X::KEY_DOWN
82
83
  if sel < max
83
84
  sel += 1
85
+ handler.call(sel, items[sel])
84
86
  end
85
87
  when quit # parameter
86
88
  win2.clear
data/lib/navigation.rb ADDED
@@ -0,0 +1,73 @@
1
+ class RubyText::Window
2
+ def go(r, c)
3
+ save = self.rc
4
+ @win.setpos(r, c)
5
+ if block_given?
6
+ yield
7
+ go(*save) # No block here!
8
+ end
9
+ end
10
+
11
+ def up(n=1)
12
+ r, c = rc
13
+ go r-n, c
14
+ end
15
+
16
+ def down(n=1)
17
+ r, c = rc
18
+ go r+n, c
19
+ end
20
+
21
+ def left(n=1)
22
+ r, c = rc
23
+ go r, c-n
24
+ end
25
+
26
+ def right(n=1)
27
+ r, c = rc
28
+ go r, c+n
29
+ end
30
+
31
+ def top
32
+ r, c = rc
33
+ go 0, c
34
+ end
35
+
36
+ def bottom
37
+ r, c = rc
38
+ rmax = self.rows - 1
39
+ go rmax, c
40
+ end
41
+
42
+ def up!
43
+ top
44
+ end
45
+
46
+ def down!
47
+ bottom
48
+ end
49
+
50
+ def left!
51
+ r, c = rc
52
+ go r, 0
53
+ end
54
+
55
+ def right!
56
+ r, c = rc
57
+ cmax = self.cols - 1
58
+ go r, cmax
59
+ end
60
+
61
+ def home
62
+ go 0, 0
63
+ end
64
+
65
+ def crlf
66
+ r, c = rc
67
+ go r+1, 0
68
+ end
69
+
70
+ def rc
71
+ [@win.cury, @win.curx]
72
+ end
73
+ end
data/lib/rubytext.rb CHANGED
@@ -1,247 +1,30 @@
1
1
  $LOAD_PATH << "lib"
2
2
 
3
3
  require 'curses'
4
- require 'version' # skeleton + version
5
4
 
6
5
  X = Curses # shorthand
7
6
 
8
- require 'output'
9
- require 'keys'
10
- require 'menu'
7
+ require 'version'
11
8
 
9
+ require 'output' # RubyText, RubyText::Window, Kernel
10
+ require 'keys' # RubyText::Keys
11
+ require 'menu' # RubyText
12
+ require 'window' # RubyText::Window
13
+ require 'navigation' # RubyText::Window
14
+ require 'settings' # RubyText
12
15
 
13
- class RubyText::Window
14
- attr_reader :fg, :bg
15
-
16
- def self.colors(win, fg, bg)
17
- cfg, cbg, cp = fb2cp(fg, bg)
18
- X.init_pair(cp, cfg, cbg)
19
- win.color_set(cp|X::A_NORMAL)
20
- end
21
-
22
- def self.colors!(win, fg, bg)
23
- colors(win, fg, bg)
24
- num = win.maxx * win.maxy
25
- win.setpos(0, 0)
26
- win.addstr(' '*num)
27
- win.setpos(0, 0)
28
- win.refresh
29
- end
30
-
31
- def self.main(fg: nil, bg: nil)
32
- @main_win = X.init_screen
33
- X.start_color
34
- colors!(@main_win, fg, bg)
35
- rows, cols = @main_win.maxy, @main_win.maxx
36
- @screen = self.make(@main_win, rows, cols, 0, 0, false,
37
- fg: fg, bg: bg)
38
- # FIXME Why is this hard to inline?
39
- # @win = @main_win
40
- # obj = self.allocate
41
- # obj.instance_eval do
42
- # @outer = @win = @main_win
43
- # @wide, @high, @r0, @c0 = cols, rows, 0, 0
44
- # @fg, @bg = fg, bg
45
- # @border = false
46
- # @rows, @cols = @high, @wide
47
- # @width, @height = @cols + 2, @rows + 2 if @border
48
- # end
49
- # @win = @main_win # FIXME?
50
- # obj
51
- @screen
52
- end
53
-
54
- def self.make(cwin, high, wide, r0, c0, border, fg: :white, bg: :black)
55
- obj = self.allocate
56
- obj.instance_eval do
57
- debug " Inside instance_eval..."
58
- @outer = @win = cwin
59
- @wide, @high, @r0, @c0 = wide, high, r0, c0
60
- @fg, @bg = fg, bg
61
- @border = border
62
- @rows, @cols = high, wide
63
- @width, @height = @cols + 2, @rows + 2 if @border
64
- end
65
- obj
66
- end
67
-
68
- def fg=(sym)
69
- self.colors(@win, fg, @bg)
70
- end
71
- end
16
+ # Skeleton... Can't put at top because of #initalize
72
17
 
73
18
  module RubyText
74
- def self.set(*args)
75
- # Allow a block?
76
- standard = [:cbreak, :raw, :echo, :keypad]
77
- @flags = [] # FIXME can set/reset individually. hmmm
78
- args.each do |arg|
79
- if standard.include? arg
80
- flag = arg.to_s
81
- @flags << arg
82
- flag.sub!(/_/, "no")
83
- X.send(flag)
84
- else
85
- @flags << arg
86
- case arg
87
- when :cursor
88
- X.show_cursor
89
- when :_cursor, :nocursor
90
- X.hide_cursor
91
- end
92
- end
93
- end
94
- end
95
-
96
- def save_flags
97
- @fstack ||= []
98
- @fstack.push @flags
99
- end
100
-
101
- def rest_flags
102
- @flags = @fstack.pop
19
+ module Keys
103
20
  end
104
21
 
105
- def self.start(*args, log: nil, fg: nil, bg: nil)
106
- $debug = File.new(log, "w") if log
107
- Object.const_set(:STDSCR, RubyText::Window.main(fg: fg, bg: bg))
108
- $stdscr = STDSCR
109
- fg, bg, cp = fb2cp(fg, bg)
110
- self.set(:_echo, :cbreak, :raw) # defaults
111
- # X.stdscr.keypad(true)
112
- self.set(*args) # override defaults
113
- end
114
-
115
- # For passing through arbitrary method calls
116
- # to the lower level...
117
-
118
- def self.method_missing(name, *args)
119
- debug "method_missing: #{name} #{args.inspect}"
120
- if name[0] == '_'
121
- X.send(name[1..-1], *args)
122
- else
123
- raise "#{name} #{args.inspect}" # NoMethodError
124
- end
125
- end
126
-
127
- def RubyText.window(high, wide, r0, c0, border=false, fg: nil, bg: nil)
128
- RubyText::Window.new(high, wide, r0, c0, border, fg, bg)
129
- end
130
-
131
- def self.hide_cursor
132
- X.curs_set(0)
133
- end
134
-
135
- def self.show_cursor
136
- X.curs_set(1)
137
- end
138
-
139
- def self.show_cursor!
140
- X.curs_set(2) # Doesn't work?
22
+ class Window
141
23
  end
142
24
  end
143
25
 
144
- class RubyText::Window
145
- Vert, Horiz = X::A_VERTICAL, X::A_HORIZONTAL
146
-
147
- attr_reader :win, :rows, :cols, :width, :height
148
- attr_writer :fg, :bg
149
-
150
- def initialize(high=nil, wide=nil, r0=1, c0=1, border=false, fg=nil, bg=nil)
151
- debug "RT::Win.init: #{[high, wide, r0, c0, border]}"
152
- @wide, @high, @r0, @c0 = wide, high, r0, c0
153
- @border, @fg, @bg = border, fg, bg
154
- @win = X::Window.new(high, wide, r0, c0)
155
- debug "outer = #{@win.inspect}"
156
- debug "@border = #@border"
157
- debug "Calling 'colors': #{[@win, fg, bg]}"
158
- RubyText::Window.colors!(@win, fg, bg)
159
- # self.clear(@main_win)
160
- if @border
161
- @win.box(Vert, Horiz)
162
- @outer = @win
163
- @outer.refresh
164
- debug "About to call again: params = #{[high-2, wide-2, r0+1, c0+1]}"
165
- @win = X::Window.new(high-2, wide-2, r0+1, c0+1) # , false, fg, bg) # relative now??
166
- RubyText::Window.colors!(@win, fg, bg)
167
- else
168
- @outer = @win
169
- end
170
- @rows, @cols = @win.maxy, @win.maxx # unnecessary really...
171
- @width, @height = @cols + 2, @rows + 2 if @border
172
- @win.refresh
26
+ def import(meth, recv)
27
+ Kernel.module_eval do
28
+ define_method(meth) {|*args| recv.send(meth, *args) }
173
29
  end
174
-
175
- def go(r, c)
176
- save = self.rc
177
- @win.setpos(r, c)
178
- if block_given?
179
- yield
180
- go(*save) # No block here!
181
- end
182
- end
183
-
184
- def up(n=1)
185
- r, c = rc
186
- go r-n, c
187
- end
188
-
189
- def down(n=1)
190
- r, c = rc
191
- go r+n, c
192
- end
193
-
194
- def left(n=1)
195
- r, c = rc
196
- go r, c-n
197
- end
198
-
199
- def right(n=1)
200
- r, c = rc
201
- go r, c+n
202
- end
203
-
204
- def top
205
- r, c = rc
206
- go 0, c
207
- end
208
-
209
- def bottom
210
- r, c = rc
211
- rmax = self.rows - 1
212
- go rmax, c
213
- end
214
-
215
- def up!
216
- top
217
- end
218
-
219
- def down!
220
- bottom
221
- end
222
-
223
- def left!
224
- r, c = rc
225
- go r, 0
226
- end
227
-
228
- def right!
229
- r, c = rc
230
- cmax = self.cols - 1
231
- go r, cmax
232
- end
233
-
234
- def home
235
- go 0, 0
236
- end
237
-
238
- def crlf
239
- r, c = rc
240
- go r+1, 0
241
- end
242
-
243
- def rc
244
- [@win.cury, @win.curx]
245
- end
246
-
247
30
  end
data/lib/settings.rb ADDED
@@ -0,0 +1,71 @@
1
+ module RubyText
2
+ def self.set(*args)
3
+ # Allow a block?
4
+ standard = [:cbreak, :raw, :echo, :keypad]
5
+ @flags = [] # FIXME can set/reset individually. hmmm
6
+ args.each do |arg|
7
+ if standard.include? arg
8
+ flag = arg.to_s
9
+ @flags << arg
10
+ flag.sub!(/_/, "no")
11
+ X.send(flag)
12
+ else
13
+ @flags << arg
14
+ case arg
15
+ when :cursor
16
+ X.show_cursor
17
+ when :_cursor, :nocursor
18
+ X.hide_cursor
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def save_flags
25
+ @fstack ||= []
26
+ @fstack.push @flags
27
+ end
28
+
29
+ def rest_flags
30
+ @flags = @fstack.pop
31
+ end
32
+
33
+ def self.start(*args, log: nil, fg: nil, bg: nil)
34
+ $debug = File.new(log, "w") if log
35
+ Object.const_set(:STDSCR, RubyText::Window.main(fg: fg, bg: bg))
36
+ $stdscr = STDSCR
37
+ fg, bg, cp = fb2cp(fg, bg)
38
+ self.set(:_echo, :cbreak, :raw) # defaults
39
+ # X.stdscr.keypad(true)
40
+ self.set(*args) # override defaults
41
+ end
42
+
43
+ # For passing through arbitrary method calls
44
+ # to the lower level...
45
+
46
+ def self.method_missing(name, *args)
47
+ debug "method_missing: #{name} #{args.inspect}"
48
+ if name[0] == '_'
49
+ X.send(name[1..-1], *args)
50
+ else
51
+ raise "#{name} #{args.inspect}" # NoMethodError
52
+ end
53
+ end
54
+
55
+ def RubyText.window(high, wide, r0, c0, border=false, fg: nil, bg: nil)
56
+ RubyText::Window.new(high, wide, r0, c0, border, fg, bg)
57
+ end
58
+
59
+ def self.hide_cursor
60
+ X.curs_set(0)
61
+ end
62
+
63
+ def self.show_cursor
64
+ X.curs_set(1)
65
+ end
66
+
67
+ def self.show_cursor!
68
+ X.curs_set(2) # Doesn't work?
69
+ end
70
+ end
71
+
data/lib/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  module RubyText
3
- VERSION = "0.0.41"
3
+ VERSION = "0.0.42"
4
4
 
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
  end
data/lib/window.rb ADDED
@@ -0,0 +1,91 @@
1
+ class RubyText::Window
2
+ Vert, Horiz = X::A_VERTICAL, X::A_HORIZONTAL
3
+
4
+ attr_reader :win, :rows, :cols, :width, :height
5
+ attr_writer :fg, :bg
6
+
7
+ def initialize(high=nil, wide=nil, r0=1, c0=1, border=false, fg=nil, bg=nil)
8
+ debug "RT::Win.init: #{[high, wide, r0, c0, border]}"
9
+ @wide, @high, @r0, @c0 = wide, high, r0, c0
10
+ @border, @fg, @bg = border, fg, bg
11
+ @win = X::Window.new(high, wide, r0, c0)
12
+ debug "outer = #{@win.inspect}"
13
+ debug "@border = #@border"
14
+ debug "Calling 'colors': #{[@win, fg, bg]}"
15
+ RubyText::Window.colors!(@win, fg, bg)
16
+ if @border
17
+ @win.box(Vert, Horiz)
18
+ @outer = @win
19
+ @outer.refresh
20
+ debug "About to call again: params = #{[high-2, wide-2, r0+1, c0+1]}"
21
+ @win = X::Window.new(high-2, wide-2, r0+1, c0+1) # , false, fg, bg) # relative now??
22
+ RubyText::Window.colors!(@win, fg, bg)
23
+ else
24
+ @outer = @win
25
+ end
26
+ @rows, @cols = @win.maxy, @win.maxx # unnecessary really...
27
+ @width, @height = @cols + 2, @rows + 2 if @border
28
+ @win.refresh
29
+ end
30
+ def self.colors(win, fg, bg)
31
+ cfg, cbg, cp = fb2cp(fg, bg)
32
+ X.init_pair(cp, cfg, cbg)
33
+ win.color_set(cp|X::A_NORMAL)
34
+ end
35
+
36
+ def self.colors!(win, fg, bg)
37
+ colors(win, fg, bg)
38
+ num = win.maxx * win.maxy
39
+ win.setpos(0, 0)
40
+ win.addstr(' '*num)
41
+ win.setpos(0, 0)
42
+ win.refresh
43
+ end
44
+
45
+ def self.main(fg: nil, bg: nil)
46
+ @main_win = X.init_screen
47
+ X.start_color
48
+ colors!(@main_win, fg, bg)
49
+ rows, cols = @main_win.maxy, @main_win.maxx
50
+ @screen = self.make(@main_win, rows, cols, 0, 0, false,
51
+ fg: fg, bg: bg)
52
+ # FIXME Why is this hard to inline?
53
+ # @win = @main_win
54
+ # obj = self.allocate
55
+ # obj.instance_eval do
56
+ # @outer = @win = @main_win
57
+ # @wide, @high, @r0, @c0 = cols, rows, 0, 0
58
+ # @fg, @bg = fg, bg
59
+ # @border = false
60
+ # @rows, @cols = @high, @wide
61
+ # @width, @height = @cols + 2, @rows + 2 if @border
62
+ # end
63
+ # @win = @main_win # FIXME?
64
+ # obj
65
+ @screen
66
+ end
67
+
68
+ def self.make(cwin, high, wide, r0, c0, border, fg: :white, bg: :black)
69
+ obj = self.allocate
70
+ obj.instance_eval do
71
+ debug " Inside instance_eval..."
72
+ @outer = @win = cwin
73
+ @wide, @high, @r0, @c0 = wide, high, r0, c0
74
+ @fg, @bg = fg, bg
75
+ @border = border
76
+ @rows, @cols = high, wide
77
+ @width, @height = @cols + 2, @rows + 2 if @border
78
+ end
79
+ obj
80
+ end
81
+
82
+ def fg=(sym)
83
+ self.colors(@win, fg, @bg)
84
+ end
85
+
86
+ def self.wocka
87
+ STDSCR.puts "HELLO!!!!!!"
88
+ sleep 5
89
+ end
90
+ end
91
+
data/rubytext.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.authors = ["Hal Fulton"]
16
16
  s.email = 'rubyhacker@gmail.com'
17
17
  s.executables << "rubytext"
18
- s.add_runtime_dependency 'curses'
18
+ s.add_runtime_dependency 'curses', ">= 1.2.5"
19
19
 
20
20
  # Files...
21
21
  main = Find.find("lib").to_a
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.0.41
4
+ version: 0.0.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-21 00:00:00.000000000 Z
11
+ date: 2018-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.2.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.2.5
27
27
  description: Uses the curses gem and extends functionality and ease of use in Ruby.
28
28
  email: rubyhacker@gmail.com
29
29
  executables:
@@ -63,9 +63,12 @@ files:
63
63
  - examples/slides
64
64
  - lib/keys.rb
65
65
  - lib/menu.rb
66
+ - lib/navigation.rb
66
67
  - lib/output.rb
67
68
  - lib/rubytext.rb
69
+ - lib/settings.rb
68
70
  - lib/version.rb
71
+ - lib/window.rb
69
72
  homepage: https://github.com/Hal9000/rubytext
70
73
  licenses:
71
74
  - Ruby License