ffi-ncurses 0.3.3 → 0.4.0
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/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
File without changes
|
data/examples/color.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
require 'ffi-ncurses/ord_shim' # for 1.8.6 compatibility
|
7
|
+
include FFI::NCurses
|
8
|
+
|
9
|
+
initscr
|
10
|
+
begin
|
11
|
+
# turn cursor off
|
12
|
+
curs_set 0
|
13
|
+
|
14
|
+
# initialize colour
|
15
|
+
start_color
|
16
|
+
|
17
|
+
# set up colour pairs
|
18
|
+
# Background Foreground
|
19
|
+
init_pair(0, Color::BLACK, Color::BLACK)
|
20
|
+
init_pair(1, Color::RED, Color::BLACK)
|
21
|
+
init_pair(2, Color::GREEN, Color::BLACK)
|
22
|
+
init_pair(3, Color::YELLOW, Color::BLACK)
|
23
|
+
init_pair(4, Color::BLUE, Color::BLACK)
|
24
|
+
init_pair(5, Color::MAGENTA, Color::BLACK)
|
25
|
+
init_pair(6, Color::CYAN, Color::BLACK)
|
26
|
+
init_pair(7, Color::WHITE, Color::BLACK)
|
27
|
+
|
28
|
+
init_pair(8, Color::BLACK, Color::BLACK)
|
29
|
+
init_pair(9, Color::BLACK, Color::RED)
|
30
|
+
init_pair(10, Color::BLACK, Color::GREEN)
|
31
|
+
init_pair(11, Color::BLACK, Color::YELLOW)
|
32
|
+
init_pair(12, Color::BLACK, Color::BLUE)
|
33
|
+
init_pair(13, Color::BLACK, Color::MAGENTA)
|
34
|
+
init_pair(14, Color::BLACK, Color::CYAN)
|
35
|
+
init_pair(15, Color::BLACK, Color::WHITE)
|
36
|
+
|
37
|
+
0.upto(15) do |i|
|
38
|
+
attr_set A_NORMAL, i, nil
|
39
|
+
addch("A"[0].ord + i)
|
40
|
+
end
|
41
|
+
|
42
|
+
# add character and attribute together
|
43
|
+
addch("Z"[0].ord | COLOR_PAIR(1)) # red
|
44
|
+
|
45
|
+
# reset attribute and colour to default
|
46
|
+
attr_set A_NORMAL, 0, nil
|
47
|
+
|
48
|
+
# start new line
|
49
|
+
addstr "\n"
|
50
|
+
|
51
|
+
# how to add a single space
|
52
|
+
addch(' '[0].ord)
|
53
|
+
# or
|
54
|
+
addstr(" ")
|
55
|
+
|
56
|
+
addstr "Press any key"
|
57
|
+
|
58
|
+
# display and pause for key press
|
59
|
+
refresh
|
60
|
+
ch = getch
|
61
|
+
ensure
|
62
|
+
endwin
|
63
|
+
end
|
data/examples/cursor.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
include FFI::NCurses
|
7
|
+
|
8
|
+
def try_cursor(n)
|
9
|
+
addstr "\ncurs_set #{n} "
|
10
|
+
curs_set n
|
11
|
+
getch
|
12
|
+
end
|
13
|
+
|
14
|
+
begin
|
15
|
+
initscr
|
16
|
+
noecho
|
17
|
+
addstr "Press any key to cycle through the cursor types:\n"
|
18
|
+
addstr "Default "
|
19
|
+
getch
|
20
|
+
try_cursor 0
|
21
|
+
# Note that there probably won't be any difference between cursors 1
|
22
|
+
# and 2 on an X terminal. Try in the Linux console to see a difference.
|
23
|
+
try_cursor 1
|
24
|
+
try_cursor 2
|
25
|
+
ensure
|
26
|
+
FFI::NCurses.endwin
|
27
|
+
end
|
data/examples/example.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Sean O'Halpin, 2009-01-18
|
6
6
|
#
|
7
7
|
require 'ffi-ncurses'
|
8
|
-
require 'ffi-ncurses/
|
8
|
+
require 'ffi-ncurses/ord_shim' # for 1.8.6 compatibility
|
9
9
|
|
10
10
|
begin
|
11
11
|
# the methods can be called as module methods
|
@@ -34,23 +34,23 @@ begin
|
|
34
34
|
#addstr(sprintf("paryx %d %d\n", *getparyx(FFI::NCurses.stdscr)))
|
35
35
|
standend
|
36
36
|
|
37
|
-
init_pair(1, FFI::NCurses::
|
38
|
-
init_pair(2, FFI::NCurses::
|
39
|
-
init_pair(3, FFI::NCurses::
|
40
|
-
init_pair(4, FFI::NCurses::
|
41
|
-
init_pair(5, FFI::NCurses::
|
42
|
-
init_pair(6, FFI::NCurses::
|
43
|
-
init_pair(7, FFI::NCurses::
|
44
|
-
init_pair(8, FFI::NCurses::
|
37
|
+
init_pair(1, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::BLACK)
|
38
|
+
init_pair(2, FFI::NCurses::Color::RED, FFI::NCurses::Color::BLACK)
|
39
|
+
init_pair(3, FFI::NCurses::Color::GREEN, FFI::NCurses::Color::BLACK)
|
40
|
+
init_pair(4, FFI::NCurses::Color::YELLOW, FFI::NCurses::Color::BLACK)
|
41
|
+
init_pair(5, FFI::NCurses::Color::BLUE, FFI::NCurses::Color::BLACK)
|
42
|
+
init_pair(6, FFI::NCurses::Color::MAGENTA, FFI::NCurses::Color::BLACK)
|
43
|
+
init_pair(7, FFI::NCurses::Color::CYAN, FFI::NCurses::Color::BLACK)
|
44
|
+
init_pair(8, FFI::NCurses::Color::WHITE, FFI::NCurses::Color::BLACK)
|
45
45
|
|
46
|
-
init_pair(9, FFI::NCurses::
|
47
|
-
init_pair(10, FFI::NCurses::
|
48
|
-
init_pair(11, FFI::NCurses::
|
49
|
-
init_pair(12, FFI::NCurses::
|
50
|
-
init_pair(13, FFI::NCurses::
|
51
|
-
init_pair(14, FFI::NCurses::
|
52
|
-
init_pair(15, FFI::NCurses::
|
53
|
-
init_pair(16, FFI::NCurses::
|
46
|
+
init_pair(9, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::BLACK)
|
47
|
+
init_pair(10, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::RED)
|
48
|
+
init_pair(11, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::GREEN)
|
49
|
+
init_pair(12, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::YELLOW)
|
50
|
+
init_pair(13, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::BLUE)
|
51
|
+
init_pair(14, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::MAGENTA)
|
52
|
+
init_pair(15, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::CYAN)
|
53
|
+
init_pair(16, FFI::NCurses::Color::BLACK, FFI::NCurses::Color::WHITE)
|
54
54
|
|
55
55
|
1.upto(16) do |i|
|
56
56
|
attr_set FFI::NCurses::A_NORMAL, i, nil
|
data/examples/getkey.rb
ADDED
@@ -0,0 +1,212 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# Note: terminal set to:
|
5
|
+
# LANG=en_GB.utf8
|
6
|
+
#
|
7
|
+
# Sean O'Halpin, 2010-08-29
|
8
|
+
|
9
|
+
require 'ffi-ncurses'
|
10
|
+
|
11
|
+
include FFI::NCurses
|
12
|
+
|
13
|
+
$APP_DEBUG = ARGV.delete("--debug")
|
14
|
+
|
15
|
+
def log(*a)
|
16
|
+
if $APP_DEBUG
|
17
|
+
File.open("log.txt", "ab") do |file|
|
18
|
+
file.puts a.inspect
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def line(row, txt = nil)
|
24
|
+
move row, 2
|
25
|
+
if txt
|
26
|
+
addstr(txt)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def column(col, txt = nil)
|
31
|
+
y, x = getyx(stdscr)
|
32
|
+
move y, col
|
33
|
+
if txt
|
34
|
+
addstr(txt)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
$APP_USE_WIDECHARS = ARGV.delete("--no-widechars") ? false : true
|
39
|
+
def use_widechars?
|
40
|
+
$APP_USE_WIDECHARS
|
41
|
+
end
|
42
|
+
|
43
|
+
@last_keys = []
|
44
|
+
|
45
|
+
def getkey(win, input_buffer)
|
46
|
+
if use_widechars?
|
47
|
+
log :wget_wch
|
48
|
+
# Note: 1.8.x stalls in this function without setlocale(LC_ALL, "")
|
49
|
+
rv = FFI::NCurses.wget_wch(win, input_buffer)
|
50
|
+
log :rv, rv
|
51
|
+
ch = input_buffer.read_int # assumes wint_t is an int (which in all cases I've seen it is...)
|
52
|
+
log :ch, ch
|
53
|
+
|
54
|
+
# flag if a function key code
|
55
|
+
if rv == KEY_CODE_YES
|
56
|
+
fkey = true
|
57
|
+
else
|
58
|
+
fkey = false
|
59
|
+
end
|
60
|
+
else
|
61
|
+
# use 8-bit input - won't handle Unicode properly
|
62
|
+
log :wgetch
|
63
|
+
ch = FFI::NCurses.wgetch(win)
|
64
|
+
if (KEY_CODE_YES..KEY_MAX).include?(ch)
|
65
|
+
fkey = true
|
66
|
+
else
|
67
|
+
fkey = false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
# convert char code to UTF-8 string
|
71
|
+
char = [ch].pack("U")
|
72
|
+
log :getkey, :fkey, fkey, :ch, ch, :char, char
|
73
|
+
@last_keys.unshift(ch)
|
74
|
+
while @last_keys.size > 10
|
75
|
+
@last_keys.pop
|
76
|
+
end
|
77
|
+
[fkey, ch, char]
|
78
|
+
end
|
79
|
+
|
80
|
+
def header
|
81
|
+
clear
|
82
|
+
line 1, "Press any key to display codes in various interpretations"
|
83
|
+
line 2, "Press Ctrl-Q to quit."
|
84
|
+
line 3, "widechar input %s. Press w to toggle" % [use_widechars? ? "on" : "off"]
|
85
|
+
line 4, "keypad %s. Press k to toggle" % [@keypad_toggle ? "on" : "off"]
|
86
|
+
line 5, "meta %s. Press m to toggle (only makes a difference in non-widechar mode)" % [@meta_toggle ? "on" : "off"]
|
87
|
+
line 6, "meta works only on terminal emulators that allow 8-bit input - use xterm to see effect"
|
88
|
+
end
|
89
|
+
|
90
|
+
begin
|
91
|
+
# initialize screen and input params
|
92
|
+
win = initscr
|
93
|
+
curs_set 0
|
94
|
+
raw
|
95
|
+
set_escdelay(1000) if respond_to?(:set_escdelay)
|
96
|
+
# turn on meta - ncurses default = true - but here to remind me that you can
|
97
|
+
# detect Alt keys using keyname (e.g. Alt-q == "M-q")
|
98
|
+
@meta_toggle = ARGV.delete("--no-meta") ? false : true
|
99
|
+
@keypad_toggle = ARGV.delete("--no-keypad") ? false : true
|
100
|
+
meta(stdscr, @meta_toggle)
|
101
|
+
keypad stdscr, @keypad_toggle
|
102
|
+
noecho
|
103
|
+
|
104
|
+
# initialize colour
|
105
|
+
start_color
|
106
|
+
|
107
|
+
# Define a couple of custom keys. The easiest way to find out the sequences is to type
|
108
|
+
#
|
109
|
+
# $ cat -v
|
110
|
+
#
|
111
|
+
# at the command line then press the key combination you want.
|
112
|
+
#
|
113
|
+
# Note that these key definitions may not be portable.
|
114
|
+
define_key("\e[1;5C", KEY_MAX - 1) # C-Right
|
115
|
+
define_key("\e[1;5D", KEY_MAX - 2) # C-Left
|
116
|
+
define_key("\e[1;5A", KEY_MAX - 3) # C-Up
|
117
|
+
define_key("\e[1;5B", KEY_MAX - 3) # C-Down
|
118
|
+
|
119
|
+
|
120
|
+
# set up colour pairs
|
121
|
+
# Background Foreground
|
122
|
+
init_pair(0, Color::BLACK, Color::BLACK)
|
123
|
+
init_pair(1, Color::RED, Color::BLACK)
|
124
|
+
init_pair(2, Color::GREEN, Color::BLACK)
|
125
|
+
init_pair(3, Color::YELLOW, Color::BLACK)
|
126
|
+
init_pair(4, Color::BLUE, Color::BLACK)
|
127
|
+
init_pair(5, Color::MAGENTA, Color::BLACK)
|
128
|
+
init_pair(6, Color::CYAN, Color::BLACK)
|
129
|
+
init_pair(7, Color::WHITE, Color::BLACK)
|
130
|
+
|
131
|
+
init_pair(8, Color::BLACK, Color::BLACK)
|
132
|
+
init_pair(9, Color::BLACK, Color::RED)
|
133
|
+
init_pair(10, Color::BLACK, Color::GREEN)
|
134
|
+
init_pair(11, Color::BLACK, Color::YELLOW)
|
135
|
+
init_pair(12, Color::BLACK, Color::BLUE)
|
136
|
+
init_pair(13, Color::BLACK, Color::MAGENTA)
|
137
|
+
init_pair(14, Color::BLACK, Color::CYAN)
|
138
|
+
init_pair(15, Color::BLACK, Color::WHITE)
|
139
|
+
|
140
|
+
# set up input buffer
|
141
|
+
buffer = FFI::Buffer.new(FFI::NCurses.find_type(:wint_t))
|
142
|
+
log :buffer_size, buffer.size, FFI.find_type(:int).size
|
143
|
+
|
144
|
+
# set up output wide char struct
|
145
|
+
cchar = WinStruct::CCharT.new
|
146
|
+
cchar[:attr] = 0
|
147
|
+
|
148
|
+
char_col = 55
|
149
|
+
|
150
|
+
header
|
151
|
+
row = 8
|
152
|
+
loop do
|
153
|
+
# read a key
|
154
|
+
fkey, ch, char = getkey(win, buffer)
|
155
|
+
break if ch == KEY_CTRL_Q
|
156
|
+
|
157
|
+
case char
|
158
|
+
when "k"
|
159
|
+
@keypad_toggle = !@keypad_toggle
|
160
|
+
keypad stdscr, @keypad_toggle # NB. win arg ignored
|
161
|
+
when "m"
|
162
|
+
@meta_toggle = !@meta_toggle
|
163
|
+
meta stdscr, @meta_toggle # NB. win arg ignored
|
164
|
+
when "w"
|
165
|
+
$APP_USE_WIDECHARS = !$APP_USE_WIDECHARS
|
166
|
+
end
|
167
|
+
|
168
|
+
header
|
169
|
+
mvwaddstr(win, 20, 2, @last_keys.inspect)
|
170
|
+
|
171
|
+
attr_on(A_BOLD, nil) if fkey
|
172
|
+
line row + 1, "#{fkey ? "Function" : "Normal"} key"
|
173
|
+
attr_off(A_BOLD, nil) if fkey
|
174
|
+
|
175
|
+
line row + 2, "keycode:"
|
176
|
+
column char_col, "#{"0x%04x" % ch} (#{ch}) "
|
177
|
+
|
178
|
+
line row + 3, "keyname: "
|
179
|
+
column char_col, "[#{keyname(ch)}]"
|
180
|
+
|
181
|
+
line row + 4, "key_name: "
|
182
|
+
column char_col, "[#{key_name(ch)}]"
|
183
|
+
|
184
|
+
line row + 5, "output as raw keycode using waddch (non-widechar):"
|
185
|
+
column char_col, "["
|
186
|
+
waddch win, char[0].ord
|
187
|
+
addstr "]"
|
188
|
+
|
189
|
+
line row + 6, "output as UTF-8 string using waddstr (non-widechar):"
|
190
|
+
column char_col, "["
|
191
|
+
attr_on(COLOR_PAIR(5) | A_BOLD, nil)
|
192
|
+
waddstr win, char
|
193
|
+
attr_off(COLOR_PAIR(5) | A_BOLD, nil)
|
194
|
+
addstr "]"
|
195
|
+
|
196
|
+
line row + 7, "output Unicode character using wadd_wch (widechar):"
|
197
|
+
cchar[:attr] = COLOR_PAIR(6) | A_BOLD
|
198
|
+
cchar[:chars][0] = ch # ch == Unicode codepoint
|
199
|
+
column char_col, "["
|
200
|
+
wadd_wch win, cchar
|
201
|
+
addstr "]"
|
202
|
+
|
203
|
+
refresh
|
204
|
+
end
|
205
|
+
rescue => saved_exception
|
206
|
+
ensure
|
207
|
+
flushinp
|
208
|
+
endwin
|
209
|
+
end
|
210
|
+
if saved_exception
|
211
|
+
raise saved_exception
|
212
|
+
end
|
@@ -30,7 +30,7 @@ begin
|
|
30
30
|
refresh
|
31
31
|
getch
|
32
32
|
|
33
|
-
leaveok(win,
|
33
|
+
leaveok(win, true)
|
34
34
|
wrefresh(win)
|
35
35
|
winy, winx = getyx(win)
|
36
36
|
vy, vx = getsyx
|
@@ -46,7 +46,7 @@ begin
|
|
46
46
|
printw("virtual: %d, %d\n", :int, vy, :int, vx)
|
47
47
|
refresh
|
48
48
|
getch
|
49
|
-
|
49
|
+
|
50
50
|
rescue Object => e
|
51
51
|
FFI::NCurses.endwin
|
52
52
|
raise
|
data/examples/globals.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2010-08-28
|
4
|
+
#
|
5
|
+
# Demo that global variables are not initialized until after
|
6
|
+
# `initscr`.
|
7
|
+
#
|
8
|
+
require 'ffi-ncurses'
|
9
|
+
include FFI::NCurses
|
10
|
+
begin
|
11
|
+
# symbols = [:acs_map, :curscr, :newscr, :stdscr, :ttytype, :COLORS, :COLOR_PAIRS, :COLS, :ESCDELAY, :LINES, :TABSIZE]
|
12
|
+
symbols = [
|
13
|
+
"acs_map",
|
14
|
+
"curscr",
|
15
|
+
"newscr",
|
16
|
+
"stdscr",
|
17
|
+
"ttytype",
|
18
|
+
"COLORS",
|
19
|
+
"COLOR_PAIRS",
|
20
|
+
"COLS",
|
21
|
+
"ESCDELAY",
|
22
|
+
"LINES",
|
23
|
+
"TABSIZE"
|
24
|
+
]
|
25
|
+
|
26
|
+
# symbols = [:curscr, :newscr, :stdscr]
|
27
|
+
symbols.each do |sym|
|
28
|
+
p [sym, FFI::NCurses.send(sym)]
|
29
|
+
end
|
30
|
+
initscr
|
31
|
+
symbols.each do |sym|
|
32
|
+
addstr [sym, FFI::NCurses.send(sym)].inspect + "\n"
|
33
|
+
end
|
34
|
+
refresh
|
35
|
+
getch
|
36
|
+
ensure
|
37
|
+
endwin
|
38
|
+
end
|
data/examples/hello.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- mode: ruby; coding: utf-8 -*-
|
3
|
+
#
|
4
|
+
# Sean O'Halpin, 2009-02-15
|
5
|
+
#
|
6
|
+
require 'ffi-ncurses'
|
7
|
+
|
8
|
+
def centre(text)
|
9
|
+
col = (COLS() - text.strip.size)/2
|
10
|
+
y, x = getyx(stdscr)
|
11
|
+
mvaddstr y, col, text
|
12
|
+
end
|
13
|
+
|
14
|
+
include FFI::NCurses
|
15
|
+
begin
|
16
|
+
greeting = ARGV.shift || "World"
|
17
|
+
stdscr = initscr
|
18
|
+
raw
|
19
|
+
keypad stdscr, true
|
20
|
+
noecho
|
21
|
+
curs_set 0
|
22
|
+
clear
|
23
|
+
move (LINES() - 3)/3, 0
|
24
|
+
centre "Hello " + greeting + "\n\n"
|
25
|
+
centre "Press any key to continue\n"
|
26
|
+
refresh
|
27
|
+
ch = getch
|
28
|
+
flushinp
|
29
|
+
addstr sprintf("\nYou pressed %c (%d)", ch, ch)
|
30
|
+
refresh
|
31
|
+
sleep 1
|
32
|
+
ensure
|
33
|
+
endwin
|
34
|
+
end
|