rubytext 0.0.41 → 0.0.42

Sign up to get free protection for your applications and to get access to all the features.
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