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