ffi-ncurses 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +22 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +13 -0
- data/History.txt +32 -3
- data/README.rdoc +118 -58
- data/Rakefile +30 -0
- data/examples/acs_chars.rb +53 -0
- data/examples/acs_chars.rbc +1502 -0
- data/examples/{example-attributes.rb → attributes.rb} +0 -0
- data/examples/color.rb +63 -0
- data/examples/cursor.rb +27 -0
- data/examples/example.rb +17 -17
- data/examples/getkey.rb +212 -0
- data/examples/{example-getsetsyx.rb → getsetsyx.rb} +2 -2
- data/examples/globals.rb +38 -0
- data/examples/hello.rb +34 -0
- data/examples/hello.rbc +638 -0
- data/examples/hellowide.rb +59 -0
- data/examples/keys.rb +27 -0
- data/examples/{example-mouse.rb → mouse.rb} +2 -2
- data/examples/multiterm.rb +120 -0
- data/examples/ncurses/LICENSES_for_examples +26 -0
- data/examples/{ncurses-example.rb → ncurses/example.rb} +13 -80
- data/examples/ncurses/hello_ncurses.rb +57 -0
- data/examples/ncurses/rain.rb +220 -0
- data/examples/ncurses/read_line.rb +67 -0
- data/examples/ncurses/subwin.rb +71 -0
- data/examples/ncurses/tclock.rb +227 -0
- data/examples/newterm.rb +65 -0
- data/examples/panel_simple.rb +82 -0
- data/examples/{example-printw-variadic.rb → printw-variadic.rb} +1 -1
- data/examples/ripoffline.rb +86 -0
- data/examples/run-all.sh +14 -0
- data/examples/{example-softkeys.rb → softkeys.rb} +0 -0
- data/examples/{example-stdscr.rb → stdscr.rb} +2 -1
- data/examples/temp_leave.rb +99 -0
- data/examples/viewer.rb +350 -0
- data/examples/wacs_chars.rb +64 -0
- data/examples/windows.rb +73 -0
- data/ffi-ncurses.gemspec +39 -52
- data/lib/ffi-ncurses.rb +214 -474
- data/lib/ffi-ncurses/acs.rb +150 -0
- data/lib/ffi-ncurses/bool_wrappers.rb +66 -0
- data/lib/ffi-ncurses/functions.rb +450 -0
- data/lib/ffi-ncurses/keydefs.rb +136 -99
- data/lib/ffi-ncurses/mouse.rb +106 -106
- data/lib/ffi-ncurses/ncurses.rb +176 -0
- data/lib/ffi-ncurses/{ord-shim.rb → ord_shim.rb} +0 -0
- data/lib/ffi-ncurses/panel.rb +21 -0
- data/lib/ffi-ncurses/typedefs.rb +35 -0
- data/lib/ffi-ncurses/version.rb +7 -0
- data/lib/ffi-ncurses/widechars.rb +137 -0
- data/lib/ffi-ncurses/winstruct.rb +55 -33
- data/spec/attached_functions_spec.rb +42 -0
- metadata +95 -85
- data/examples/example-colour.rb +0 -63
- data/examples/example-cursor.rb +0 -22
- data/examples/example-hello.rb +0 -24
- data/examples/example-jruby.rb +0 -14
- data/examples/example-keys.rb +0 -25
- data/examples/example-windows.rb +0 -24
data/lib/ffi-ncurses/keydefs.rb
CHANGED
@@ -1,108 +1,145 @@
|
|
1
|
+
# -*- coding: utf-8; -*-
|
1
2
|
module FFI
|
2
3
|
module NCurses
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
KEY_RESET = 0531 # Reset or hard reset (unreliable)
|
4
|
+
module KeyDefs
|
5
|
+
KEY_TAB = 9
|
6
|
+
KEY_RETURN = 10
|
7
|
+
KEY_ESCAPE = 27
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
KEY_F0 = 0410 # Function keys. Space for 64
|
9
|
+
# Note: these are octal numbers.
|
10
|
+
KEY_CODE_YES = 0400 # A wchar_t contains a key code
|
11
|
+
KEY_MIN = 0401 # Minimum curses key
|
12
|
+
KEY_BREAK = 0401 # Break key (unreliable)
|
13
|
+
KEY_SRESET = 0530 # Soft (partial) reset (unreliable)
|
14
|
+
KEY_RESET = 0531 # Reset or hard reset (unreliable)
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
KEY_DOWN = 0402 # down-arrow key
|
17
|
+
KEY_UP = 0403 # up-arrow key
|
18
|
+
KEY_LEFT = 0404 # left-arrow key
|
19
|
+
KEY_RIGHT = 0405 # right-arrow key
|
20
|
+
KEY_HOME = 0406 # home key
|
21
|
+
KEY_BACKSPACE = 0407 # backspace key
|
22
|
+
KEY_F0 = 0410 # Function keys. Space for 64
|
23
|
+
|
24
|
+
KEY_DL = 0510 # delete-line key
|
25
|
+
KEY_IL = 0511 # insert-line key
|
26
|
+
KEY_DC = 0512 # delete-character key
|
27
|
+
KEY_IC = 0513 # insert-character key
|
28
|
+
KEY_EIC = 0514 # sent by rmir or smir in insert mode
|
29
|
+
KEY_CLEAR = 0515 # clear-screen or erase key
|
30
|
+
KEY_EOS = 0516 # clear-to-end-of-screen key
|
31
|
+
KEY_EOL = 0517 # clear-to-end-of-line key
|
32
|
+
KEY_SF = 0520 # scroll-forward key
|
33
|
+
KEY_SR = 0521 # scroll-backward key
|
34
|
+
KEY_NPAGE = 0522 # next-page key
|
35
|
+
KEY_PPAGE = 0523 # previous-page key
|
36
|
+
KEY_STAB = 0524 # set-tab key
|
37
|
+
KEY_CTAB = 0525 # clear-tab key
|
38
|
+
KEY_CATAB = 0526 # clear-all-tabs key
|
39
|
+
KEY_ENTER = 0527 # enter/send key
|
40
|
+
KEY_PRINT = 0532 # print key
|
41
|
+
KEY_LL = 0533 # lower-left key (home down)
|
42
|
+
KEY_A1 = 0534 # upper left of keypad
|
43
|
+
KEY_A3 = 0535 # upper right of keypad
|
44
|
+
KEY_B2 = 0536 # center of keypad
|
45
|
+
KEY_C1 = 0537 # lower left of keypad
|
46
|
+
KEY_C3 = 0540 # lower right of keypad
|
47
|
+
KEY_BTAB = 0541 # back-tab key
|
48
|
+
KEY_BEG = 0542 # begin key
|
49
|
+
KEY_CANCEL = 0543 # cancel key
|
50
|
+
KEY_CLOSE = 0544 # close key
|
51
|
+
KEY_COMMAND = 0545 # command key
|
52
|
+
KEY_COPY = 0546 # copy key
|
53
|
+
KEY_CREATE = 0547 # create key
|
54
|
+
KEY_END = 0550 # end key
|
55
|
+
KEY_EXIT = 0551 # exit key
|
56
|
+
KEY_FIND = 0552 # find key
|
57
|
+
KEY_HELP = 0553 # help key
|
58
|
+
KEY_MARK = 0554 # mark key
|
59
|
+
KEY_MESSAGE = 0555 # message key
|
60
|
+
KEY_MOVE = 0556 # move key
|
61
|
+
KEY_NEXT = 0557 # next key
|
62
|
+
KEY_OPEN = 0560 # open key
|
63
|
+
KEY_OPTIONS = 0561 # options key
|
64
|
+
KEY_PREVIOUS = 0562 # previous key
|
65
|
+
KEY_REDO = 0563 # redo key
|
66
|
+
KEY_REFERENCE = 0564 # reference key
|
67
|
+
KEY_REFRESH = 0565 # refresh key
|
68
|
+
KEY_REPLACE = 0566 # replace key
|
69
|
+
KEY_RESTART = 0567 # restart key
|
70
|
+
KEY_RESUME = 0570 # resume key
|
71
|
+
KEY_SAVE = 0571 # save key
|
72
|
+
KEY_SBEG = 0572 # shifted begin key
|
73
|
+
KEY_SCANCEL = 0573 # shifted cancel key
|
74
|
+
KEY_SCOMMAND = 0574 # shifted command key
|
75
|
+
KEY_SCOPY = 0575 # shifted copy key
|
76
|
+
KEY_SCREATE = 0576 # shifted create key
|
77
|
+
KEY_SDC = 0577 # shifted delete-character key
|
78
|
+
KEY_SDL = 0600 # shifted delete-line key
|
79
|
+
KEY_SELECT = 0601 # select key
|
80
|
+
KEY_SEND = 0602 # shifted end key
|
81
|
+
KEY_SEOL = 0603 # shifted clear-to-end-of-line key
|
82
|
+
KEY_SEXIT = 0604 # shifted exit key
|
83
|
+
KEY_SFIND = 0605 # shifted find key
|
84
|
+
KEY_SHELP = 0606 # shifted help key
|
85
|
+
KEY_SHOME = 0607 # shifted home key
|
86
|
+
KEY_SIC = 0610 # shifted insert-character key
|
87
|
+
KEY_SLEFT = 0611 # shifted left-arrow key
|
88
|
+
KEY_SMESSAGE = 0612 # shifted message key
|
89
|
+
KEY_SMOVE = 0613 # shifted move key
|
90
|
+
KEY_SNEXT = 0614 # shifted next key
|
91
|
+
KEY_SOPTIONS = 0615 # shifted options key
|
92
|
+
KEY_SPREVIOUS = 0616 # shifted previous key
|
93
|
+
KEY_SPRINT = 0617 # shifted print key
|
94
|
+
KEY_SREDO = 0620 # shifted redo key
|
95
|
+
KEY_SREPLACE = 0621 # shifted replace key
|
96
|
+
KEY_SRIGHT = 0622 # shifted right-arrow key
|
97
|
+
KEY_SRSUME = 0623 # shifted resume key
|
98
|
+
KEY_SSAVE = 0624 # shifted save key
|
99
|
+
KEY_SSUSPEND = 0625 # shifted suspend key
|
100
|
+
KEY_SUNDO = 0626 # shifted undo key
|
101
|
+
KEY_SUSPEND = 0627 # suspend key
|
102
|
+
KEY_UNDO = 0630 # undo key
|
103
|
+
KEY_MOUSE = 0631 # Mouse event has occurred
|
104
|
+
KEY_RESIZE = 0632 # Terminal resize event
|
105
|
+
KEY_EVENT = 0633 # We were interrupted by an event
|
106
|
+
|
107
|
+
KEY_MAX = 0777 # Maximum key value is 0633 [SOH: sic in ncurses.h]
|
21
108
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
109
|
+
module KeyHelper
|
110
|
+
# Ctrl + letter
|
111
|
+
if ?A == "A"
|
112
|
+
# 1.9+
|
113
|
+
def KEY_CTRL(letter)
|
114
|
+
(letter.ord & ~0b0100000) - ?A.ord + 1
|
115
|
+
end
|
116
|
+
else
|
117
|
+
# 1.8.x
|
118
|
+
def KEY_CTRL(letter)
|
119
|
+
(letter[0] & ~0b0100000) - ?A + 1
|
120
|
+
end
|
121
|
+
end
|
104
122
|
|
105
|
-
|
123
|
+
# Value of function key n
|
124
|
+
def KEY_F(n)
|
125
|
+
KEY_F0 + n
|
126
|
+
end
|
127
|
+
end
|
128
|
+
include KeyHelper
|
129
|
+
extend KeyHelper
|
106
130
|
|
131
|
+
# For convenience
|
132
|
+
|
133
|
+
# Control keys
|
134
|
+
('A'..'Z').each do |c|
|
135
|
+
const_set "KEY_CTRL_#{c}", KEY_CTRL(c)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Function keys
|
139
|
+
(1..64).each do |c|
|
140
|
+
const_set "KEY_F#{c}", KEY_F(c)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
include KeyDefs
|
107
144
|
end
|
108
145
|
end
|
data/lib/ffi-ncurses/mouse.rb
CHANGED
@@ -1,105 +1,104 @@
|
|
1
|
-
require 'ffi-ncurses'
|
2
1
|
module FFI
|
3
2
|
module NCurses
|
3
|
+
module Mouse
|
4
4
|
|
5
|
-
|
5
|
+
NCURSES_MOUSE_VERSION = 1
|
6
6
|
|
7
|
-
|
7
|
+
# mouse interface
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
if NCURSES_MOUSE_VERSION > 1
|
10
|
+
def self.NCURSES_MOUSE_MASK(b,m)
|
11
|
+
((m) << (((b) - 1) * 5))
|
12
|
+
end
|
13
|
+
else
|
14
|
+
def self.NCURSES_MOUSE_MASK(b,m)
|
15
|
+
((m) << (((b) - 1) * 6))
|
16
|
+
end
|
12
17
|
end
|
13
|
-
else
|
14
|
-
def self.NCURSES_MOUSE_MASK(b,m)
|
15
|
-
((m) << (((b) - 1) * 6))
|
16
|
-
end
|
17
|
-
end
|
18
18
|
|
19
|
-
|
20
|
-
|
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
|
-
|
19
|
+
NCURSES_BUTTON_RELEASED = 001
|
20
|
+
NCURSES_BUTTON_PRESSED = 002
|
21
|
+
NCURSES_BUTTON_CLICKED = 004
|
22
|
+
NCURSES_DOUBLE_CLICKED = 010
|
23
|
+
NCURSES_TRIPLE_CLICKED = 020
|
24
|
+
NCURSES_RESERVED_EVENT = 040
|
25
|
+
|
26
|
+
# event masks
|
27
|
+
BUTTON1_RELEASED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_RELEASED)
|
28
|
+
BUTTON1_PRESSED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_PRESSED)
|
29
|
+
BUTTON1_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_BUTTON_CLICKED)
|
30
|
+
BUTTON1_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_DOUBLE_CLICKED)
|
31
|
+
BUTTON1_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(1, NCURSES_TRIPLE_CLICKED)
|
32
|
+
|
33
|
+
BUTTON2_RELEASED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_RELEASED)
|
34
|
+
BUTTON2_PRESSED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_PRESSED)
|
35
|
+
BUTTON2_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_BUTTON_CLICKED)
|
36
|
+
BUTTON2_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_DOUBLE_CLICKED)
|
37
|
+
BUTTON2_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(2, NCURSES_TRIPLE_CLICKED)
|
38
|
+
|
39
|
+
BUTTON3_RELEASED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_RELEASED)
|
40
|
+
BUTTON3_PRESSED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_PRESSED)
|
41
|
+
BUTTON3_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_BUTTON_CLICKED)
|
42
|
+
BUTTON3_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_DOUBLE_CLICKED)
|
43
|
+
BUTTON3_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(3, NCURSES_TRIPLE_CLICKED)
|
44
|
+
|
45
|
+
BUTTON4_RELEASED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_RELEASED)
|
46
|
+
BUTTON4_PRESSED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_PRESSED)
|
47
|
+
BUTTON4_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_BUTTON_CLICKED)
|
48
|
+
BUTTON4_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_DOUBLE_CLICKED)
|
49
|
+
BUTTON4_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(4, NCURSES_TRIPLE_CLICKED)
|
50
|
+
|
51
|
+
#
|
52
|
+
# In 32 bits the version-1 scheme does not provide enough space for a 5th
|
53
|
+
# button, unless we choose to change the ABI by omitting the reserved-events.
|
54
|
+
#
|
55
|
+
|
56
|
+
if NCURSES_MOUSE_VERSION > 1
|
57
|
+
|
58
|
+
BUTTON5_RELEASED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED)
|
59
|
+
BUTTON5_PRESSED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED)
|
60
|
+
BUTTON5_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED)
|
61
|
+
BUTTON5_DOUBLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED)
|
62
|
+
BUTTON5_TRIPLE_CLICKED = NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED)
|
63
|
+
|
64
|
+
BUTTON_CTRL = NCURSES_MOUSE_MASK(6, 0001)
|
65
|
+
BUTTON_SHIFT = NCURSES_MOUSE_MASK(6, 0002)
|
66
|
+
BUTTON_ALT = NCURSES_MOUSE_MASK(6, 0004)
|
67
|
+
REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(6, 0010)
|
68
|
+
|
69
|
+
else
|
70
|
+
|
71
|
+
BUTTON1_RESERVED_EVENT = NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT)
|
72
|
+
BUTTON2_RESERVED_EVENT = NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT)
|
73
|
+
BUTTON3_RESERVED_EVENT = NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT)
|
74
|
+
BUTTON4_RESERVED_EVENT = NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT)
|
75
|
+
|
76
|
+
BUTTON_CTRL = NCURSES_MOUSE_MASK(5, 0001)
|
77
|
+
BUTTON_SHIFT = NCURSES_MOUSE_MASK(5, 0002)
|
78
|
+
BUTTON_ALT = NCURSES_MOUSE_MASK(5, 0004)
|
79
|
+
REPORT_MOUSE_POSITION = NCURSES_MOUSE_MASK(5, 0010)
|
80
80
|
|
81
|
-
|
81
|
+
end
|
82
82
|
|
83
|
-
|
83
|
+
ALL_MOUSE_EVENTS = (REPORT_MOUSE_POSITION - 1)
|
84
84
|
|
85
|
-
class << self
|
86
85
|
# macros to extract single event-bits from masks
|
87
|
-
def
|
86
|
+
def BUTTON_RELEASE(e, x)
|
88
87
|
((e) & (001 << (6 * ((x) - 1))))
|
89
88
|
end
|
90
|
-
def
|
89
|
+
def BUTTON_PRESS(e, x)
|
91
90
|
((e) & (002 << (6 * ((x) - 1))))
|
92
91
|
end
|
93
|
-
def
|
92
|
+
def BUTTON_CLICK(e, x)
|
94
93
|
((e) & (004 << (6 * ((x) - 1))))
|
95
94
|
end
|
96
|
-
def
|
95
|
+
def BUTTON_DOUBLE_CLICK(e, x)
|
97
96
|
((e) & (010 << (6 * ((x) - 1))))
|
98
97
|
end
|
99
|
-
def
|
98
|
+
def BUTTON_TRIPLE_CLICK(e, x)
|
100
99
|
((e) & (020 << (6 * ((x) - 1))))
|
101
100
|
end
|
102
|
-
def
|
101
|
+
def BUTTON_RESERVED_EVENT(e, x)
|
103
102
|
((e) & (040 << (6 * ((x) - 1))))
|
104
103
|
end
|
105
104
|
|
@@ -112,36 +111,37 @@ module FFI
|
|
112
111
|
# ((m) << (((b) - 1) * 6))
|
113
112
|
# end
|
114
113
|
# end
|
115
|
-
end
|
116
114
|
|
117
|
-
|
118
|
-
|
115
|
+
# def mouse_trafo(y, x, to_screen)
|
116
|
+
# end
|
119
117
|
|
120
|
-
|
121
|
-
|
118
|
+
# already defined in keydefs.rb
|
119
|
+
# KEY_MOUSE = 0631 # Mouse event has occurred
|
122
120
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
121
|
+
#FFI.add_typedef :ulong, :mmask_t
|
122
|
+
class MEVENT < FFI::Struct
|
123
|
+
layout :id, :short,
|
124
|
+
:x, :int,
|
125
|
+
:y, :int,
|
126
|
+
:z, :int,
|
127
|
+
# :bstate, :mmask_t
|
128
|
+
:bstate, :ulong
|
129
|
+
end
|
132
130
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
131
|
+
functions =
|
132
|
+
[
|
133
|
+
[:getmouse, [MEVENT], :int],
|
134
|
+
[:ungetmouse, [MEVENT], :int],
|
135
|
+
]
|
136
|
+
|
137
|
+
functions.each do |function|
|
138
|
+
begin
|
139
|
+
attach_function(*function)
|
140
|
+
rescue Object => e
|
141
|
+
(@unattached_functions ||= []) << function
|
142
|
+
end
|
144
143
|
end
|
145
144
|
end
|
145
|
+
include Mouse
|
146
146
|
end
|
147
147
|
end
|