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