console_cmdr 0.3.0 → 0.4.0

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
  SHA1:
3
- metadata.gz: c3308726d84f864d270fba33b15616f80844f7e8
4
- data.tar.gz: e5cbfe7d970047080992c9e88afaf858735fa65e
3
+ metadata.gz: ed5bbea62199c0d50966eeac59187f5ef1bb0ddc
4
+ data.tar.gz: c8e123361250caec9d0e45373557195a83aa95f5
5
5
  SHA512:
6
- metadata.gz: a128d30143c79cf842121983ff7a60fc94e9ee45254565fe38812e2e1fb7ad7f59b060ad66486e27092fb0fd7e44f793e5f6d2dd95b5ea2dd16dd19c9803f5dc
7
- data.tar.gz: 6a843eba42806265fedd8c5b71a2e7305ae679302e111ba6e10e6e929f379dd6d178a3ecce41a5418bae3cf620244f14659233c35d98dece4993fcbb9effd434
6
+ metadata.gz: e57e3ee2f0c27e261e14d1358bcdfd3ef899d6e12889df2f437bd202318cf7cf4b214ffc1418378aaed6959d65dd472e6ea4fcc65bbb9aed75007870cdc52817
7
+ data.tar.gz: 2d492f6244b21e09951bd99e27f4e653b4170cbfd77abc51e80b366367a28cb7f56176bc7a6fd4c6f5595f9d0868bda922f2e04de10cce64cf7a4a1795e5b297
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/console_cmdr.rb CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  require 'cmdr'
6
6
  require 'pxindex'
7
+ require 'colored'
7
8
  require 'terminfo'
8
9
  require 'io/console'
9
10
 
@@ -17,7 +18,17 @@ class ConsoleCmdr < Cmdr
17
18
  @pxi = pxindex ? PxIndex.new(pxindex) : nil
18
19
 
19
20
  @keys = []
21
+ @item_selected = ''
22
+ @input_selection = []
23
+ @running = true
20
24
  end
25
+
26
+ def clear()
27
+ @linebuffer = ''
28
+ print "\e[H\e[2J"
29
+ ''
30
+ #cli_banner()
31
+ end
21
32
 
22
33
  def cli_banner()
23
34
  puts "welcome, this code is powered by the cmdr gem\n\n"
@@ -26,6 +37,7 @@ class ConsoleCmdr < Cmdr
26
37
 
27
38
  def reload()
28
39
  @pxi = @pxindex_filepath ? PxIndex.new(@pxindex_filepath) : nil
40
+ 'reloaded'
29
41
  end
30
42
 
31
43
  def start(&blk)
@@ -34,17 +46,19 @@ class ConsoleCmdr < Cmdr
34
46
 
35
47
  seq = []
36
48
 
37
- loop do
49
+ while @running do
38
50
 
39
51
  c = $stdin.getch
40
-
52
+ #puts 'c:' + c.inspect
41
53
  #puts c.ord
42
54
 
43
55
  # [27, 91, 65] = up_arrow
44
56
  # [27, 91, 66] = down_arrow
45
57
  # [27, 91, 67] = right_arrow
46
58
  # [27, 91, 68] = left_arrow
59
+ # [27, 91, 49, 53] = ctrl+right_arrow
47
60
  # 13 = enter
61
+ #puts 'seq: ' + seq.inspect
48
62
 
49
63
  if c.ord == 27 then
50
64
  seq << 27
@@ -55,34 +69,62 @@ class ConsoleCmdr < Cmdr
55
69
  seq << 65
56
70
  c = :arrow_up
57
71
  on_keypress(c)
58
- input c
72
+ #input c
59
73
  elsif c.ord == 66 and seq[1] == 91
60
74
  seq << 66
61
75
  c = :arrow_down
76
+ seq = []
77
+ on_keypress(c)
78
+ input c
79
+
80
+ elsif c.ord == 68 and seq[1] == 91
81
+ seq << 68
82
+ c = :arrow_left
83
+ seq = []
84
+ on_keypress(c)
85
+ input c
86
+ elsif c.ord == 49 and seq[1] == 91
87
+ seq << 49
88
+ #puts 'ctrl + right arrow'
89
+ elsif c.ord == 59 and seq[2] == 49
90
+ seq << 59
91
+ elsif c.ord == 53 and seq[3] == 59
92
+ seq << 53
93
+ elsif c.ord == 67 and seq[4] == 53
94
+ seq << 67
95
+ seq = []
96
+ c = :ctrl_arrow_right
62
97
  on_keypress(c)
