ffi-ncurses 0.3.2 → 0.3.3
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/History.txt +20 -0
- data/README.rdoc +14 -22
- data/examples/example-attributes.rb +11 -11
- data/examples/example-colour.rb +10 -9
- data/examples/example-keys.rb +1 -1
- data/examples/example-mouse.rb +3 -2
- data/examples/example.rb +9 -12
- data/examples/ncurses-example.rb +8 -9
- data/ffi-ncurses.gemspec +41 -21
- data/lib/ffi-ncurses.rb +21 -14
- data/lib/ffi-ncurses/keydefs.rb +103 -101
- data/lib/ffi-ncurses/mouse.rb +9 -8
- data/lib/ffi-ncurses/ord-shim.rb +9 -0
- metadata +39 -26
- data/Rakefile +0 -66
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -50
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -300
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
data/lib/ffi-ncurses/keydefs.rb
CHANGED
@@ -1,106 +1,108 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module FFI
|
2
|
+
module NCurses
|
3
|
+
KEY_CODE_YES = 0400 # A wchar_t contains a key code
|
4
|
+
KEY_MIN = 0401 # Minimum curses key
|
5
|
+
KEY_BREAK = 0401 # Break key (unreliable)
|
6
|
+
KEY_SRESET = 0530 # Soft (partial) reset (unreliable)
|
7
|
+
KEY_RESET = 0531 # Reset or hard reset (unreliable)
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
KEY_DOWN = 0402 # down-arrow key
|
10
|
+
KEY_UP = 0403 # up-arrow key
|
11
|
+
KEY_LEFT = 0404 # left-arrow key
|
12
|
+
KEY_RIGHT = 0405 # right-arrow key
|
13
|
+
KEY_HOME = 0406 # home key
|
14
|
+
KEY_BACKSPACE = 0407 # backspace key
|
15
|
+
KEY_F0 = 0410 # Function keys. Space for 64
|
16
|
+
|
17
|
+
# Value of function key n
|
18
|
+
def KEY_F(n)
|
19
|
+
(KEY_F0+(n))
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
22
|
+
KEY_DL = 0510 # delete-line key
|
23
|
+
KEY_IL = 0511 # insert-line key
|
24
|
+
KEY_DC = 0512 # delete-character key
|
25
|
+
KEY_IC = 0513 # insert-character key
|
26
|
+
KEY_EIC = 0514 # sent by rmir or smir in insert mode
|
27
|
+
KEY_CLEAR = 0515 # clear-screen or erase key
|
28
|
+
KEY_EOS = 0516 # clear-to-end-of-screen key
|
29
|
+
KEY_EOL = 0517 # clear-to-end-of-line key
|
30
|
+
KEY_SF = 0520 # scroll-forward key
|
31
|
+
KEY_SR = 0521 # scroll-backward key
|
32
|
+
KEY_NPAGE = 0522 # next-page key
|
33
|
+
KEY_PPAGE = 0523 # previous-page key
|
34
|
+
KEY_STAB = 0524 # set-tab key
|
35
|
+
KEY_CTAB = 0525 # clear-tab key
|
36
|
+
KEY_CATAB = 0526 # clear-all-tabs key
|
37
|
+
KEY_ENTER = 0527 # enter/send key
|
38
|
+
KEY_PRINT = 0532 # print key
|
39
|
+
KEY_LL = 0533 # lower-left key (home down)
|
40
|
+
KEY_A1 = 0534 # upper left of keypad
|
41
|
+
KEY_A3 = 0535 # upper right of keypad
|
42
|
+
KEY_B2 = 0536 # center of keypad
|
43
|
+
KEY_C1 = 0537 # lower left of keypad
|
44
|
+
KEY_C3 = 0540 # lower right of keypad
|
45
|
+
KEY_BTAB = 0541 # back-tab key
|
46
|
+
KEY_BEG = 0542 # begin key
|
47
|
+
KEY_CANCEL = 0543 # cancel key
|
48
|
+
KEY_CLOSE = 0544 # close key
|
49
|
+
KEY_COMMAND = 0545 # command key
|
50
|
+
KEY_COPY = 0546 # copy key
|
51
|
+
KEY_CREATE = 0547 # create key
|
52
|
+
KEY_END = 0550 # end key
|
53
|
+
KEY_EXIT = 0551 # exit key
|
54
|
+
KEY_FIND = 0552 # find key
|
55
|
+
KEY_HELP = 0553 # help key
|
56
|
+
KEY_MARK = 0554 # mark key
|
57
|
+
KEY_MESSAGE = 0555 # message key
|
58
|
+
KEY_MOVE = 0556 # move key
|
59
|
+
KEY_NEXT = 0557 # next key
|
60
|
+
KEY_OPEN = 0560 # open key
|
61
|
+
KEY_OPTIONS = 0561 # options key
|
62
|
+
KEY_PREVIOUS = 0562 # previous key
|
63
|
+
KEY_REDO = 0563 # redo key
|
64
|
+
KEY_REFERENCE = 0564 # reference key
|
65
|
+
KEY_REFRESH = 0565 # refresh key
|
66
|
+
KEY_REPLACE = 0566 # replace key
|
67
|
+
KEY_RESTART = 0567 # restart key
|
68
|
+
KEY_RESUME = 0570 # resume key
|
69
|
+
KEY_SAVE = 0571 # save key
|
70
|
+
KEY_SBEG = 0572 # shifted begin key
|
71
|
+
KEY_SCANCEL = 0573 # shifted cancel key
|
72
|
+
KEY_SCOMMAND = 0574 # shifted command key
|
73
|
+
KEY_SCOPY = 0575 # shifted copy key
|
74
|
+
KEY_SCREATE = 0576 # shifted create key
|
75
|
+
KEY_SDC = 0577 # shifted delete-character key
|
76
|
+
KEY_SDL = 0600 # shifted delete-line key
|
77
|
+
KEY_SELECT = 0601 # select key
|
78
|
+
KEY_SEND = 0602 # shifted end key
|
79
|
+
KEY_SEOL = 0603 # shifted clear-to-end-of-line key
|
80
|
+
KEY_SEXIT = 0604 # shifted exit key
|
81
|
+
KEY_SFIND = 0605 # shifted find key
|
82
|
+
KEY_SHELP = 0606 # shifted help key
|
83
|
+
KEY_SHOME = 0607 # shifted home key
|
84
|
+
KEY_SIC = 0610 # shifted insert-character key
|
85
|
+
KEY_SLEFT = 0611 # shifted left-arrow key
|
86
|
+
KEY_SMESSAGE = 0612 # shifted message key
|
87
|
+
KEY_SMOVE = 0613 # shifted move key
|
88
|
+
KEY_SNEXT = 0614 # shifted next key
|
89
|
+
KEY_SOPTIONS = 0615 # shifted options key
|
90
|
+
KEY_SPREVIOUS = 0616 # shifted previous key
|
91
|
+
KEY_SPRINT = 0617 # shifted print key
|
92
|
+
KEY_SREDO = 0620 # shifted redo key
|
93
|
+
KEY_SREPLACE = 0621 # shifted replace key
|
94
|
+
KEY_SRIGHT = 0622 # shifted right-arrow key
|
95
|
+
KEY_SRSUME = 0623 # shifted resume key
|
96
|
+
KEY_SSAVE = 0624 # shifted save key
|
97
|
+
KEY_SSUSPEND = 0625 # shifted suspend key
|
98
|
+
KEY_SUNDO = 0626 # shifted undo key
|
99
|
+
KEY_SUSPEND = 0627 # suspend key
|
100
|
+
KEY_UNDO = 0630 # undo key
|
101
|
+
KEY_MOUSE = 0631 # Mouse event has occurred
|
102
|
+
KEY_RESIZE = 0632 # Terminal resize event
|
103
|
+
KEY_EVENT = 0633 # We were interrupted by an event
|
103
104
|
|
104
|
-
|
105
|
+
KEY_MAX = 0777 # Maximum key value is 0633 [SOH: sic in ncurses.h]
|
105
106
|
|
107
|
+
end
|
106
108
|
end
|
data/lib/ffi-ncurses/mouse.rb
CHANGED
@@ -4,7 +4,7 @@ module FFI
|
|
4
4
|
|
5
5
|
NCURSES_MOUSE_VERSION = 1
|
6
6
|
|
7
|
-
# mouse interface
|
7
|
+
# mouse interface
|
8
8
|
|
9
9
|
if NCURSES_MOUSE_VERSION > 1
|
10
10
|
def self.NCURSES_MOUSE_MASK(b,m)
|
@@ -23,7 +23,7 @@ module FFI
|
|
23
23
|
NCURSES_TRIPLE_CLICKED = 020
|
24
24
|
NCURSES_RESERVED_EVENT = 040
|
25
25
|
|
26
|
-
# event masks
|
26
|
+
# event masks
|
27
27
|
BUTTON1_RELEASED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
|
28
28
|
BUTTON1_PRESSED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
|
29
29
|
BUTTON1_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
|
@@ -52,7 +52,7 @@ module FFI
|
|
52
52
|
# In 32 bits the version-1 scheme does not provide enough space for a 5th
|
53
53
|
# button, unless we choose to change the ABI by omitting the reserved-events.
|
54
54
|
#
|
55
|
-
|
55
|
+
|
56
56
|
if NCURSES_MOUSE_VERSION > 1
|
57
57
|
|
58
58
|
BUTTON5_RELEASED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
|
@@ -60,7 +60,7 @@ module FFI
|
|
60
60
|
BUTTON5_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
|
61
61
|
BUTTON5_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
|
62
62
|
BUTTON5_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
|
63
|
-
|
63
|
+
|
64
64
|
BUTTON_CTRL = NCURSES_MOUSE_MASK(6, 0001)
|
65
65
|
BUTTON_SHIFT = NCURSES_MOUSE_MASK(6, 0002)
|
66
66
|
BUTTON_ALT = NCURSES_MOUSE_MASK(6, 0004)
|
@@ -83,7 +83,7 @@ module FFI
|
|
83
83
|
ALL_MOUSE_EVENTS = (REPORT_MOUSE_POSITION - 1)
|
84
84
|
|
85
85
|
class << self
|
86
|
-
# macros to extract single event-bits from masks
|
86
|
+
# macros to extract single event-bits from masks
|
87
87
|
def BUTTON_RELEASE(e, x)
|
88
88
|
((e) & (001 << (6 * ((x) - 1))))
|
89
89
|
end
|
@@ -116,8 +116,9 @@ module FFI
|
|
116
116
|
|
117
117
|
# def mouse_trafo(y, x, to_screen)
|
118
118
|
# end
|
119
|
-
|
120
|
-
|
119
|
+
|
120
|
+
# already defined in keydefs.rb
|
121
|
+
# KEY_MOUSE = 0631 # Mouse event has occurred
|
121
122
|
|
122
123
|
#FFI.add_typedef :ulong, :mmask_t
|
123
124
|
class MEVENT < FFI::Struct
|
@@ -134,7 +135,7 @@ module FFI
|
|
134
135
|
[:getmouse, [MEVENT], :int],
|
135
136
|
[:ungetmouse, [MEVENT], :int],
|
136
137
|
]
|
137
|
-
|
138
|
+
|
138
139
|
functions.each do |function|
|
139
140
|
begin
|
140
141
|
attach_function(*function)
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-ncurses
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 3
|
9
|
+
version: 0.3.3
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Sean O'Halpin
|
@@ -9,20 +14,34 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2009-02-
|
17
|
+
date: 2009-02-24 00:00:00 +00:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
|
18
|
-
|
19
|
-
|
21
|
+
name: ffi
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 6
|
31
|
+
- 3
|
32
|
+
version: 0.6.3
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: |
|
36
|
+
A wrapper for ncurses 5.x. Tested on Ubuntu 8.04 to 10.04 and Mac OS X
|
37
|
+
10.4 (Tiger) with ruby 1.8.6, 1.8.7 and 1.9.x using ffi (>= 0.6.3) and
|
38
|
+
JRuby 1.5.1.
|
39
|
+
|
40
|
+
The API is a transliteration of the C API rather than an attempt to
|
41
|
+
provide an idiomatic Ruby object-oriented API.
|
42
|
+
|
43
|
+
See the examples directory for real working examples.
|
44
|
+
|
26
45
|
email: sean.ohalpin@gmail.com
|
27
46
|
executables: []
|
28
47
|
|
@@ -34,7 +53,6 @@ extra_rdoc_files:
|
|
34
53
|
files:
|
35
54
|
- History.txt
|
36
55
|
- README.rdoc
|
37
|
-
- Rakefile
|
38
56
|
- examples/doc-eg1.rb
|
39
57
|
- examples/doc-eg2.rb
|
40
58
|
- examples/doc-eg3.rb
|
@@ -57,21 +75,12 @@ files:
|
|
57
75
|
- lib/ffi-ncurses/darwin.rb
|
58
76
|
- lib/ffi-ncurses/keydefs.rb
|
59
77
|
- lib/ffi-ncurses/mouse.rb
|
78
|
+
- lib/ffi-ncurses/ord-shim.rb
|
60
79
|
- lib/ffi-ncurses/winstruct.rb
|
61
|
-
- tasks/ann.rake
|
62
|
-
- tasks/bones.rake
|
63
|
-
- tasks/gem.rake
|
64
|
-
- tasks/git.rake
|
65
|
-
- tasks/notes.rake
|
66
|
-
- tasks/post_load.rake
|
67
|
-
- tasks/rdoc.rake
|
68
|
-
- tasks/rubyforge.rake
|
69
|
-
- tasks/setup.rb
|
70
|
-
- tasks/spec.rake
|
71
|
-
- tasks/svn.rake
|
72
|
-
- tasks/test.rake
|
73
80
|
has_rdoc: true
|
74
81
|
homepage: http://github.com/seanohalpin/ffi-ncurses
|
82
|
+
licenses: []
|
83
|
+
|
75
84
|
post_install_message:
|
76
85
|
rdoc_options:
|
77
86
|
- --main
|
@@ -79,23 +88,27 @@ rdoc_options:
|
|
79
88
|
require_paths:
|
80
89
|
- lib
|
81
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
82
92
|
requirements:
|
83
93
|
- - ">="
|
84
94
|
- !ruby/object:Gem::Version
|
95
|
+
segments:
|
96
|
+
- 0
|
85
97
|
version: "0"
|
86
|
-
version:
|
87
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
88
100
|
requirements:
|
89
101
|
- - ">="
|
90
102
|
- !ruby/object:Gem::Version
|
103
|
+
segments:
|
104
|
+
- 0
|
91
105
|
version: "0"
|
92
|
-
version:
|
93
106
|
requirements: []
|
94
107
|
|
95
108
|
rubyforge_project: ffi-ncurses
|
96
|
-
rubygems_version: 1.3.
|
109
|
+
rubygems_version: 1.3.7
|
97
110
|
signing_key:
|
98
|
-
specification_version:
|
111
|
+
specification_version: 3
|
99
112
|
summary: FFI wrapper for ncurses
|
100
113
|
test_files: []
|
101
114
|
|
data/Rakefile
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
# Look in the tasks/setup.rb file for the various options that can be
|
2
|
-
# configured in this Rakefile. The .rake files in the tasks directory
|
3
|
-
# are where the options are used.
|
4
|
-
|
5
|
-
begin
|
6
|
-
require 'bones'
|
7
|
-
Bones.setup
|
8
|
-
rescue LoadError
|
9
|
-
begin
|
10
|
-
load 'tasks/setup.rb'
|
11
|
-
rescue LoadError
|
12
|
-
raise RuntimeError, '### please install the "bones" gem ###'
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
if File.exist?('local/config.rb')
|
17
|
-
load 'local/config.rb'
|
18
|
-
end
|
19
|
-
|
20
|
-
ensure_in_path 'lib'
|
21
|
-
require 'ffi-ncurses'
|
22
|
-
|
23
|
-
task :default => 'spec:run'
|
24
|
-
|
25
|
-
# see tasks/setup.rb for full list of options
|
26
|
-
|
27
|
-
PROJ.name = 'ffi-ncurses'
|
28
|
-
PROJ.authors = ["Sean O'Halpin"]
|
29
|
-
PROJ.email = 'sean.ohalpin@gmail.com'
|
30
|
-
PROJ.url = 'http://github.com/seanohalpin/ffi-ncurses'
|
31
|
-
PROJ.summary = "FFI wrapper for ncurses"
|
32
|
-
PROJ.version = FFI::NCurses::VERSION
|
33
|
-
PROJ.rubyforge.name = 'ffi-ncurses'
|
34
|
-
|
35
|
-
PROJ.description = <<EOT
|
36
|
-
A wrapper for ncurses 5.x. Tested on Mac OS X 10.4 (Tiger) and Ubuntu
|
37
|
-
8.04 with ruby 1.8.6 using ruby-ffi (>= 0.2.0) and JRuby 1.1.6.
|
38
|
-
|
39
|
-
The API is very much a transliteration of the C API rather than an
|
40
|
-
attempt to provide an idiomatic Ruby object-oriented API. The intent
|
41
|
-
is to provide a 'close to the metal' wrapper around the ncurses
|
42
|
-
library upon which you can build your own abstractions.
|
43
|
-
|
44
|
-
See the examples directory for real working examples.
|
45
|
-
EOT
|
46
|
-
|
47
|
-
# gem
|
48
|
-
# PROJ.gem.dependencies << ["ffi", ">= 0.2.0"]
|
49
|
-
|
50
|
-
# rdoc
|
51
|
-
PROJ.rdoc.exclude << "^notes"
|
52
|
-
PROJ.readme_file = 'README.rdoc'
|
53
|
-
|
54
|
-
# spec
|
55
|
-
PROJ.spec.opts << '--color'
|
56
|
-
|
57
|
-
# files
|
58
|
-
PROJ.exclude = %w(tmp$ bak$ ~$ CVS \.svn ^pkg ^doc \.git local notes)
|
59
|
-
PROJ.exclude << '^tags$' << "^bug" << "^tools"
|
60
|
-
PROJ.exclude << File.read('.gitignore').split(/\n/)
|
61
|
-
|
62
|
-
# notes
|
63
|
-
#PROJ.notes.exclude = %w(^README\.txt$ ^data/)
|
64
|
-
PROJ.notes.extensions << '.org'
|
65
|
-
|
66
|
-
# EOF
|