1Tickit(3pm) User Contributed Perl Documentation Tickit(3pm)
2
3
4
6 "Tickit" - Terminal Interface Construction KIT
7
9 use Tickit;
10 use Tickit::Widget::Box;
11 use Tickit::Widget::Static;
12
13 my $box = Tickit::Widget::Box->new(
14 h_border => 4,
15 v_border => 2,
16 bg => "green",
17 child => Tickit::Widget::Static->new(
18 text => "Hello, world!",
19 bg => "black",
20 align => "centre",
21 valign => "middle",
22 ),
23 );
24
25 Tickit->new( root => $box )->run;
26
28 "Tickit" is a high-level toolkit for creating full-screen terminal-
29 based interactive programs. It allows programs to be written in an
30 abstracted way, working with a tree of widget objects, to represent the
31 layout of the interface and implement its behaviours.
32
33 Its supported terminal features includes a rich set of rendering
34 attributes (bold, underline, italic, 256-colours, etc), support for
35 mouse including wheel and position events above the 224th column and
36 arbitrary modified key input via libtermkey (all of these will require
37 a supporting terminal as well). It also supports having multiple
38 instances and non-blocking or asynchronous control.
39
41 new
42 $tickit = Tickit->new( %args )
43
44 Constructs a new "Tickit" framework container object.
45
46 Takes the following named arguments at construction time:
47
48 term_in => IO
49 IO handle for terminal input. Will default to "STDIN".
50
51 term_out => IO
52 IO handle for terminal output. Will default to "STDOUT".
53
54 UTF8 => BOOL
55 If defined, overrides locale detection to enable or disable
56 UTF-8 mode. If not defined then this will be detected from the
57 locale by using Perl's "${^UTF8LOCALE}" variable.
58
59 root => Tickit::Widget
60 If defined, sets the root widget using "set_root_widget" to the
61 one specified.
62
63 use_altscreen => BOOL
64 If defined but false, disables the use of altscreen, even if
65 supported by the terminal. This will mean that the screen
66 contents are stll available after the program has finished.
67
69 watch_io
70 $id = $tickit->watch_io( $fh, $cond, $code )
71
72 Since version 0.71.
73
74 Runs the given CODE reference at some point in the future, when IO
75 operations are possible on the given filehandle. $cond should be a
76 bitmask of at least one of the "IO_IN", "IO_OUT" or "IO_HUP" constants
77 describing which kinds of IO operation the callback is interested in.
78
79 Returns an opaque integer value that may be passed to "watch_cancel".
80 This value is safe to ignore if not required.
81
82 When invoked, the callback will receive an event parameter which will
83 be an instances of a type with a field called "cond". This will contain
84 the kinds of IO operation that are currently possible.
85
86 $code->( $info )
87
88 $current_cond = $info->cond;
89
90 For example, to watch for both input and hangup conditions and respond
91 to each individually:
92
93 $tickit->watch_io( $fh, Tickit::IO_IN|Tickit::IO_HUP,
94 sub {
95 my ( $info ) = @_;
96 if( $info->cond & Tickit::IO_IN ) {
97 ...
98 }
99 if( $info->cond & Tickit::IO_HUP ) {
100 ...
101 }
102 }
103 );
104
105 watch_later
106 $id = $tickit->watch_later( $code )
107
108 Since version 0.70.
109
110 Runs the given CODE reference at some time soon in the future. It will
111 not be invoked yet, but will be invoked at some point before the next
112 round of input events are processed.
113
114 Returns an opaque integer value that may be passed to "watch_cancel".
115 This value is safe to ignore if not required.
116
117 later
118 $tickit->later( $code )
119
120 For back-compatibility this method is a synonym for "watch_later".
121
122 watch_timer_at
123 $id = $tickit->watch_timer_at( $epoch, $code )
124
125 Since version 0.70.
126
127 Runs the given CODE reference at the given absolute time expressed as
128 an epoch number. Fractions are supported to a resolution of
129 microseconds.
130
131 Returns an opaque integer value that may be passed to "watch_cancel".
132 This value is safe to ignore if not required.
133
134 watch_timer_after
135 $id = $tickit->watch_timer_after( $delay, $code )
136
137 Since version 0.70.
138
139 Runs the given CODE reference at the given relative time expressed as a
140 number of seconds hence. Fractions are supported to a resolution of
141 microseconds.
142
143 Returns an opaque integer value that may be passed to "watch_cancel".
144 This value is safe to ignore if not required.
145
146 timer
147 $id = $tickit->timer( at => $epoch, $code )
148
149 $id = $tickit->timer( after => $delay, $code )
150
151 For back-compatibility this method is a wrapper for either
152 "watch_timer_at" or "watch_timer_after" depending on the first
153 argument.
154
155 Returns an opaque integer value that may be passed to "cancel_timer".
156 This value is safe to ignore if not required.
157
158 watch_signal
159 $id = $tickit->watch_signal( $signum, $code )
160
161 Since version 0.72.
162
163 Runs the given CODE reference whenever the given POSIX signal is
164 received. Signals are given by number, not name.
165
166 Returns an opaque integer value that may be passed to "watch_cancel".
167 This value is safe to ignore if not required.
168
169 watch_process
170 $id = $tickit->watch_process( $pid, $code )
171
172 Since version 0.72.
173
174 Runs the given CODE reference when the given child process terminates.
175
176 Returns an opaque integer value that may be passed to "watch_cancel".
177 This value is safe to ignore if not required.
178
179 When invoked, the callback will receive an event parameter which will
180 be an instance of a type with a field called "wstatus". This will
181 contain the exit status of the terminated child process.
182
183 $code->( $info )
184
185 $pid = $info->pid;
186 $status = $info->wstatus;
187
188 watch_cancel
189 $tickit->watch_cancel( $id )
190
191 Since version 0.70.
192
193 Removes an idle or timer watch previously installed by one of the other
194 "watch_*" methods. After doing so the code will no longer be invoked.
195
196 cancel_timer
197 $tickit->cancel_timer( $id )
198
199 For back-compatibility this method is a synonym for "watch_cancel".
200
201 term
202 $term = $tickit->term
203
204 Returns the underlying Tickit::Term object.
205
206 cols
207 lines
208 $cols = $tickit->cols
209
210 $lines = $tickit->lines
211
212 Query the current size of the terminal. Will be cached and updated on
213 receipt of "SIGWINCH" signals.
214
215 bind_key
216 $tickit->bind_key( $key, $code )
217
218 Installs a callback to invoke if the given key is pressed, overwriting
219 any previous callback for the same key. The code block is invoked as
220
221 $code->( $tickit, $key )
222
223 If $code is missing or "undef", any existing callback is removed.
224
225 As a convenience for the common application use case, the "Ctrl-C" key
226 is bound to the "stop" method.
227
228 To remove this binding, simply bind another callback, or remove the
229 binding entirely by setting "undef".
230
231 rootwin
232 $tickit->rootwin
233
234 Returns the root Tickit::Window.
235
236 set_root_widget
237 $tickit->set_root_widget( $widget )
238
239 Sets the root widget for the application's display. This must be a
240 subclass of Tickit::Widget.
241
242 tick
243 $tickit->tick( $flags )
244
245 Run a single round of IO events. Does not call "setup_term" or
246 "teardown_term".
247
248 $flags may optionally be a bitmask of the following exported constants:
249
250 RUN_NOHANG
251 Does not block waiting for IO; simply process whatever is available
252 then return immediately.
253
254 RUN_NOSETUP
255 Do not perform initial terminal setup before waiting on IO events.
256
257 run
258 $tickit->run
259
260 Calls the "setup_term" method, then processes IO events until stopped,
261 by the "stop" method, "SIGINT", "SIGTERM" or the "Ctrl-C" key. Then
262 runs the "teardown_term" method, and returns.
263
264 stop
265 $tickit->stop
266
267 Causes a currently-running "run" method to stop processing events and
268 return.
269
271 version_major
272 version_minor
273 version_patch
274 $major = Tickit::version_major()
275 $minor = Tickit::version_minor()
276 $patch = Tickit::version_patch()
277
278 These non-exported functions query the version of the libtickit library
279 that the module is linked to.
280
282 Paul Evans <leonerd@leonerd.org.uk>
283
284
285
286perl v5.38.0 2023-07-21 Tickit(3pm)