rbcurse-core 0.0.8 → 0.0.9
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/README.md +3 -1
- data/VERSION +1 -1
- data/examples/alpmenu.rb +6 -6
- data/examples/app.sample +1 -1
- data/examples/dbdemo.rb +7 -5
- data/lib/rbcurse/core/include/io.rb +2 -1
- data/lib/rbcurse/core/include/listscrollable.rb +10 -2
- data/lib/rbcurse/core/system/colormap.rb +1 -2
- data/lib/rbcurse/core/util/ansiparser.rb +2 -2
- data/lib/rbcurse/core/util/colorparser.rb +3 -2
- data/lib/rbcurse/core/util/rcommandwindow.rb +19 -3
- data/lib/rbcurse/core/util/widgetshortcuts.rb +2 -2
- data/lib/rbcurse/core/widgets/rcombo.rb +13 -4
- data/lib/rbcurse/core/widgets/rwidget.rb +27 -15
- data/lib/rbcurse/core/widgets/statusline.rb +1 -0
- data/rbcurse-core.gemspec +3 -3
- metadata +3 -3
data/README.md
CHANGED
@@ -41,7 +41,9 @@ Core intends to be :
|
|
41
41
|
|
42
42
|
## Testing Status
|
43
43
|
|
44
|
-
* Works on 1.9.3-p392 (my environment is zsh 5.0.x, tmux, TERM=screen-256color, OSX ML)
|
44
|
+
* Works on 1.9.3-p392 (my environment is zsh 5.0.x, tmux, TERM=screen-256color, OSX ML)
|
45
|
+
* Cannot promise if working on 1.8.7, am making some fixes (thanks hramrach), but may not be able to to
|
46
|
+
support 1.8.7 indefinitely. Please submit bugs on 1.8.7 if you find them.
|
45
47
|
|
46
48
|
## Other
|
47
49
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.9
|
data/examples/alpmenu.rb
CHANGED
@@ -8,35 +8,35 @@ require 'rbcurse/core/util/app'
|
|
8
8
|
stack :margin_top => 10, :margin_left => 15 do
|
9
9
|
#w = "Messages".length + 1
|
10
10
|
w = 60
|
11
|
-
menulink :text => "&View Dirs", :width => w, :description => "View Dirs in tree" do |s|
|
11
|
+
menulink :text => "&View Dirs", :width => w, :description => "View Dirs in tree" do |s, *stuff|
|
12
12
|
message "Pressed #{s.text} "
|
13
13
|
load './dirtree.rb'
|
14
14
|
#require './viewtodo'; todo = ViewTodo::TodoApp.new; todo.run
|
15
15
|
end
|
16
16
|
blank
|
17
|
-
menulink :text => "&Tabular", :width => w, :description => "Tabula Rasa" do |s|
|
17
|
+
menulink :text => "&Tabular", :width => w, :description => "Tabula Rasa" do |s, *stuff|
|
18
18
|
message "Pressed #{s.text} "
|
19
19
|
load './tabular.rb'
|
20
20
|
#require './testtodo'; todo = TestTodo::TodoApp.new; todo.run
|
21
21
|
end
|
22
22
|
blank
|
23
|
-
menulink :text => "&Messages", :width => w, :description => "View Tasks" do |s|
|
23
|
+
menulink :text => "&Messages", :width => w, :description => "View Tasks" do |s, *stuff|
|
24
24
|
message "Pressed #{s.text} "
|
25
25
|
load './tasks.rb'
|
26
26
|
end
|
27
27
|
blank
|
28
|
-
menulink :text => "&Database", :width => w, :description => "Database Demo" do |s|
|
28
|
+
menulink :text => "&Database", :width => w, :description => "Database Demo" do |s, *stuff|
|
29
29
|
message "Pressed #{s.getvalue} "
|
30
30
|
load './dbdemo.rb'
|
31
31
|
end
|
32
32
|
blank
|
33
33
|
# somehow ? in mnemonic won't work
|
34
|
-
menulink :text => "&Setup", :width => w, :description => "Configure Alpine options" do |s|
|
34
|
+
menulink :text => "&Setup", :width => w, :description => "Configure Alpine options" do |s, *stuff|
|
35
35
|
#message "Pressed #{s.text} "
|
36
36
|
alert "Not done!"
|
37
37
|
end
|
38
38
|
blank
|
39
|
-
menulink :text => "&Quit", :width => w, :description => "Quit this application" do |s|
|
39
|
+
menulink :text => "&Quit", :width => w, :description => "Quit this application" do |s, *stuff|
|
40
40
|
quit
|
41
41
|
end
|
42
42
|
@form.bind(:ENTER) do |w|
|
data/examples/app.sample
CHANGED
@@ -10,7 +10,7 @@ App.new do
|
|
10
10
|
:color => :black, :bgcolor => :white, :attr => :bold
|
11
11
|
message "Press F10 to exit from here, F1 for help, F2 for menu"
|
12
12
|
|
13
|
-
stack :margin_top => 1, height => FFI::NCurses.LINES-3 do
|
13
|
+
stack :margin_top => 1, :height => FFI::NCurses.LINES-3 do
|
14
14
|
|
15
15
|
end # stack
|
16
16
|
status_line :row => FFI::NCurses.LINES-1
|
data/examples/dbdemo.rb
CHANGED
@@ -17,7 +17,7 @@ end
|
|
17
17
|
def connect dbname
|
18
18
|
$log.debug "XXX: CONNECT got #{dbname} "
|
19
19
|
$current_db = dbname
|
20
|
-
$db = SQLite3::Database.new(dbname)
|
20
|
+
$db = SQLite3::Database.new(dbname) if dbname
|
21
21
|
|
22
22
|
return $db
|
23
23
|
end
|
@@ -59,7 +59,9 @@ def create_popup array, selection_mode=:single, &blk
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
|
62
|
+
#
|
63
|
+
# changed order of name and fields, thanks hramrach
|
64
|
+
def view_data name, fields="*"
|
63
65
|
stmt = "select #{fields} from #{name}"
|
64
66
|
stmt << $where_string if $where_string
|
65
67
|
stmt << $order_string if $order_string
|
@@ -192,7 +194,7 @@ App.new do
|
|
192
194
|
command do |menuitem, text|
|
193
195
|
$current_table = text
|
194
196
|
#alert(get_column_names(text).join(", "))
|
195
|
-
create_popup(get_column_names(text), :multiple) { |value| view_data( value.join(",")
|
197
|
+
create_popup(get_column_names(text), :multiple) { |value| view_data( text, value.join(",") ) }
|
196
198
|
end
|
197
199
|
end
|
198
200
|
item "New", "N"
|
@@ -281,7 +283,7 @@ App.new do
|
|
281
283
|
unless c.empty?
|
282
284
|
cols = c.join(",")
|
283
285
|
end
|
284
|
-
view_data
|
286
|
+
view_data $selected_table, cols
|
285
287
|
else
|
286
288
|
alert "Select a table first."
|
287
289
|
end
|
@@ -407,7 +409,7 @@ App.new do
|
|
407
409
|
unless c.empty?
|
408
410
|
cols = c.join(",")
|
409
411
|
end
|
410
|
-
view_data
|
412
|
+
view_data $current_table, cols
|
411
413
|
else
|
412
414
|
alert "Select a table first."
|
413
415
|
end
|
@@ -402,7 +402,8 @@ module Io
|
|
402
402
|
else
|
403
403
|
raise ArgumentError, "Promptmenu needs hotkey or mnemonic"
|
404
404
|
end
|
405
|
-
|
405
|
+
# 187compat 2013-03-20 - 19:00 throws up
|
406
|
+
labels << "%c. %s " % [ hk.getbyte(0), item.label ]
|
406
407
|
h[hk] = item
|
407
408
|
valid << hk
|
408
409
|
}
|
@@ -346,7 +346,12 @@ module ListScrollable
|
|
346
346
|
row1 = @list[ix].to_s
|
347
347
|
|
348
348
|
# 2011-09-29 crashing on a character F3 in log file
|
349
|
-
|
349
|
+
# 2013-03-20 - 18:25 187compat
|
350
|
+
if row1.respond_to? :encode
|
351
|
+
row = row1.encode("ASCII-8BIT", :invalid => :replace, :undef => :replace, :replace => "?")
|
352
|
+
else
|
353
|
+
row = row1
|
354
|
+
end
|
350
355
|
|
351
356
|
m=row.match(regex)
|
352
357
|
if !m.nil?
|
@@ -529,7 +534,10 @@ module ListScrollable
|
|
529
534
|
def sanitize content #:nodoc:
|
530
535
|
if content.is_a? String
|
531
536
|
content.chomp!
|
532
|
-
|
537
|
+
# 2013-03-20 - 18:29 187compat
|
538
|
+
if content.respond_to? :encode
|
539
|
+
content.replace(content.encode("ASCII-8BIT", :invalid => :replace, :undef => :replace, :replace => "?"))
|
540
|
+
end
|
533
541
|
content.gsub!(/[\t\r\n]/, ' ') # don't display tab, newline
|
534
542
|
content.gsub!(/\n/, ' ') # don't display tab, newline
|
535
543
|
content.gsub!(/[^[:print:]]/, '') # don't display non print characters
|
@@ -7,8 +7,7 @@ module ColorMap
|
|
7
7
|
# added check for fixnum if we go beyond these constants 2011-11-28
|
8
8
|
# e.g. to use full 256 colors
|
9
9
|
return colorstring if colorstring.is_a? Fixnum
|
10
|
-
ret = FFI::NCurses.const_get "COLOR_#{colorstring.upcase}"
|
11
|
-
#raise "color const nil ColorMap 8 " if !ret
|
10
|
+
ret = FFI::NCurses.const_get "COLOR_#{colorstring.to_s.upcase}"
|
12
11
|
end
|
13
12
|
## private
|
14
13
|
# creates a new color pair, puts in color map and returns color_pair
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# Author: rkumar http://github.com/rkumar/rbcurse/
|
8
8
|
# Date: 07.11.11 - 13:17
|
9
9
|
# License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
10
|
-
# Last update:
|
10
|
+
# Last update: 2013-03-21 00:44
|
11
11
|
# ----------------------------------------------------------------------------- #
|
12
12
|
# == TODO
|
13
13
|
# - perhaps we can compile the regexp once and reuse
|
@@ -37,7 +37,7 @@ class AnsiParser
|
|
37
37
|
a.each { |e|
|
38
38
|
## process color or attrib portion
|
39
39
|
#[ "", "\e[1m", "", "\e[34m", "", "\e[47m", "Showing all items...", "\e[0m", "", "\e[0m", "\n"]
|
40
|
-
if e[0] == "\x1b" && e[-1] == "m"
|
40
|
+
if e[0,1] == "\x1b" && e[-1,1] == "m"
|
41
41
|
|
42
42
|
#e.each { |f| x=/^.\[(.*).$/.match(f)
|
43
43
|
$log.debug "XXX: ANSI e #{e} "
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# Author: rkumar http://github.com/rkumar/rbcurse/
|
8
8
|
# Date: 07.11.11 - 13:17
|
9
9
|
# License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
10
|
-
# Last update:
|
10
|
+
# Last update: 2013-03-21 00:42
|
11
11
|
# ----------------------------------------------------------------------------- #
|
12
12
|
# == TODO
|
13
13
|
# - perhaps we can compile the regexp once and reuse
|
@@ -24,6 +24,7 @@ class DefaultColorParser
|
|
24
24
|
# @since 1.4.1 2011-11-3 experimental, can change
|
25
25
|
# @return [nil] knows nothign about output format.
|
26
26
|
|
27
|
+
# 187compat 2013-03-20 - 19:33 not working in 187 so added ,1 in some cases for string
|
27
28
|
def parse_format s # yields attribs or text
|
28
29
|
## set default colors
|
29
30
|
color = :white
|
@@ -35,7 +36,7 @@ class DefaultColorParser
|
|
35
36
|
a = s.split /(#\[[^\]]*\])/
|
36
37
|
a.each { |e|
|
37
38
|
## process color or attrib portion
|
38
|
-
if e[0,2] == "#[" && e[-1] == "]"
|
39
|
+
if e[0,2] == "#[" && e[-1,1] == "]"
|
39
40
|
# now resetting 1:20 PM November 3, 2011 , earlier we were carrying over
|
40
41
|
color, bgcolor, attrib = nil, nil, nil
|
41
42
|
catch(:done) do
|
@@ -37,12 +37,14 @@ module RubyCurses
|
|
37
37
|
@window = VER::Window.new(@layout)
|
38
38
|
@start = 0 # row for display of text with paging
|
39
39
|
@list = []
|
40
|
-
|
40
|
+
# 2013-03-21 - 00:34 removed due to 187
|
41
|
+
#require 'forwardable'
|
41
42
|
require 'rbcurse/core/util/bottomline'
|
42
43
|
@bottomline = Bottomline.new @window, 0
|
43
44
|
@bottomline.name = "rcommandwindow's bl"
|
44
|
-
|
45
|
-
|
45
|
+
# 187compat next line throws up on 187 module_eval undefined method for commandwindow
|
46
|
+
#extend Forwardable
|
47
|
+
#def_delegators :@bottomline, :ask, :say, :agree, :choose #, :display_text_interactive
|
46
48
|
if @box == :border
|
47
49
|
@window.box 0,0
|
48
50
|
elsif @box
|
@@ -63,6 +65,20 @@ module RubyCurses
|
|
63
65
|
@row_offset = 1
|
64
66
|
end
|
65
67
|
end
|
68
|
+
# 2013-03-21 - 187compat
|
69
|
+
#def_delegators :@bottomline, :ask, :say, :agree, :choose #, :display_text_interactive
|
70
|
+
def ask *args
|
71
|
+
@bottomline.send(:ask, *args)
|
72
|
+
end
|
73
|
+
def say *args
|
74
|
+
@bottomline.send(:say, *args)
|
75
|
+
end
|
76
|
+
def agree *args
|
77
|
+
@bottomline.send(:agree, *args)
|
78
|
+
end
|
79
|
+
def choose *args
|
80
|
+
@bottomline.send(:choose, *args)
|
81
|
+
end
|
66
82
|
# modify the window title, or get it if no params passed.
|
67
83
|
def title t=nil
|
68
84
|
return @title unless t
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# Also, stacks and flows objects
|
5
5
|
# Author: rkumar http://github.com/rkumar/rbcurse/
|
6
6
|
# Date: 05.11.11 - 15:13
|
7
|
-
# Last update:
|
7
|
+
# Last update: 2013-03-21 00:55
|
8
8
|
#
|
9
9
|
# I hope this slowly does not become an unmaintainable maze like vimsplit
|
10
10
|
#
|
@@ -93,7 +93,7 @@ module RubyCurses
|
|
93
93
|
if path
|
94
94
|
p="require \"#{path}\""
|
95
95
|
end
|
96
|
-
short ||= klass.downcase
|
96
|
+
short ||= klass.to_s.downcase
|
97
97
|
eval %{
|
98
98
|
def #{short}(config={}, &block)
|
99
99
|
if config.is_a? String
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# Author: rkumar http://github.com/rkumar/rbcurse/
|
9
9
|
# Date: 2011-11-11 - 21:42
|
10
10
|
# License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
11
|
-
# Last update:
|
11
|
+
# Last update: 2013-03-21 01:45
|
12
12
|
# ----------------------------------------------------------------------------- #
|
13
13
|
#
|
14
14
|
require 'rbcurse'
|
@@ -35,7 +35,13 @@ module RubyCurses
|
|
35
35
|
def initialize form, config={}, &block
|
36
36
|
@arrow_key_policy = :ignore
|
37
37
|
@editable = false
|
38
|
-
|
38
|
+
#@COMBO_SYMBOL = "v".ord # trying this out
|
39
|
+
# thanks hramrach for fix
|
40
|
+
if RUBY_VERSION < "1.9" then
|
41
|
+
@COMBO_SYMBOL = "v"[0] # trying this out
|
42
|
+
else
|
43
|
+
@COMBO_SYMBOL = "v".ord # trying this out
|
44
|
+
end
|
39
45
|
@current_index = 0
|
40
46
|
super
|
41
47
|
# added if check since it was overriding set_buffer in creation. 2009-01-18 00:03
|
@@ -48,8 +54,11 @@ module RubyCurses
|
|
48
54
|
@show_symbol = true if @show_symbol.nil? # if set to false don't touch
|
49
55
|
#@show_symbol = false if @label # 2011-11-13
|
50
56
|
@COMBO_SYMBOL ||= FFI::NCurses::ACS_DARROW #GEQUAL
|
51
|
-
|
52
|
-
|
57
|
+
|
58
|
+
# next 2 lines giving an error in newtabbedwindow.rb example since the methods
|
59
|
+
# have been deprecated.
|
60
|
+
#bind_key(KEY_UP) { previous_row }
|
61
|
+
#bind_key(KEY_DOWN) { next_row }
|
53
62
|
end
|
54
63
|
def selected_item
|
55
64
|
@list[@current_index]
|
@@ -9,7 +9,7 @@
|
|
9
9
|
* Author: rkumar (arunachalesha)
|
10
10
|
* Date: 2008-11-19 12:49
|
11
11
|
* License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
12
|
-
* Last update: 2013-03-
|
12
|
+
* Last update: 2013-03-21 00:30
|
13
13
|
|
14
14
|
== CHANGES
|
15
15
|
* 2011-10-2 Added PropertyVetoException to rollback changes to property
|
@@ -30,10 +30,11 @@ require 'rbcurse/core/include/rinputdataevent' # for FIELD 2010-09-11 12:31
|
|
30
30
|
require 'rbcurse/core/include/io'
|
31
31
|
require 'rbcurse/core/system/keydefs'
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
# 2013-03-21 - 187compat removed ||
|
34
|
+
BOLD = FFI::NCurses::A_BOLD
|
35
|
+
REVERSE = FFI::NCurses::A_REVERSE
|
36
|
+
UNDERLINE = FFI::NCurses::A_UNDERLINE
|
37
|
+
NORMAL = FFI::NCurses::A_NORMAL
|
37
38
|
|
38
39
|
class Object
|
39
40
|
# thanks to terminal-table for this method
|
@@ -116,15 +117,24 @@ end
|
|
116
117
|
|
117
118
|
# 2009-10-04 14:13 added RK after suggestion on http://www.ruby-forum.com/topic/196618#856703
|
118
119
|
# these are for 1.8 compatibility
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end
|
120
|
+
unless "a"[0] == "a"
|
121
|
+
class Fixnum
|
122
|
+
def ord
|
123
|
+
self
|
124
|
+
end
|
125
|
+
## mostly for control and meta characters
|
126
|
+
def getbyte(n)
|
127
|
+
self
|
128
|
+
end
|
129
|
+
end unless "a"[0] == "a"
|
130
|
+
# 2013-03-21 - 187compat
|
131
|
+
class String
|
132
|
+
## mostly for control and meta characters
|
133
|
+
def getbyte(n)
|
134
|
+
self[n]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
128
138
|
|
129
139
|
module RubyCurses
|
130
140
|
extend self
|
@@ -461,7 +471,9 @@ module RubyCurses
|
|
461
471
|
else
|
462
472
|
raise ArgumentError, "Don't know how to handle #{arg.class} in PrefixManager"
|
463
473
|
end
|
464
|
-
|
474
|
+
# 2013-03-20 - 18:45 187compat gave error in 187 cannot convert string to int
|
475
|
+
#@descriptions ||= []
|
476
|
+
@descriptions ||= {}
|
465
477
|
@descriptions[_keycode] = desc
|
466
478
|
|
467
479
|
if !block_given?
|
@@ -95,6 +95,7 @@ module RubyCurses
|
|
95
95
|
t = Time.now
|
96
96
|
tt = t.strftime "%F %H:%M:%S"
|
97
97
|
r = Ncurses.LINES
|
98
|
+
# 2013-03-20 - 19:04 next line printing as is in 187 ???? what to do
|
98
99
|
ftext = "#[fg=green,bg=blue] %-20s" % [tt] # print a default
|
99
100
|
@form.window.printstring_formatted_right @row, nil, ftext, $datacolor, Ncurses::A_REVERSE
|
100
101
|
end
|
data/rbcurse-core.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rbcurse-core"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rahul Kumar"]
|
12
|
-
s.date = "2013-03-
|
13
|
-
s.description = "Ruby curses/ncurses widgets for easy application development on text terminals (ruby 1.9
|
12
|
+
s.date = "2013-03-21"
|
13
|
+
s.description = "Ruby curses/ncurses widgets for easy application development on text terminals (ruby 1.9)"
|
14
14
|
s.email = "sentinel1879@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.md"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbcurse-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi-ncurses
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.4.0
|
30
30
|
description: Ruby curses/ncurses widgets for easy application development on text
|
31
|
-
terminals (ruby 1.9
|
31
|
+
terminals (ruby 1.9)
|
32
32
|
email: sentinel1879@gmail.com
|
33
33
|
executables: []
|
34
34
|
extensions: []
|