63
98
  input c
64
99
  elsif c.ord == 67 and seq[1] == 91
65
100
  seq << 67
66
101
  c = :arrow_right
102
+ #puts 'right arrow'
103
+ seq = []
67
104
  on_keypress(c)
68
105
  input c
69
- elsif c.ord == 68 and seq[1] == 91
70
- seq << 68
71
- c = :arrow_left
106
+ elsif c.ord == 79 and seq.first == 27
107
+ seq << 79
108
+
109
+ elsif c.ord == 72 and seq[1] == 79
110
+ c = :home_key
111
+ seq = []
72
112
  on_keypress(c)
73
- input c
74
-
75
113
  elsif c == "\u0003" # CTRL+C
76
114
  puts
77
115
  @linebuffer = ''
78
116
  display_output()
79
117
  else
80
118
  if block_given? then
81
- on_keypress(c)
82
- input(c, &blk)
119
+ char = on_keypress(c)
120
+
121
+ unless (@linebuffer[0] == ':' and char == ':')
122
+ input(char, &blk) if char
123
+ end
124
+
83
125
  else
84
126
  input(c) do |command|
85
- #puts 'command: ' + command.inspect
127
+
86
128
  case command
87
129
  when 'time'
88
130
  Time.now.to_s
@@ -95,6 +137,14 @@ class ConsoleCmdr < Cmdr
95
137
 
96
138
  end
97
139
 
140
+ def stop()
141
+
142
+ @running = false
143
+ 'bye'
144
+ end
145
+
146
+ alias quit stop
147
+
98
148
  protected
99
149
 
100
150
  def reveal(c)
@@ -105,6 +155,7 @@ class ConsoleCmdr < Cmdr
105
155
  else
106
156
  c unless c.is_a? Symbol
107
157
  end
158
+ #puts 'inside reveal'
108
159
  print char unless @input_selection and @input_selection.any?
109
160
  end
110
161
 
@@ -118,55 +169,161 @@ class ConsoleCmdr < Cmdr
118
169
 
119
170
  def on_keypress(key)
120
171
 
121
- return unless @pxi
172
+ return key if @linebuffer[0] == ':'
173
+ return key unless @pxi
122
174
 
123
-
124
175
  if key.is_a? String then
125
176
 
126
177
  @keys = []
127
178
 
179
+ if key.to_i.to_s == key and @input_selection and @input_selection.any?
180
+ r = select_item(key.to_i-1)
181
+ key = ''
182
+ return r
183
+ end
184
+
185
+ parent = @pxi.parent.title if @pxi.parent
186
+
128
187
  a = @pxi.q?(@linebuffer+key)
129
188
 
130
189
  if a then
131
190
  unless @input_selection == a.map(&:title) then
132
191
  @input_selection = a.map(&:title)
133
- print ("\b" * @linebuffer.length) + @input_selection.inspect + "\n"
192
+ @selection = a.map.with_index do |x,i|
193
+
194
+ branch = x.records.any? ? :branch : nil
195
+
196
+ title = x.title
197
+ # is the target a web page?
198
+ title = title.green if x.target[0] == 'w'
199
+ title << '>' if branch
200
+
201
+ ["%d.%s" % [i+1, title], branch, x.desc.yellow]
202
+
203
+ end
204
+ print ("\b" * @linebuffer.length) + @selection.map \
205
+ {|x| x.values_at(0,2).join ' '}.join(" | ") + "\n"
206
+
134
207
  end
135
- print ("\b" * @linebuffer.length) + @linebuffer + key
208
+ print ("\b" * @linebuffer.length)
209
+
210
+ if (@linebuffer[/\s/] or a.length == 1) and key == ' ' then
211
+
212
+ @linebuffer.sub!(/\w+$/, @item_selected)
213
+
214
+ end
215
+ print @linebuffer + key
136
216
  else
137
217
  @input_selection = nil
138
218
  end
139
219
 
140
- elsif key == :arrow_down or key == :arrow_right
141
-
142
- @keys << :arrow_down
220
+ elsif key == :arrow_down or key == :arrow_right
221
+
222
+ return if @input_selection.nil?
143
223
 
144
- linebuffer = @input_selection[@keys.count(:arrow_down) - 1]
145
- return if linebuffer.nil?
224
+ @keys << :arrow_down
146
225
 
226
+ i = @keys.count(:arrow_down) - 1
227
+
228
+ if i == @selection.length then
229
+ @keys.pop
230
+ return nil
231
+ end
232
+
233
+ select_item(i)
234
+
235
+ elsif key == :arrow_left
147
236
 
237
+ return nil if @keys.empty?
238
+
239
+ @keys.pop
148
240
  oldlinebuffer = @linebuffer
241
+ @linebuffer = @input_selection[@keys.count(:arrow_down) - 1]
242
+
243
+ height, width = TermInfo.screen_size
244
+
149
245
  print ("\b" * oldlinebuffer.length)
246
+ rblankpadding = ' ' * (width)
247
+ print rblankpadding
248
+ print ("\b" * rblankpadding.length)
150
249
 
151
- @linebuffer = linebuffer
250
+ print @linebuffer
251
+
252
+ elsif key == :home_key
152
253
 
153
254
  height, width = TermInfo.screen_size
154
255
 
155
- rblankpadding = ' ' * (width - @linebuffer.length )
156
- print @linebuffer
256
+ print ("\b" * @linebuffer.to_s.length)
257
+ @linebuffer = ''
258
+ rblankpadding = ' ' * (width)
157
259
  print rblankpadding
158
- print ("\b" * rblankpadding.length)
260
+ print ("\b" * rblankpadding.length)
159
261
 
160
- elsif key == :arrow_left
262
+ elsif key == :ctrl_arrow_right
161
263
 
162
- return if @keys.empty?
264
+ return if @input_selection.nil?
163
265
 
164
- @keys.pop
165
- oldlinebuffer = @linebuffer
166
- @linebuffer = @input_selection[@keys.count(:arrow_down) - 1]
266
+ @keys << :arrow_down
167
267
 
168
- print ("\b" * oldlinebuffer.length) + @linebuffer
268
+ i = @keys.count(:arrow_down) - 1
269
+
270
+ if i == @selection.length then
271
+ @keys.pop
272
+ return nil
273
+ end
274
+
275
+ select_item(i, append_command: true)
169
276
  end
277
+
278
+ return key
279
+ end
280
+
281
+ private
282
+
283
+ def select_item(i, append_command: false)
284
+
285
+
286
+ execute_command = false
287
+
288
+ linebuffer = @input_selection[i]
289
+ @item_selected = @input_selection[i]
290
+ return if linebuffer.nil?
291
+
292
+
293
+ oldlinebuffer = @linebuffer
294
+ print ("\b" * oldlinebuffer.length)
295
+
296
+
297
+ if @selection[i][1] == :branch or append_command then
298
+
299
+ if @linebuffer[-1] != ' ' then
300
+ a = @linebuffer.split(/ /)
301
+ a.pop
302
+ @linebuffer = a.join ' '
303
+ end
304
+
305
+ linebuffer.prepend @linebuffer
306
+ execute_command = false
307
+ else
308
+ execute_command = true
309
+ end
310
+
311
+ if @selection[i][1] == :branch then
312
+ words = @linebuffer.split(/ /)
313
+ @linebuffer = (words[0..-2] + [linebuffer]).join(' ')
314
+ else
315
+ @linebuffer = linebuffer
316
+ end
317
+
318
+ height, width = TermInfo.screen_size
319
+
320
+ rblankpadding = ' ' * (width - @linebuffer.length )
321
+ print @linebuffer
322
+ print rblankpadding
323
+ print ("\b" * rblankpadding.length)
324
+
325
+ execute_command ? "\r" : nil
326
+
170
327
  end
171
328
 
172
- end
329
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: console_cmdr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  JRl6lG+PlMKYzPBmY9bJ9nnHUzlNaUigwV8HWjUzq9NmckAilhs430t3xe8+fsIc
32
32
  uSZB48oWIrOfew==
33
33
  -----END CERTIFICATE-----
34
- date: 2016-12-01 00:00:00.000000000 Z
34
+ date: 2016-12-02 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: cmdr
@@ -73,6 +73,26 @@ dependencies:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.1.0
76
+ - !ruby/object:Gem::Dependency
77
+ name: colored
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.2'
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '1.2'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '1.2'
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '1.2'
76
96
  - !ruby/object:Gem::Dependency
77
97
  name: terminfo
78
98
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file