ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
(Generate patch)

Comparing rxvt-unicode/src/urxvt.pm (file contents):
Revision 1.266 by root, Sat Jul 24 11:58:27 2021 UTC vs.
Revision 1.272 by root, Thu Dec 29 01:10:08 2022 UTC

120different types of metadata. These comments are scanned whenever a 120different types of metadata. These comments are scanned whenever a
121terminal is created and are typically used to autoload extensions when 121terminal is created and are typically used to autoload extensions when
122their resources or command line parameters are used. 122their resources or command line parameters are used.
123 123
124Currently, it recognises these comments below. Individual components are 124Currently, it recognises these comments below. Individual components are
125separated by cololns (C<:>), and shoudl not contain colons themselves - 125separated by colons (C<:>), and should not contain colons themselves -
126there is also currently no escaping mechanism provided for this. 126there is also currently no escaping mechanism provided for this.
127 127
128=over 128=over
129 129
130=item #:META:RESOURCE:name:type:desc 130=item #:META:RESOURCE:name:type:desc
134or C<string>, and C<desc> is the resource description. 134or C<string>, and C<desc> is the resource description.
135 135
136The extension will be autoloaded when this resource is specified or used 136The extension will be autoloaded when this resource is specified or used
137as a command line parameter. 137as a command line parameter.
138 138
139Example: matcher provides the C<matcher.launcher> ressource by having this 139Example: matcher provides the C<matcher.launcher> resource by having this
140comment: 140comment:
141 141
142 #:META:RESOURCE:%.launcher:string:default launcher command 142 #:META:RESOURCE:%.launcher:string:default launcher command
143 143
144Example: load this extension when the C<-tr> command line option or 144Example: load this extension when the C<-tr> command line option or
154 154
155This will cause the extension to be autoloaded when the OSC sequence is 155This will cause the extension to be autoloaded when the OSC sequence is
156used for the first time. 156used for the first time.
157 157
158Note that autoloading carries some extra responsibilities with it: 158Note that autoloading carries some extra responsibilities with it:
159although the terminal cnanot really protect itself against malicious 159although the terminal cannot really protect itself against malicious
160sources of command sequences, therefore relying on the programs running 160sources of command sequences, therefore relying on the programs running
161I<inside> to sanitize data that they output, it is very common for 161I<inside> to sanitize data that they output, it is very common for
162programs to emit command sequences from untrusted sources. 162programs to emit command sequences from untrusted sources.
163 163
164While this means that extensions should, as a defense-in-depth mechanism, 164While this means that extensions should, as a defense-in-depth mechanism,
196relevant action might not be carried out by the C++ code. 196relevant action might not be carried out by the C++ code.
197 197
198I<< When in doubt, return a false value (preferably C<()>). >> 198I<< When in doubt, return a false value (preferably C<()>). >>
199 199
200=over 200=over
201
202=item on_attach $term
203
204Called when an extension package is attached to a running terminal
205instance. Must return true in all cases, and runs with the same
206limitations as C<on_init>.
207
208Unlike C<on_init> or C<on_start>, this is called when the extension is
209attached to a terminal, regardless of whether the extension is loaded
210before or after the terminal is started. Extensions that need to do
211something before they work can do it in this callback, as opposed to e.g.
212C<on_init>, which might not be called.
201 213
202=item on_init $term 214=item on_init $term
203 215
204Called after a new terminal object has been initialized, but before 216Called after a new terminal object has been initialized, but before
205windows are created or the command gets run. Most methods are unsafe to 217windows are created or the command gets run. Most methods are unsafe to
823 835
824 eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval"); 836 eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
825 warn $@ if $@; 837 warn $@ if $@;
826 } 838 }
827 839
828 $retval = undef;
829
830 if ($htype == HOOK_OSC_SEQ) { 840 if ($htype == HOOK_OSC_SEQ) {
831 if (my $exts = delete $TERM->{meta}{autoload_osc}{$_[0]}) { 841 if (my $exts = delete $TERM->{meta}{autoload_osc}{$_[0]}) {
832 $TERM->autoload_extension ($_->[0]) for @$exts; 842 $TERM->autoload_extension ($_->[0]) for @$exts;
833 } 843 }
834 } elsif ($htype == HOOK_OSC_SEQ_PERL) { 844 } elsif ($htype == HOOK_OSC_SEQ_PERL) {
835 if ($_[0] =~ /^([^;]+)/ and (my $exts = delete $TERM->{meta}{autoload_osc_perl}{$1})) { 845 if ($_[0] =~ /^([^;]+)/ and (my $exts = delete $TERM->{meta}{autoload_osc_perl}{$1})) {
836 $TERM->autoload_extension ($_->[0]) for @$exts; 846 $TERM->autoload_extension ($_->[0]) for @$exts;
837 } 847 }
838 } 848 }
849
850 $retval = undef;
839 851
840 if (my $cb = $TERM->{_hook}[$htype]) { 852 if (my $cb = $TERM->{_hook}[$htype]) {
841 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")" 853 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
842 if $verbosity >= 10; 854 if $verbosity >= 10;
843 855
1180# find on_xxx subs in the package and register them 1192# find on_xxx subs in the package and register them
1181# as hooks 1193# as hooks
1182sub register_package { 1194sub register_package {
1183 my ($self, $pkg, $argv) = @_; 1195 my ($self, $pkg, $argv) = @_;
1184 1196
1197 return if $self->{_pkg}{$pkg};
1198
1185 no strict 'refs'; 1199 no strict 'refs';
1186 1200
1187 urxvt::verbose 6, "register package $pkg to $self"; 1201 urxvt::verbose 6, "register package $pkg to $self";
1188 1202
1189 @{"$pkg\::ISA"} = urxvt::term::extension::; 1203 @{"$pkg\::ISA"} = urxvt::term::extension::;
1200 for my $name (@HOOKNAME) { 1214 for my $name (@HOOKNAME) {
1201 if (my $ref = $pkg->can ("on_" . lc $name)) { 1215 if (my $ref = $pkg->can ("on_" . lc $name)) {
1202 $proxy->enable ($name => $ref); 1216 $proxy->enable ($name => $ref);
1203 } 1217 }
1204 } 1218 }
1205}
1206 1219
1220 if (my $attach_hook = $pkg->can ("on_attach")) {
1221 $attach_hook->($proxy)
1222 or urxvt::verbose 1, "$pkg->on_attach returned false, extension failed to attach";
1223 }
1224}
1225
1207# map extension name to filesyystem path 1226# map extension name to filesystem path
1208sub extension_path { 1227sub extension_path {
1209 (grep -f $_, map "$_/$_[1]", $_[0]->perl_libdirs)[0] 1228 (grep -f $_, map "$_/$_[1]", $_[0]->perl_libdirs)[0]
1210} 1229}
1211 1230
1212# load an extension by name 1231# load an extension by name
1345Works like the combination of the C<fork>/C<exec> builtins, which executes 1364Works like the combination of the C<fork>/C<exec> builtins, which executes
1346("starts") programs in the background. This function takes care of setting 1365("starts") programs in the background. This function takes care of setting
1347the user environment before exec'ing the command (e.g. C<PATH>) and should 1366the user environment before exec'ing the command (e.g. C<PATH>) and should
1348be preferred over explicit calls to C<exec> or C<system>. 1367be preferred over explicit calls to C<exec> or C<system>.
1349 1368
1369It also sets the C<URXVT_EXT_WINDOWID> environment variable to the window
1370ID of the terminal (C<< $self->parent >>), similar to the C<WINDOWID>
1371variable set for the process spawned inside the terminal.
1372
1350Returns the pid of the subprocess or C<undef> on error. 1373Returns the pid of the subprocess or C<undef> on error.
1351 1374
1352=cut 1375=cut
1353 1376
1354sub exec_async { 1377sub exec_async {
1357 my $pid = fork; 1380 my $pid = fork;
1358 1381
1359 return $pid 1382 return $pid
1360 if !defined $pid or $pid; 1383 if !defined $pid or $pid;
1361 1384
1385 %ENV = (
1362 %ENV = %{ $self->env }; 1386 %{ $self->env },
1387 URXVT_EXT_WINDOWID => $self->parent,
1388 );
1363 1389
1364 exec @_; 1390 exec @_;
1365 urxvt::_exit 255; 1391 urxvt::_exit 255;
1366} 1392}
1367 1393
1625Returns the number of screen-cells this string would need. Correctly 1651Returns the number of screen-cells this string would need. Correctly
1626accounts for wide and combining characters. 1652accounts for wide and combining characters.
1627 1653
1628=item $octets = $term->locale_encode ($string) 1654=item $octets = $term->locale_encode ($string)
1629 1655
1630Convert the given text string into the corresponding locale encoding. 1656Convert the given text string into the corresponding locale
1657encoding. Returns C<undef> if C<$string> is C<undef>.
1631 1658
1632=item $string = $term->locale_decode ($octets) 1659=item $string = $term->locale_decode ($octets)
1633 1660
1634Convert the given locale-encoded octets into a perl string. 1661Convert the given locale-encoded octets into a perl string. Returns
1662C<undef> if C<$octets> is C<undef>.
1635 1663
1636=item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle]) 1664=item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1637 1665
1638XORs the rendition values in the given span with the provided value 1666XORs the rendition values in the given span with the provided value
1639(default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in 1667(default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1993 $offset / $self->{ncol} + $self->{beg}, 2021 $offset / $self->{ncol} + $self->{beg},
1994 $offset % $self->{ncol} 2022 $offset % $self->{ncol}
1995 ) 2023 )
1996} 2024}
1997 2025
1998=item $text = $term->special_encode $string 2026=item $text = $term->special_encode ($string)
1999 2027
2000Converts a perl string into the special encoding used by rxvt-unicode, 2028Converts a perl string into the special encoding used by rxvt-unicode,
2001where one character corresponds to one screen cell. See 2029where one character corresponds to one screen cell. See
2002C<< $term->ROW_t >> for details. 2030C<< $term->ROW_t >> for details.
2003 2031
2004=item $string = $term->special_decode $text 2032=item $string = $term->special_decode ($text)
2005 2033
2006Converts rxvt-unicodes text representation into a perl string. See 2034Converts rxvt-unicode's text representation into a perl string. See
2007C<< $term->ROW_t >> for details. 2035C<< $term->ROW_t >> for details.
2008 2036
2009=item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt]) 2037=item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
2010 2038
2011=item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt]) 2039=item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines