ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.115
Committed: Fri Jan 20 15:57:21 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.114: +10 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.17 =encoding utf8
2    
3 root 1.1 =head1 NAME
4    
5 root 1.11 @@RXVT_NAME@@perl - rxvt-unicode's embedded perl interpreter
6 root 1.1
7     =head1 SYNOPSIS
8    
9 root 1.10 # create a file grab_test in $HOME:
10 root 1.1
11     sub on_sel_grab {
12     warn "you selected ", $_[0]->selection;
13 root 1.3 ()
14 root 1.1 }
15    
16 root 1.10 # start a @@RXVT_NAME@@ using it:
17    
18     @@RXVT_NAME@@ --perl-lib $HOME -pe grab_test
19 root 1.1
20     =head1 DESCRIPTION
21    
22 root 1.44 Everytime a terminal object gets created, extension scripts specified via
23     the C<perl> resource are loaded and associated with it.
24 root 1.10
25     Scripts are compiled in a 'use strict' and 'use utf8' environment, and
26     thus must be encoded as UTF-8.
27 root 1.6
28     Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where
29 root 1.16 scripts will be shared (but not enabled) for all terminals.
30 root 1.6
31 root 1.75 =head1 PREPACKAGED EXTENSIONS
32 root 1.15
33 root 1.75 This section describes the extensions delivered with this release. You can
34 root 1.15 find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>.
35    
36     You can activate them like this:
37    
38     @@RXVT_NAME@@ -pe <extensionname>
39    
40 root 1.111 Or by adding them to the resource for extensions loaded by default:
41    
42     URxvt.perl-ext-common: default,automove-background,selection-autotransform
43    
44 root 1.15 =over 4
45    
46 root 1.54 =item selection (enabled by default)
47 root 1.15
48 root 1.75 (More) intelligent selection. This extension tries to be more intelligent
49 root 1.87 when the user extends selections (double-click and further clicks). Right
50     now, it tries to select words, urls and complete shell-quoted
51     arguments, which is very convenient, too, if your F<ls> supports
52     C<--quoting-style=shell>.
53    
54     A double-click usually selects the word under the cursor, further clicks
55     will enlarge the selection.
56 root 1.22
57 root 1.88 The selection works by trying to match a number of regexes and displaying
58     them in increasing order of length. You can add your own regexes by
59     specifying resources of the form:
60    
61     URxvt.selection.pattern-0: perl-regex
62     URxvt.selection.pattern-1: perl-regex
63     ...
64    
65     The index number (0, 1...) must not have any holes, and each regex must
66     contain at least one pair of capturing parentheses, which will be used for
67     the match. For example, the followign adds a regex that matches everything
68     between two vertical bars:
69    
70     URxvt.selection.pattern-0: \\|([^|]+)\\|
71    
72     You can look at the source of the selection extension to see more
73     interesting uses, such as parsing a line from beginning to end.
74    
75 elmex 1.95 This extension also offers following bindable keyboard commands:
76 root 1.15
77     =over 4
78    
79     =item rot13
80    
81     Rot-13 the selection when activated. Used via keyboard trigger:
82    
83     URxvt.keysym.C-M-r: perl:selection:rot13
84    
85     =back
86    
87 root 1.54 =item option-popup (enabled by default)
88    
89 root 1.59 Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
90 root 1.54 runtime.
91    
92 root 1.59 =item selection-popup (enabled by default)
93    
94     Binds a popup menu to Ctrl-Button3 that lets you convert the selection
95 root 1.75 text into various other formats/action (such as uri unescaping, perl
96     evalution, web-browser starting etc.), depending on content.
97 root 1.59
98 root 1.110 Other extensions can extend this popup menu by pushing a code reference
99     onto C<@{ $term->{selection_popup_hook} }>, that is called whenever the
100     popup is displayed.
101 root 1.101
102     It's sole argument is the popup menu, which can be modified. The selection
103     is in C<$_>, which can be used to decide wether to add something or not.
104     It should either return nothing or a string and a code reference. The
105     string will be used as button text and the code reference will be called
106     when the button gets activated and should transform C<$_>.
107    
108     The following will add an entry C<a to b> that transforms all C<a>s in
109     the selection to C<b>s, but only if the selection currently contains any
110     C<a>s:
111    
112 root 1.110 push @{ $self->{term}{selection_popup_hook} }, sub {
113 root 1.101 /a/ ? ("a to be" => sub { s/a/b/g }
114     : ()
115     };
116    
117 root 1.74 =item searchable-scrollback<hotkey> (enabled by default)
118 root 1.69
119 root 1.74 Adds regex search functionality to the scrollback buffer, triggered
120 root 1.87 by a hotkey (default: C<M-s>). While in search mode, normal terminal
121     input/output is suspended and a regex is displayed at the bottom of the
122     screen.
123    
124     Inputting characters appends them to the regex and continues incremental
125     search. C<BackSpace> removes a character from the regex, C<Up> and C<Down>
126     search upwards/downwards in the scrollback buffer, C<End> jumps to the
127     bottom. C<Escape> leaves search mode and returns to the point where search
128     was started, while C<Enter> or C<Return> stay at the current position and
129     additionally stores the first match in the current line into the primary
130     selection.
131 root 1.69
132 root 1.88 =item selection-autotransform
133    
134     This selection allows you to do automatic transforms on a selection
135     whenever a selection is made.
136    
137     It works by specifying perl snippets (most useful is a single C<s///>
138     operator) that modify C<$_> as resources:
139    
140     URxvt.selection-autotransform.0: transform
141     URxvt.selection-autotransform.1: transform
142     ...
143    
144     For example, the following will transform selections of the form
145 root 1.89 C<filename:number>, often seen in compiler messages, into C<vi +$filename
146     $word>:
147 root 1.88
148 root 1.93 URxvt.selection-autotransform.0: s/^([^:[:space:]]+):(\\d+):?$/vi +$2 \\Q$1\\E\\x0d/
149 root 1.88
150     And this example matches the same,but replaces it with vi-commands you can
151 root 1.89 paste directly into your (vi :) editor:
152 root 1.15
153 root 1.108 URxvt.selection-autotransform.0: s/^([^:[:space:]]+(\\d+):?$/:e \\Q$1\\E\\x0d:$2\\x0d/
154 root 1.20
155 root 1.90 Of course, this can be modified to suit your needs and your editor :)
156    
157 root 1.91 To expand the example above to typical perl error messages ("XXX at
158     FILENAME line YYY."), you need a slightly more elaborate solution:
159    
160 root 1.108 URxvt.selection.pattern-0: ( at .*? line \\d+[,.])
161     URxvt.selection-autotransform.0: s/^ at (.*?) line (\\d+)[,.]$/:e \\Q$1\E\\x0d:$2\\x0d/
162 root 1.91
163     The first line tells the selection code to treat the unchanging part of
164     every error message as a selection pattern, and the second line transforms
165     the message into vi commands to load the file.
166    
167 root 1.115 =item tabbed
168    
169     This transforms the terminal into a tabbar with additional terminals, that
170     is, it implements what is commonly refered to as "tabbed terminal". The topmost line
171     displays a "[NEW]" button, which, when clicked, will add a new tab, followed by one
172     button per tab.
173    
174     Clicking a button will activate that tab. Pressing Shift-Left and
175     Shift-Right will switch to the tab left or right of the current one.
176    
177 root 1.35 =item mark-urls
178    
179 root 1.79 Uses per-line display filtering (C<on_line_update>) to underline urls and
180 root 1.83 make them clickable. When middle-clicked, the program specified in the
181 root 1.87 resource C<urlLauncher> (default C<x-www-browser>) will be started with
182     the URL as first argument.
183 root 1.42
184 root 1.104 =item automove-background
185    
186     This is basically a one-line extension that dynamically changes the background pixmap offset
187     to the window position, in effect creating the same effect as pseudo transparency with
188     a custom pixmap. No scaling is supported in this mode. Exmaple:
189    
190     @@RXVT_NAME@@ -pixmap background.xpm -pe automove-background
191    
192 root 1.42 =item block-graphics-to-ascii
193    
194     A not very useful example of filtering all text output to the terminal,
195     by replacing all line-drawing characters (U+2500 .. U+259F) by a
196     similar-looking ascii character.
197 root 1.35
198 root 1.88 =item digital-clock
199    
200     Displays a digital clock using the built-in overlay.
201    
202 root 1.20 =item example-refresh-hooks
203    
204 root 1.15 Displays a very simple digital clock in the upper right corner of the
205     window. Illustrates overwriting the refresh callbacks to create your own
206     overlays or changes.
207    
208 elmex 1.97 =item selection-pastebin
209    
210 root 1.98 This is a little rarely useful extension that Uploads the selection as
211 root 1.99 textfile to a remote site (or does other things). (The implementation is
212     not currently secure for use in a multiuser environment as it writes to
213     F</tmp> directly.).
214 root 1.98
215     It listens to the C<selection-pastebin:remote-pastebin> keyboard command,
216     i.e.
217 elmex 1.97
218     URxvt.keysym.C-M-e: perl:selection-pastebin:remote-pastebin
219    
220 root 1.98 Pressing this combination runs a command with C<%> replaced by the name of
221     the textfile. This command can be set via a resource:
222    
223     URxvt.selection-pastebin.cmd: rsync -apP % ruth:/var/www/www.ta-sa.org/files/txt/.
224    
225     And the default is likely not useful to anybody but the few people around
226     here :)
227 elmex 1.97
228 root 1.98 The name of the textfile is the hex encoded md5 sum of the selection, so
229     the same content should lead to the same filename.
230 elmex 1.97
231 root 1.98 After a successful upload the selection will be replaced by the text given
232     in the C<selection-pastebin-url> resource (again, the % is the placeholder
233     for the filename):
234 elmex 1.97
235 root 1.98 URxvt.selection-pastebin.url: http://www.ta-sa.org/files/txt/%
236 elmex 1.97
237 root 1.15 =back
238    
239 root 1.75 =head1 API DOCUMENTATION
240    
241 root 1.6 =head2 General API Considerations
242    
243     All objects (such as terminals, time watchers etc.) are typical
244     reference-to-hash objects. The hash can be used to store anything you
245 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
246 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
247 root 1.7 modified).
248 root 1.6
249     When objects are destroyed on the C++ side, the perl object hashes are
250     emptied, so its best to store related objects such as time watchers and
251     the like inside the terminal object so they get destroyed as soon as the
252     terminal is destroyed.
253    
254 root 1.33 Argument names also often indicate the type of a parameter. Here are some
255     hints on what they mean:
256    
257     =over 4
258    
259     =item $text
260    
261     Rxvt-unicodes special way of encoding text, where one "unicode" character
262 root 1.78 always represents one screen cell. See L<ROW_t> for a discussion of this format.
263 root 1.33
264     =item $string
265    
266     A perl text string, with an emphasis on I<text>. It can store all unicode
267     characters and is to be distinguished with text encoded in a specific
268     encoding (often locale-specific) and binary data.
269    
270     =item $octets
271    
272     Either binary data or - more common - a text string encoded in a
273     locale-specific way.
274    
275     =back
276    
277 root 1.69 =head2 Extension Objects
278    
279     Very perl extension is a perl class. A separate perl object is created
280     for each terminal and each extension and passed as the first parameter to
281     hooks. So extensions can use their C<$self> object without having to think
282     about other extensions, with the exception of methods and members that
283     begin with an underscore character C<_>: these are reserved for internal
284     use.
285    
286     Although it isn't a C<urxvt::term> object, you can call all methods of the
287     C<urxvt::term> class on this object.
288    
289     It has the following methods and data members:
290    
291     =over 4
292    
293     =item $urxvt_term = $self->{term}
294    
295     Returns the C<urxvt::term> object associated with this instance of the
296     extension. This member I<must not> be changed in any way.
297    
298     =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
299    
300     Dynamically enable the given hooks (named without the C<on_> prefix) for
301     this extension, replacing any previous hook. This is useful when you want
302     to overwrite time-critical hooks only temporarily.
303    
304     =item $self->disable ($hook_name[, $hook_name..])
305    
306     Dynamically disable the given hooks.
307    
308     =back
309    
310 root 1.1 =head2 Hooks
311    
312 root 1.43 The following subroutines can be declared in extension files, and will be
313 root 1.23 called whenever the relevant event happens.
314    
315 root 1.69 The first argument passed to them is an extension oject as described in
316     the in the C<Extension Objects> section.
317    
318 root 1.112 B<All> of these hooks must return a boolean value. If any of the called
319     hooks returns true, then the event counts as being I<consumed>, and the
320     relevant action might not be carried out by the C++ code.
321 root 1.1
322 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
323 root 1.1
324     =over 4
325    
326     =item on_init $term
327    
328     Called after a new terminal object has been initialized, but before
329 root 1.36 windows are created or the command gets run. Most methods are unsafe to
330     call or deliver senseless data, as terminal size and other characteristics
331 root 1.112 have not yet been determined. You can safely query and change resources
332     and options, though. For many purposes the C<on_start> hook is a better
333     place.
334    
335     =item on_start $term
336    
337     Called at the very end of initialisation of a new terminal, just before
338 root 1.113 trying to map (display) the toplevel and returning to the mainloop.
339    
340     =item on_destroy $term
341    
342     Called whenever something tries to destroy terminal, before doing anything
343     yet. If this hook returns true, then destruction is skipped, but this is
344     rarely a good idea.
345 root 1.1
346     =item on_reset $term
347    
348     Called after the screen is "reset" for any reason, such as resizing or
349     control sequences. Here is where you can react on changes to size-related
350     variables.
351    
352 root 1.108 =item on_child_start $term, $pid
353    
354     Called just after the child process has been C<fork>ed.
355    
356     =item on_child_exit $term, $status
357    
358     Called just after the child process has exited. C<$status> is the status
359     from C<waitpid>.
360    
361 root 1.1 =item on_sel_make $term, $eventtime
362    
363     Called whenever a selection has been made by the user, but before the
364     selection text is copied, so changes to the beginning, end or type of the
365     selection will be honored.
366    
367     Returning a true value aborts selection making by urxvt, in which case you
368     have to make a selection yourself by calling C<< $term->selection_grab >>.
369    
370     =item on_sel_grab $term, $eventtime
371    
372     Called whenever a selection has been copied, but before the selection is
373     requested from the server. The selection text can be queried and changed
374     by calling C<< $term->selection >>.
375    
376     Returning a true value aborts selection grabbing. It will still be hilighted.
377    
378 root 1.22 =item on_sel_extend $term
379    
380     Called whenever the user tries to extend the selection (e.g. with a double
381     click) and is either supposed to return false (normal operation), or
382     should extend the selection itelf and return true to suppress the built-in
383 root 1.85 processing. This can happen multiple times, as long as the callback
384     returns true, it will be called on every further click by the user and is
385     supposed to enlarge the selection more and more, if possible.
386 root 1.22
387     See the F<selection> example extension.
388    
389 root 1.1 =item on_view_change $term, $offset
390    
391     Called whenever the view offset changes, i..e the user or program
392     scrolls. Offset C<0> means display the normal terminal, positive values
393     show this many lines of scrollback.
394    
395     =item on_scroll_back $term, $lines, $saved
396    
397     Called whenever lines scroll out of the terminal area into the scrollback
398     buffer. C<$lines> is the number of lines scrolled out and may be larger
399     than the scroll back buffer or the terminal.
400    
401     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
402     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
403     number of lines that will be in the scrollback buffer.
404    
405 root 1.28 =item on_osc_seq $term, $string
406    
407 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
408     operating system command) is processed. Cursor position and other state
409     information is up-to-date when this happens. For interoperability, the
410     string should start with the extension name and a colon, to distinguish
411     it from commands for other extensions, and this might be enforced in the
412     future.
413    
414     Be careful not ever to trust (in a security sense) the data you receive,
415     as its source can not easily be controleld (e-mail content, messages from
416     other users on the same system etc.).
417 root 1.28
418 root 1.33 =item on_add_lines $term, $string
419    
420     Called whenever text is about to be output, with the text as argument. You
421     can filter/change and output the text yourself by returning a true value
422     and calling C<< $term->scr_add_lines >> yourself. Please note that this
423     might be very slow, however, as your hook is called for B<all> text being
424     output.
425    
426 root 1.72 =item on_tt_write $term, $octets
427    
428     Called whenever some data is written to the tty/pty and can be used to
429     suppress or filter tty input.
430    
431 root 1.35 =item on_line_update $term, $row
432    
433     Called whenever a line was updated or changed. Can be used to filter
434     screen output (e.g. underline urls or other useless stuff). Only lines
435     that are being shown will be filtered, and, due to performance reasons,
436     not always immediately.
437    
438     The row number is always the topmost row of the line if the line spans
439     multiple rows.
440    
441     Please note that, if you change the line, then the hook might get called
442     later with the already-modified line (e.g. if unrelated parts change), so
443     you cannot just toggle rendition bits, but only set them.
444    
445 root 1.1 =item on_refresh_begin $term
446    
447     Called just before the screen gets redrawn. Can be used for overlay
448     or similar effects by modify terminal contents in refresh_begin, and
449     restoring them in refresh_end. The built-in overlay and selection display
450     code is run after this hook, and takes precedence.
451    
452     =item on_refresh_end $term
453    
454     Called just after the screen gets redrawn. See C<on_refresh_begin>.
455    
456 root 1.11 =item on_keyboard_command $term, $string
457    
458     Called whenever the user presses a key combination that has a
459     C<perl:string> action bound to it (see description of the B<keysym>
460     resource in the @@RXVT_NAME@@(1) manpage).
461    
462 root 1.92 =item on_x_event $term, $event
463    
464     Called on every X event received on the vt window (and possibly other
465     windows). Should only be used as a last resort. Most event structure
466     members are not passed.
467    
468 root 1.45 =item on_focus_in $term
469    
470     Called whenever the window gets the keyboard focus, before rxvt-unicode
471     does focus in processing.
472    
473     =item on_focus_out $term
474    
475     Called wheneever the window loses keyboard focus, before rxvt-unicode does
476     focus out processing.
477    
478 root 1.102 =item on_configure_notify $term, $event
479    
480 root 1.69 =item on_key_press $term, $event, $keysym, $octets
481 root 1.37
482 root 1.69 =item on_key_release $term, $event, $keysym
483 root 1.37
484     =item on_button_press $term, $event
485    
486     =item on_button_release $term, $event
487    
488     =item on_motion_notify $term, $event
489    
490 root 1.45 =item on_map_notify $term, $event
491    
492     =item on_unmap_notify $term, $event
493    
494 root 1.39 Called whenever the corresponding X event is received for the terminal If
495     the hook returns true, then the even will be ignored by rxvt-unicode.
496    
497     The event is a hash with most values as named by Xlib (see the XEvent
498     manpage), with the additional members C<row> and C<col>, which are the row
499     and column under the mouse cursor.
500 root 1.38
501     C<on_key_press> additionally receives the string rxvt-unicode would
502     output, if any, in locale-specific encoding.
503 root 1.37
504     subwindow.
505    
506 root 1.114 =item on_client_message $term, $event
507    
508     =item on_wm_protocols $term, $event
509    
510     =item on_wm_delete_window $term, $event
511    
512     Called when various types of ClientMessage events are received (all with
513     format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
514    
515 root 1.1 =back
516    
517 root 1.77 =cut
518    
519     package urxvt;
520    
521     use utf8;
522     use strict;
523     use Carp ();
524     use Scalar::Util ();
525     use List::Util ();
526    
527     our $VERSION = 1;
528     our $TERM;
529 root 1.113 our @TERM_INIT;
530     our @TERM_EXT;
531 root 1.77 our @HOOKNAME;
532     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
533     our %OPTION;
534    
535     our $LIBDIR;
536     our $RESNAME;
537     our $RESCLASS;
538     our $RXVTNAME;
539    
540 root 1.23 =head2 Variables in the C<urxvt> Package
541    
542     =over 4
543    
544 root 1.75 =item $urxvt::LIBDIR
545    
546     The rxvt-unicode library directory, where, among other things, the perl
547     modules and scripts are stored.
548    
549     =item $urxvt::RESCLASS, $urxvt::RESCLASS
550    
551     The resource class and name rxvt-unicode uses to look up X resources.
552    
553     =item $urxvt::RXVTNAME
554    
555     The basename of the installed binaries, usually C<urxvt>.
556    
557 root 1.23 =item $urxvt::TERM
558    
559 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
560     object, whenever a callback/hook is executing.
561 root 1.23
562 root 1.113 =item @urxvt::TERM_INIT
563    
564     All coderefs in this array will be called as methods of the next newly
565     created C<urxvt::term> object (during the C<on_init> phase). The array
566     gets cleared before the codereferences that were in it are being executed,
567     so coderefs can push themselves onto it again if they so desire.
568    
569     This complements to the perl-eval commandline option, but gets executed
570     first.
571    
572     =item @urxvt::TERM_EXT
573    
574     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
575     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
576     but before other extensions. Gets cleared just like C<@TERM_INIT>.
577    
578 root 1.23 =back
579    
580 root 1.1 =head2 Functions in the C<urxvt> Package
581    
582     =over 4
583    
584     =item urxvt::fatal $errormessage
585    
586     Fatally aborts execution with the given error message. Avoid at all
587     costs! The only time this is acceptable is when the terminal process
588     starts up.
589    
590     =item urxvt::warn $string
591    
592 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
593 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
594     that calls this function.
595    
596     Using this function has the advantage that its output ends up in the
597     correct place, e.g. on stderr of the connecting urxvtc client.
598    
599 root 1.77 Messages have a size limit of 1023 bytes currently.
600    
601 root 1.1 =item $time = urxvt::NOW
602    
603     Returns the "current time" (as per the event loop).
604    
605 root 1.47 =item urxvt::CurrentTime
606    
607     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
608     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
609     Button4Mask, Button5Mask, AnyModifier
610    
611 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
612     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
613     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
614     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
615     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
616     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
617     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
618    
619     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
620     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
621     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
622     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
623     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
624     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
625     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
626    
627 root 1.55 Various constants for use in X calls and event processing.
628 root 1.47
629 root 1.21 =back
630    
631 root 1.18 =head2 RENDITION
632    
633     Rendition bitsets contain information about colour, font, font styles and
634     similar information for each screen cell.
635    
636     The following "macros" deal with changes in rendition sets. You should
637     never just create a bitset, you should always modify an existing one,
638     as they contain important information required for correct operation of
639     rxvt-unicode.
640    
641     =over 4
642    
643     =item $rend = urxvt::DEFAULT_RSTYLE
644    
645     Returns the default rendition, as used when the terminal is starting up or
646     being reset. Useful as a base to start when creating renditions.
647    
648     =item $rend = urxvt::OVERLAY_RSTYLE
649    
650     Return the rendition mask used for overlays by default.
651    
652     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
653    
654     Return the bit that enabled bold, italic, blink, reverse-video and
655 root 1.19 underline, respectively. To enable such a style, just logically OR it into
656     the bitset.
657 root 1.18
658     =item $foreground = urxvt::GET_BASEFG $rend
659    
660     =item $background = urxvt::GET_BASEBG $rend
661    
662     Return the foreground/background colour index, respectively.
663    
664 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
665 root 1.18
666 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
667 root 1.18
668     Replace the foreground/background colour in the rendition mask with the
669     specified one.
670    
671 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
672 root 1.19
673     Return the "custom" value: Every rendition has 5 bits for use by
674     extensions. They can be set and changed as you like and are initially
675     zero.
676    
677 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
678 root 1.19
679     Change the custom value.
680    
681 root 1.18 =back
682    
683 root 1.1 =cut
684    
685     BEGIN {
686     # overwrite perl's warn
687     *CORE::GLOBAL::warn = sub {
688     my $msg = join "", @_;
689     $msg .= "\n"
690     unless $msg =~ /\n$/;
691     urxvt::warn ($msg);
692     };
693     }
694    
695 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
696 root 1.1
697     sub verbose {
698     my ($level, $msg) = @_;
699 root 1.8 warn "$msg\n" if $level <= $verbosity;
700 root 1.1 }
701    
702 root 1.44 my %extension_pkg;
703 root 1.1
704     # load a single script into its own package, once only
705 root 1.44 sub extension_package($) {
706 root 1.1 my ($path) = @_;
707    
708 root 1.44 $extension_pkg{$path} ||= do {
709 root 1.100 $path =~ /([^\/\\]+)$/;
710     my $pkg = $1;
711     $pkg =~ s/[^[:word:]]/_/g;
712     $pkg = "urxvt::ext::$pkg";
713 root 1.8
714 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
715 root 1.1
716     open my $fh, "<:raw", $path
717     or die "$path: $!";
718    
719 root 1.96 my $source =
720 root 1.69 "package $pkg; use strict; use utf8;\n"
721     . "#line 1 \"$path\"\n{\n"
722     . (do { local $/; <$fh> })
723     . "\n};\n1";
724 root 1.8
725 root 1.69 eval $source
726     or die "$path: $@";
727 root 1.1
728     $pkg
729 root 1.7 }
730 root 1.1 }
731    
732 root 1.31 our $retval; # return value for urxvt
733    
734 root 1.8 # called by the rxvt core
735     sub invoke {
736 root 1.23 local $TERM = shift;
737 root 1.8 my $htype = shift;
738 root 1.6
739 root 1.8 if ($htype == 0) { # INIT
740 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
741 root 1.49
742 root 1.68 my %ext_arg;
743 root 1.6
744 root 1.113 {
745     my @init = @TERM_INIT;
746     @TERM_INIT = ();
747     $_->($TERM) for @init;
748     my @pkg = @TERM_EXT;
749     @TERM_EXT = ();
750     $TERM->register_package ($_) for @pkg;
751     }
752    
753     for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
754 root 1.50 if ($_ eq "default") {
755 root 1.69 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
756 root 1.51 } elsif (/^-(.*)$/) {
757 root 1.68 delete $ext_arg{$1};
758     } elsif (/^([^<]+)<(.*)>$/) {
759     push @{ $ext_arg{$1} }, $2;
760 root 1.49 } else {
761 root 1.68 $ext_arg{$_} ||= [];
762 root 1.50 }
763     }
764 root 1.6
765 root 1.68 while (my ($ext, $argv) = each %ext_arg) {
766 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
767    
768     if (@files) {
769 root 1.68 $TERM->register_package (extension_package $files[0], $argv);
770 root 1.50 } else {
771     warn "perl extension '$ext' not found in perl library search path\n";
772 root 1.8 }
773     }
774 root 1.55
775     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
776     warn $@ if $@;
777 root 1.31 }
778    
779     $retval = undef;
780 root 1.6
781 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
782     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
783     if $verbosity >= 10;
784    
785     keys %$cb;
786    
787     while (my ($pkg, $cb) = each %$cb) {
788 root 1.113 my $retval_ = eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
789     $retval ||= $retval_;
790 root 1.68
791 root 1.58 if ($@) {
792     $TERM->ungrab; # better to lose the grab than the session
793     warn $@;
794     }
795 root 1.31 }
796 root 1.85
797     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
798     if $verbosity >= 11;
799 root 1.31 }
800    
801     if ($htype == 1) { # DESTROY
802     # clear package objects
803     %$_ = () for values %{ $TERM->{_pkg} };
804 root 1.25
805 root 1.31 # clear package
806     %$TERM = ();
807 root 1.7 }
808    
809 root 1.31 $retval
810 root 1.7 }
811 root 1.1
812 root 1.71 # urxvt::term::extension
813 root 1.55
814 root 1.71 package urxvt::term::extension;
815 root 1.69
816     sub enable {
817     my ($self, %hook) = @_;
818     my $pkg = $self->{_pkg};
819    
820     while (my ($name, $cb) = each %hook) {
821     my $htype = $HOOKTYPE{uc $name};
822     defined $htype
823     or Carp::croak "unsupported hook type '$name'";
824    
825 root 1.92 $self->set_should_invoke ($htype, +1)
826     unless exists $self->{term}{_hook}[$htype]{$pkg};
827 root 1.69
828     $self->{term}{_hook}[$htype]{$pkg} = $cb;
829     }
830     }
831    
832     sub disable {
833     my ($self, @hook) = @_;
834     my $pkg = $self->{_pkg};
835    
836     for my $name (@hook) {
837     my $htype = $HOOKTYPE{uc $name};
838     defined $htype
839     or Carp::croak "unsupported hook type '$name'";
840    
841 root 1.92 $self->set_should_invoke ($htype, -1)
842     if delete $self->{term}{_hook}[$htype]{$pkg};
843 root 1.69 }
844     }
845    
846     our $AUTOLOAD;
847    
848     sub AUTOLOAD {
849     $AUTOLOAD =~ /:([^:]+)$/
850     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
851 root 1.23
852     eval qq{
853 root 1.69 sub $AUTOLOAD {
854 root 1.24 my \$proxy = shift;
855     \$proxy->{term}->$1 (\@_)
856 root 1.23 }
857     1
858     } or die "FATAL: unable to compile method forwarder: $@";
859    
860 root 1.69 goto &$AUTOLOAD;
861 root 1.23 }
862    
863 root 1.69 sub DESTROY {
864 root 1.58 # nop
865     }
866    
867 root 1.55 # urxvt::destroy_hook
868    
869 root 1.45 sub urxvt::destroy_hook::DESTROY {
870     ${$_[0]}->();
871     }
872    
873     sub urxvt::destroy_hook(&) {
874     bless \shift, urxvt::destroy_hook::
875     }
876    
877 root 1.56 package urxvt::anyevent;
878    
879     =head2 The C<urxvt::anyevent> Class
880    
881     The sole purpose of this class is to deliver an interface to the
882     C<AnyEvent> module - any module using it will work inside urxvt without
883 root 1.75 further programming. The only exception is that you cannot wait on
884     condition variables, but non-blocking condvar use is ok. What this means
885     is that you cannot use blocking APIs, but the non-blocking variant should
886     work.
887 root 1.55
888 root 1.56 =cut
889 root 1.55
890     our $VERSION = 1;
891    
892     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
893     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
894    
895     sub timer {
896     my ($class, %arg) = @_;
897    
898     my $cb = $arg{cb};
899    
900     urxvt::timer
901     ->new
902     ->start (urxvt::NOW + $arg{after})
903     ->cb (sub {
904     $_[0]->stop; # need to cancel manually
905     $cb->();
906     })
907     }
908    
909     sub io {
910     my ($class, %arg) = @_;
911    
912     my $cb = $arg{cb};
913    
914     bless [$arg{fh}, urxvt::iow
915     ->new
916     ->fd (fileno $arg{fh})
917     ->events (($arg{poll} =~ /r/ ? 1 : 0)
918     | ($arg{poll} =~ /w/ ? 2 : 0))
919     ->start
920     ->cb (sub {
921     $cb->(($_[1] & 1 ? 'r' : '')
922     . ($_[1] & 2 ? 'w' : ''));
923     })],
924     urxvt::anyevent::
925     }
926    
927     sub DESTROY {
928     $_[0][1]->stop;
929     }
930    
931     sub condvar {
932     bless \my $flag, urxvt::anyevent::condvar::
933     }
934    
935     sub urxvt::anyevent::condvar::broadcast {
936     ${$_[0]}++;
937     }
938    
939     sub urxvt::anyevent::condvar::wait {
940     unless (${$_[0]}) {
941 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
942 root 1.55 }
943     }
944    
945     package urxvt::term;
946    
947 root 1.1 =head2 The C<urxvt::term> Class
948    
949     =over 4
950    
951 root 1.68 =cut
952    
953     # find on_xxx subs in the package and register them
954     # as hooks
955     sub register_package {
956     my ($self, $pkg, $argv) = @_;
957    
958 root 1.113 no strict 'refs';
959    
960     urxvt::verbose 6, "register package $pkg to $self";
961    
962     @{"$pkg\::ISA"} = urxvt::term::extension::;
963    
964 root 1.69 my $proxy = bless {
965     _pkg => $pkg,
966     argv => $argv,
967     }, $pkg;
968     Scalar::Util::weaken ($proxy->{term} = $self);
969 root 1.68
970     $self->{_pkg}{$pkg} = $proxy;
971    
972 root 1.69 for my $name (@HOOKNAME) {
973     if (my $ref = $pkg->can ("on_" . lc $name)) {
974     $proxy->enable ($name => $ref);
975     }
976 root 1.68 }
977     }
978    
979 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
980    
981     Creates a new terminal, very similar as if you had started it with system
982 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
983     hash which defines the environment of the new terminal.
984 root 1.77
985     Croaks (and probably outputs an error message) if the new instance
986     couldn't be created. Returns C<undef> if the new instance didn't
987     initialise perl, and the terminal object otherwise. The C<init> and
988     C<start> hooks will be called during this call.
989    
990     =cut
991    
992     sub new {
993     my ($class, $env, @args) = @_;
994    
995     _new ([ map "$_=$env->{$_}", keys %$env ], @args);
996     }
997    
998 root 1.36 =item $term->destroy
999    
1000 root 1.75 Destroy the terminal object (close the window, free resources
1001     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1002     watchers (timers, io watchers) are still active.
1003 root 1.36
1004 root 1.108 =item $term->exec_async ($cmd[, @args])
1005    
1006     Works like the combination of the C<fork>/C<exec> builtins, which executes
1007     ("starts") programs in the background. This function takes care of setting
1008     the user environment before exec'ing the command (e.g. C<PATH>) and should
1009     be preferred over explicit calls to C<exec> or C<system>.
1010    
1011     Returns the pid of the subprocess or C<undef> on error.
1012    
1013     =cut
1014    
1015     sub exec_async {
1016     my $self = shift;
1017    
1018     my $pid = fork;
1019    
1020     return $pid
1021     if !defined $pid or $pid;
1022    
1023     %ENV = %{ $self->env };
1024    
1025     exec @_;
1026     urxvt::_exit 255;
1027     }
1028    
1029 root 1.49 =item $isset = $term->option ($optval[, $set])
1030    
1031     Returns true if the option specified by C<$optval> is enabled, and
1032     optionally change it. All option values are stored by name in the hash
1033     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1034    
1035     Here is a a likely non-exhaustive list of option names, please see the
1036     source file F</src/optinc.h> to see the actual list:
1037    
1038     borderLess console cursorBlink cursorUnderline hold iconic insecure
1039     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1040 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1041     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1042     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1043     transparent tripleclickwords utmpInhibit visualBell
1044 root 1.49
1045 root 1.4 =item $value = $term->resource ($name[, $newval])
1046    
1047     Returns the current resource value associated with a given name and
1048     optionally sets a new value. Setting values is most useful in the C<init>
1049     hook. Unset resources are returned and accepted as C<undef>.
1050    
1051     The new value must be properly encoded to a suitable character encoding
1052     before passing it to this method. Similarly, the returned value may need
1053     to be converted from the used encoding to text.
1054    
1055     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1056     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1057     likely change).
1058    
1059     Please note that resource strings will currently only be freed when the
1060     terminal is destroyed, so changing options frequently will eat memory.
1061    
1062 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
1063 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1064     to see the actual list:
1065 root 1.5
1066     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1067     borderLess color cursorBlink cursorUnderline cutchars delete_key
1068     display_name embed ext_bwidth fade font geometry hold iconName
1069     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1070 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1071     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1072     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1073     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1074     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1075     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1076     secondaryScreen secondaryScroll selectstyle shade term_name title
1077     transient_for transparent transparent_all tripleclickwords utmpInhibit
1078     visualBell
1079 root 1.5
1080 root 1.4 =cut
1081    
1082 root 1.55 sub resource($$;$) {
1083 root 1.4 my ($self, $name) = (shift, shift);
1084     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1085 root 1.45 &urxvt::term::_resource
1086 root 1.4 }
1087    
1088 root 1.79 =item $value = $term->x_resource ($pattern)
1089    
1090     Returns the X-Resource for the given pattern, excluding the program or
1091     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1092     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1093     resource with that pattern exists.
1094    
1095     This method should only be called during the C<on_start> hook, as there is
1096     only one resource database per display, and later invocations might return
1097     the wrong resources.
1098    
1099 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1100    
1101     Adds a keymap translation exactly as specified via a resource. See the
1102     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1103    
1104 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1105 root 1.32
1106 root 1.33 Return and optionally change the current rendition. Text that is output by
1107     the terminal application will use this style.
1108 root 1.32
1109     =item ($row, $col) = $term->screen_cur ([$row, $col])
1110    
1111     Return the current coordinates of the text cursor position and optionally
1112     set it (which is usually bad as applications don't expect that).
1113    
1114 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1115    
1116     =item ($row, $col) = $term->selection_beg ([$row, $col])
1117    
1118     =item ($row, $col) = $term->selection_end ([$row, $col])
1119    
1120     Return the current values of the selection mark, begin or end positions,
1121     and optionally set them to new values.
1122    
1123 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1124    
1125     Tries to make a selection as set by C<selection_beg> and
1126     C<selection_end>. If C<$rectangular> is true (default: false), a
1127     rectangular selection will be made. This is the prefered function to make
1128     a selection.
1129    
1130 root 1.1 =item $success = $term->selection_grab ($eventtime)
1131    
1132 root 1.86 Try to request the primary selection text from the server (for example, as
1133     set by the next method). No visual feedback will be given. This function
1134     is mostly useful from within C<on_sel_grab> hooks.
1135 root 1.1
1136     =item $oldtext = $term->selection ([$newtext])
1137    
1138     Return the current selection text and optionally replace it by C<$newtext>.
1139    
1140 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1141    
1142     Create a simple multi-line overlay box. See the next method for details.
1143    
1144     =cut
1145    
1146     sub overlay_simple {
1147     my ($self, $x, $y, $text) = @_;
1148    
1149     my @lines = split /\n/, $text;
1150    
1151     my $w = List::Util::max map $self->strwidth ($_), @lines;
1152    
1153     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1154     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1155    
1156     $overlay
1157     }
1158 root 1.1
1159 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1160 root 1.1
1161     Create a new (empty) overlay at the given position with the given
1162 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1163     (default: C<OVERLAY_RSTYLE>).
1164 root 1.1
1165 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1166     around the box.
1167 root 1.1
1168 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1169     right/bottom side, respectively.
1170 root 1.1
1171 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1172     as long as the perl object is referenced.
1173 root 1.1
1174 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1175    
1176     =over 4
1177 root 1.1
1178 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1179 root 1.1
1180 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1181     text in rxvt-unicode's special encoding and an array of rendition values
1182     at a specific position inside the overlay.
1183 root 1.1
1184 root 1.22 =item $overlay->hide
1185    
1186     If visible, hide the overlay, but do not destroy it.
1187    
1188     =item $overlay->show
1189    
1190     If hidden, display the overlay again.
1191    
1192     =back
1193    
1194 root 1.45 =item $popup = $term->popup ($event)
1195    
1196     Creates a new C<urxvt::popup> object that implements a popup menu. The
1197     C<$event> I<must> be the event causing the menu to pop up (a button event,
1198     currently).
1199    
1200     =cut
1201    
1202 root 1.55 sub popup {
1203 root 1.45 my ($self, $event) = @_;
1204    
1205     $self->grab ($event->{time}, 1)
1206     or return;
1207    
1208     my $popup = bless {
1209     term => $self,
1210     event => $event,
1211     }, urxvt::popup::;
1212    
1213     Scalar::Util::weaken $popup->{term};
1214    
1215     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1216     Scalar::Util::weaken $self->{_destroy}{$popup};
1217    
1218     $popup
1219     }
1220    
1221 root 1.40 =item $cellwidth = $term->strwidth ($string)
1222 root 1.6
1223     Returns the number of screen-cells this string would need. Correctly
1224     accounts for wide and combining characters.
1225    
1226 root 1.40 =item $octets = $term->locale_encode ($string)
1227 root 1.6
1228     Convert the given text string into the corresponding locale encoding.
1229    
1230 root 1.40 =item $string = $term->locale_decode ($octets)
1231 root 1.6
1232     Convert the given locale-encoded octets into a perl string.
1233    
1234 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1235    
1236     XORs the rendition values in the given span with the provided value
1237 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1238     refresh hooks to provide effects similar to the selection.
1239 root 1.70
1240     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1241    
1242     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1243     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1244     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1245 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1246 root 1.70
1247 root 1.69 =item $term->scr_bell
1248    
1249     Ring the bell!
1250    
1251 root 1.33 =item $term->scr_add_lines ($string)
1252    
1253     Write the given text string to the screen, as if output by the application
1254     running inside the terminal. It may not contain command sequences (escape
1255     codes), but is free to use line feeds, carriage returns and tabs. The
1256     string is a normal text string, not in locale-dependent encoding.
1257    
1258     Normally its not a good idea to use this function, as programs might be
1259     confused by changes in cursor position or scrolling. Its useful inside a
1260     C<on_add_lines> hook, though.
1261    
1262 root 1.36 =item $term->cmd_parse ($octets)
1263    
1264     Similar to C<scr_add_lines>, but the argument must be in the
1265     locale-specific encoding of the terminal and can contain command sequences
1266     (escape codes) that will be interpreted.
1267    
1268 root 1.6 =item $term->tt_write ($octets)
1269    
1270     Write the octets given in C<$data> to the tty (i.e. as program input). To
1271 root 1.12 pass characters instead of octets, you should convert your strings first
1272     to the locale-specific encoding using C<< $term->locale_encode >>.
1273    
1274 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1275    
1276     Replaces the event mask of the pty watcher by the given event mask. Can
1277     be used to suppress input and output handling to the pty/tty. See the
1278     description of C<< urxvt::timer->events >>. Make sure to always restore
1279     the previous value.
1280    
1281 root 1.40 =item $windowid = $term->parent
1282    
1283     Return the window id of the toplevel window.
1284    
1285     =item $windowid = $term->vt
1286    
1287     Return the window id of the terminal window.
1288    
1289 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1290    
1291     Adds the specified events to the vt event mask. Useful e.g. when you want
1292     to receive pointer events all the times:
1293    
1294     $term->vt_emask_add (urxvt::PointerMotionMask);
1295    
1296 root 1.32 =item $window_width = $term->width
1297    
1298     =item $window_height = $term->height
1299    
1300     =item $font_width = $term->fwidth
1301    
1302     =item $font_height = $term->fheight
1303    
1304     =item $font_ascent = $term->fbase
1305    
1306     =item $terminal_rows = $term->nrow
1307    
1308     =item $terminal_columns = $term->ncol
1309    
1310     =item $has_focus = $term->focus
1311    
1312     =item $is_mapped = $term->mapped
1313 root 1.13
1314 root 1.32 =item $max_scrollback = $term->saveLines
1315 root 1.13
1316 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1317 root 1.13
1318 root 1.94 =item $topmost_scrollback_row = $term->top_row
1319 root 1.12
1320 root 1.32 Return various integers describing terminal characteristics.
1321 root 1.12
1322 root 1.77 =item $x_display = $term->display_id
1323    
1324     Return the DISPLAY used by rxvt-unicode.
1325    
1326 root 1.66 =item $lc_ctype = $term->locale
1327    
1328     Returns the LC_CTYPE category string used by this rxvt-unicode.
1329    
1330 root 1.77 =item $env = $term->env
1331    
1332     Returns a copy of the environment in effect for the terminal as a hashref
1333     similar to C<\%ENV>.
1334    
1335     =cut
1336 root 1.66
1337 root 1.77 sub env {
1338     if (my $env = $_[0]->_env) {
1339     +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), @$env }
1340     } else {
1341     +{ %ENV }
1342     }
1343     }
1344 root 1.66
1345 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1346    
1347     =item $modifiermask = $term->ModMetaMask
1348    
1349     =item $modifiermask = $term->ModNumLockMask
1350    
1351     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1352     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1353    
1354 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1355    
1356 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1357     C<0>, which displays the normal terminal contents. Lower values scroll
1358 root 1.12 this many lines into the scrollback buffer.
1359    
1360 root 1.14 =item $term->want_refresh
1361    
1362     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1363     compare the on-screen display with its stored representation. If they
1364     differ, it redraws the differences.
1365    
1366     Used after changing terminal contents to display them.
1367    
1368 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1369 root 1.12
1370     Returns the text of the entire row with number C<$row_number>. Row C<0>
1371     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1372     terminal line. The scrollback buffer starts at line C<-1> and extends to
1373 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1374     is requested.
1375 root 1.12
1376 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1377     line, starting at column C<$start_col> (default C<0>), which is useful
1378 root 1.18 to replace only parts of a line. The font index in the rendition will
1379 root 1.13 automatically be updated.
1380 root 1.12
1381     C<$text> is in a special encoding: tabs and wide characters that use more
1382     than one cell when displayed are padded with urxvt::NOCHAR characters
1383     (C<chr 65535>). Characters with combining characters and other characters
1384     that do not fit into the normal tetx encoding will be replaced with
1385     characters in the private use area.
1386    
1387     You have to obey this encoding when changing text. The advantage is
1388     that C<substr> and similar functions work on screen cells and not on
1389     characters.
1390    
1391     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1392     can be used to convert normal strings into this encoding and vice versa.
1393    
1394 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1395    
1396     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1397     bitsets. Rendition bitsets contain information about colour, font, font
1398     styles and similar information. See also C<< $term->ROW_t >>.
1399    
1400     When setting rendition, the font mask will be ignored.
1401 root 1.12
1402 root 1.18 See the section on RENDITION, above.
1403 root 1.13
1404     =item $length = $term->ROW_l ($row_number[, $new_length])
1405    
1406 root 1.24 Returns the number of screen cells that are in use ("the line
1407     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1408     line is joined with the following one.
1409    
1410     =item $bool = $term->is_longer ($row_number)
1411    
1412     Returns true if the row is part of a multiple-row logical "line" (i.e.
1413     joined with the following row), which means all characters are in use
1414     and it is continued on the next row (and possibly a continuation of the
1415     previous row(s)).
1416    
1417     =item $line = $term->line ($row_number)
1418    
1419     Create and return a new C<urxvt::line> object that stores information
1420     about the logical line that row C<$row_number> is part of. It supports the
1421     following methods:
1422 root 1.12
1423 root 1.24 =over 4
1424    
1425 root 1.35 =item $text = $line->t ([$new_text])
1426 root 1.24
1427 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1428 root 1.24
1429 root 1.35 =item $rend = $line->r ([$new_rend])
1430 root 1.24
1431 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1432 root 1.24
1433     =item $length = $line->l
1434    
1435     Returns the length of the line in cells, similar to C<ROW_l>.
1436    
1437     =item $rownum = $line->beg
1438    
1439     =item $rownum = $line->end
1440    
1441     Return the row number of the first/last row of the line, respectively.
1442    
1443     =item $offset = $line->offset_of ($row, $col)
1444    
1445     Returns the character offset of the given row|col pair within the logical
1446 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1447     offsets outside the string.
1448 root 1.24
1449     =item ($row, $col) = $line->coord_of ($offset)
1450    
1451     Translates a string offset into terminal coordinates again.
1452    
1453     =back
1454    
1455     =cut
1456    
1457 root 1.55 sub line {
1458 root 1.24 my ($self, $row) = @_;
1459    
1460     my $maxrow = $self->nrow - 1;
1461    
1462     my ($beg, $end) = ($row, $row);
1463    
1464     --$beg while $self->ROW_is_longer ($beg - 1);
1465     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1466    
1467     bless {
1468     term => $self,
1469     beg => $beg,
1470     end => $end,
1471 root 1.34 ncol => $self->ncol,
1472 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1473     }, urxvt::line::
1474     }
1475    
1476     sub urxvt::line::t {
1477     my ($self) = @_;
1478    
1479 root 1.34 if (@_ > 1)
1480     {
1481     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1482     for $self->{beg} .. $self->{end};
1483     }
1484    
1485     defined wantarray &&
1486     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1487     0, $self->{len}
1488 root 1.24 }
1489    
1490     sub urxvt::line::r {
1491     my ($self) = @_;
1492    
1493 root 1.34 if (@_ > 1)
1494     {
1495     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1496     for $self->{beg} .. $self->{end};
1497     }
1498    
1499     if (defined wantarray) {
1500     my $rend = [
1501     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1502     ];
1503     $#$rend = $self->{len} - 1;
1504     return $rend;
1505     }
1506    
1507     ()
1508 root 1.24 }
1509    
1510     sub urxvt::line::beg { $_[0]{beg} }
1511     sub urxvt::line::end { $_[0]{end} }
1512     sub urxvt::line::l { $_[0]{len} }
1513    
1514     sub urxvt::line::offset_of {
1515     my ($self, $row, $col) = @_;
1516    
1517 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1518 root 1.24 }
1519    
1520     sub urxvt::line::coord_of {
1521     my ($self, $offset) = @_;
1522    
1523     use integer;
1524    
1525     (
1526 root 1.34 $offset / $self->{ncol} + $self->{beg},
1527     $offset % $self->{ncol}
1528 root 1.24 )
1529     }
1530    
1531 root 1.12 =item $text = $term->special_encode $string
1532    
1533     Converts a perl string into the special encoding used by rxvt-unicode,
1534     where one character corresponds to one screen cell. See
1535     C<< $term->ROW_t >> for details.
1536    
1537     =item $string = $term->special_decode $text
1538    
1539     Converts rxvt-unicodes text reprsentation into a perl string. See
1540     C<< $term->ROW_t >> for details.
1541 root 1.6
1542 root 1.61 =item $success = $term->grab_button ($button, $modifiermask)
1543    
1544 root 1.64 Registers a synchronous button grab. See the XGrabButton manpage.
1545 root 1.61
1546     =item $success = $term->grab ($eventtime[, $sync])
1547    
1548     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1549     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1550    
1551     =item $term->allow_events_async
1552    
1553     Calls XAllowEvents with AsyncBoth for the most recent grab.
1554    
1555     =item $term->allow_events_sync
1556    
1557     Calls XAllowEvents with SyncBoth for the most recent grab.
1558    
1559     =item $term->allow_events_replay
1560    
1561     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1562     recent grab.
1563    
1564     =item $term->ungrab
1565    
1566     Calls XUngrab for the most recent grab. Is called automatically on
1567     evaluation errors, as it is better to lose the grab in the error case as
1568     the session.
1569    
1570 root 1.1 =back
1571    
1572 root 1.55 =cut
1573    
1574     package urxvt::popup;
1575    
1576 root 1.45 =head2 The C<urxvt::popup> Class
1577    
1578     =over 4
1579    
1580     =cut
1581    
1582     sub add_item {
1583     my ($self, $item) = @_;
1584    
1585 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1586     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1587     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1588    
1589     $item->{render} ||= sub { $_[0]{text} };
1590    
1591 root 1.45 push @{ $self->{item} }, $item;
1592     }
1593    
1594 root 1.76 =item $popup->add_title ($title)
1595    
1596     Adds a non-clickable title to the popup.
1597    
1598     =cut
1599    
1600     sub add_title {
1601     my ($self, $title) = @_;
1602    
1603     $self->add_item ({
1604     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1605     text => $title,
1606     activate => sub { },
1607     });
1608     }
1609    
1610     =item $popup->add_separator ([$sepchr])
1611    
1612     Creates a separator, optionally using the character given as C<$sepchr>.
1613    
1614     =cut
1615    
1616 root 1.53 sub add_separator {
1617     my ($self, $sep) = @_;
1618    
1619 root 1.67 $sep ||= "=";
1620 root 1.53
1621     $self->add_item ({
1622     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1623     text => "",
1624 root 1.65 render => sub { $sep x $self->{term}->ncol },
1625 root 1.53 activate => sub { },
1626     });
1627     }
1628    
1629 root 1.76 =item $popup->add_button ($text, $cb)
1630    
1631     Adds a clickable button to the popup. C<$cb> is called whenever it is
1632     selected.
1633 root 1.53
1634 root 1.76 =cut
1635 root 1.53
1636 root 1.45 sub add_button {
1637     my ($self, $text, $cb) = @_;
1638    
1639 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1640 root 1.48 }
1641    
1642 root 1.76 =item $popup->add_toggle ($text, $cb, $initial_value)
1643    
1644     Adds a toggle/checkbox item to the popup. Teh callback gets called
1645     whenever it gets toggled, with a boolean indicating its value as its first
1646     argument.
1647    
1648     =cut
1649    
1650 root 1.48 sub add_toggle {
1651     my ($self, $text, $cb, $value) = @_;
1652    
1653 root 1.49 my $item; $item = {
1654     type => "button",
1655     text => " $text",
1656     value => $value,
1657 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1658 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1659 root 1.49 };
1660    
1661     $self->add_item ($item);
1662 root 1.45 }
1663    
1664 root 1.76 =item $popup->show
1665    
1666     Displays the popup (which is initially hidden).
1667    
1668     =cut
1669    
1670 root 1.45 sub show {
1671     my ($self) = @_;
1672    
1673     local $urxvt::popup::self = $self;
1674    
1675 root 1.77 my $env = $self->{term}->env;
1676     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1677     delete $env->{LC_ALL};
1678     $env->{LC_CTYPE} = $self->{term}->locale;
1679    
1680 root 1.103 urxvt::term->new ($env, "popup",
1681 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1682 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1683     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1684 root 1.77 "--transient-for" => $self->{term}->parent,
1685     "-display" => $self->{term}->display_id,
1686     "-pe" => "urxvt-popup")
1687 root 1.45 or die "unable to create popup window\n";
1688     }
1689    
1690     sub DESTROY {
1691     my ($self) = @_;
1692    
1693 root 1.58 delete $self->{term}{_destroy}{$self};
1694 root 1.45 $self->{term}->ungrab;
1695     }
1696    
1697 root 1.78 =back
1698    
1699 root 1.113 =cut
1700    
1701     package urxvt::watcher;
1702    
1703     @urxvt::timer::ISA = __PACKAGE__;
1704     @urxvt::iow::ISA = __PACKAGE__;
1705     @urxvt::pw::ISA = __PACKAGE__;
1706     @urxvt::iw::ISA = __PACKAGE__;
1707    
1708 root 1.1 =head2 The C<urxvt::timer> Class
1709    
1710     This class implements timer watchers/events. Time is represented as a
1711     fractional number of seconds since the epoch. Example:
1712    
1713 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1714 root 1.1 $term->{timer} = urxvt::timer
1715     ->new
1716 root 1.20 ->interval (1)
1717 root 1.1 ->cb (sub {
1718 root 1.20 $term->{overlay}->set (0, 0,
1719     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1720     });
1721 root 1.1
1722     =over 4
1723    
1724     =item $timer = new urxvt::timer
1725    
1726 root 1.20 Create a new timer object in started state. It is scheduled to fire
1727     immediately.
1728 root 1.1
1729     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1730    
1731     Set the callback to be called when the timer triggers.
1732    
1733     =item $tstamp = $timer->at
1734    
1735     Return the time this watcher will fire next.
1736    
1737     =item $timer = $timer->set ($tstamp)
1738    
1739     Set the time the event is generated to $tstamp.
1740    
1741 root 1.20 =item $timer = $timer->interval ($interval)
1742    
1743     Normally (and when C<$interval> is C<0>), the timer will automatically
1744     stop after it has fired once. If C<$interval> is non-zero, then the timer
1745     is automatically rescheduled at the given intervals.
1746    
1747 root 1.1 =item $timer = $timer->start
1748    
1749     Start the timer.
1750    
1751     =item $timer = $timer->start ($tstamp)
1752    
1753     Set the event trigger time to C<$tstamp> and start the timer.
1754    
1755 root 1.103 =item $timer = $timer->after ($delay)
1756    
1757     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1758    
1759 root 1.1 =item $timer = $timer->stop
1760    
1761     Stop the timer.
1762    
1763     =back
1764    
1765     =head2 The C<urxvt::iow> Class
1766    
1767     This class implements io watchers/events. Example:
1768    
1769     $term->{socket} = ...
1770     $term->{iow} = urxvt::iow
1771     ->new
1772     ->fd (fileno $term->{socket})
1773 root 1.69 ->events (urxvt::EVENT_READ)
1774 root 1.1 ->start
1775     ->cb (sub {
1776     my ($iow, $revents) = @_;
1777     # $revents must be 1 here, no need to check
1778     sysread $term->{socket}, my $buf, 8192
1779     or end-of-file;
1780     });
1781    
1782    
1783     =over 4
1784    
1785     =item $iow = new urxvt::iow
1786    
1787     Create a new io watcher object in stopped state.
1788    
1789     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1790    
1791     Set the callback to be called when io events are triggered. C<$reventmask>
1792     is a bitset as described in the C<events> method.
1793    
1794     =item $iow = $iow->fd ($fd)
1795    
1796     Set the filedescriptor (not handle) to watch.
1797    
1798     =item $iow = $iow->events ($eventmask)
1799    
1800 root 1.69 Set the event mask to watch. The only allowed values are
1801     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1802     together, or C<urxvt::EVENT_NONE>.
1803 root 1.1
1804     =item $iow = $iow->start
1805    
1806     Start watching for requested events on the given handle.
1807    
1808     =item $iow = $iow->stop
1809    
1810     Stop watching for events on the given filehandle.
1811    
1812     =back
1813    
1814 root 1.114 =head2 The C<urxvt::iw> Class
1815    
1816     This class implements idle watchers, that get called automatically when
1817     the process is idle. They should return as fast as possible, after doing
1818     some useful work.
1819    
1820     =over 4
1821    
1822     =item $iw = new urxvt::iw
1823    
1824     Create a new idle watcher object in stopped state.
1825    
1826     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
1827    
1828     Set the callback to be called when the watcher triggers.
1829    
1830     =item $timer = $timer->start
1831    
1832     Start the watcher.
1833    
1834     =item $timer = $timer->stop
1835    
1836     Stop the watcher.
1837    
1838     =back
1839    
1840     =head2 The C<urxvt::pw> Class
1841    
1842     This class implements process watchers. They create an event whenever a
1843     process exits, after which they stop automatically.
1844    
1845     my $pid = fork;
1846     ...
1847     $term->{pw} = urxvt::pw
1848     ->new
1849     ->start ($pid)
1850     ->cb (sub {
1851     my ($pw, $exit_status) = @_;
1852     ...
1853     });
1854    
1855     =over 4
1856    
1857     =item $pw = new urxvt::pw
1858    
1859     Create a new process watcher in stopped state.
1860    
1861     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
1862    
1863     Set the callback to be called when the timer triggers.
1864    
1865     =item $pw = $timer->start ($pid)
1866    
1867     Tells the wqtcher to start watching for process C<$pid>.
1868    
1869     =item $pw = $pw->stop
1870    
1871     Stop the watcher.
1872    
1873     =back
1874    
1875 root 1.4 =head1 ENVIRONMENT
1876    
1877     =head2 URXVT_PERL_VERBOSITY
1878    
1879     This variable controls the verbosity level of the perl extension. Higher
1880     numbers indicate more verbose output.
1881    
1882     =over 4
1883    
1884 root 1.58 =item == 0 - fatal messages
1885 root 1.4
1886 root 1.58 =item >= 3 - script loading and management
1887 root 1.4
1888 root 1.85 =item >=10 - all called hooks
1889    
1890     =item >=11 - hook reutrn values
1891 root 1.4
1892     =back
1893    
1894 root 1.1 =head1 AUTHOR
1895    
1896     Marc Lehmann <pcg@goof.com>
1897     http://software.schmorp.de/pkg/rxvt-unicode
1898    
1899     =cut
1900    
1901     1