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.248 by root, Fri Dec 26 21:01:46 2014 UTC vs.
Revision 1.262 by root, Sat Jul 3 04:04:13 2021 UTC

45 45
46 URxvt.perl-ext-common: default,selection-autotransform 46 URxvt.perl-ext-common: default,selection-autotransform
47 47
48Extensions may add additional resources and C<actions>, i.e., methods 48Extensions may add additional resources and C<actions>, i.e., methods
49which can be bound to a key and invoked by the user. An extension can 49which can be bound to a key and invoked by the user. An extension can
50define the resources it support and also default bindings for one or 50define the resources it support using so called META comments,
51more actions it provides using so called META comments, described
52below. Similarly to builtin resources, extension resources can also be 51described below. Similarly to builtin resources, extension resources
53specified on the command line as long options (with C<.> replaced by 52can also be specified on the command line as long options (with C<.>
54C<->), in which case the corresponding extension is loaded 53replaced by C<->), in which case the corresponding extension is loaded
55automatically. For this to work the extension B<must> define META 54automatically. For this to work the extension B<must> define META
56comments for its resources. 55comments for its resources.
57 56
58=head1 API DOCUMENTATION 57=head1 API DOCUMENTATION
59 58
116the C<urxvt::extension> section below. 115the C<urxvt::extension> section below.
117 116
118=head2 META comments 117=head2 META comments
119 118
120Rxvt-unicode recognizes special meta comments in extensions that define 119Rxvt-unicode recognizes special meta comments in extensions that define
121different types of metadata. 120different types of metadata. These comments are scanned whenever a
121terminal is created and are typically used to autoload extensions when
122their resources or command line parameters are used.
122 123
123Currently, it recxognises only one such comment: 124Currently, it recognises only one such comment:
124 125
125=over 4 126=over 4
126 127
127=item #:META:RESOURCE:name:type:desc 128=item #:META:RESOURCE:name:type:desc
128 129
129The RESOURCE comment defines a resource used by the extension, where 130The RESOURCE comment defines a resource used by the extension, where
130C<name> is the resource name, C<type> is the resource type, C<boolean> 131C<name> is the resource name, C<type> is the resource type, C<boolean>
131or C<string>, and C<desc> is the resource description. 132or C<string>, and C<desc> is the resource description.
133
134The extension will be autoloaded when this resource is specified or used
135as a command line parameter.
132 136
133=back 137=back
134 138
135=head2 Hooks 139=head2 Hooks
136 140
512ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify, 516ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
513CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest, 517CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
514SelectionNotify, ColormapNotify, ClientMessage, MappingNotify 518SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
515 519
516Various constants for use in X calls and event processing. 520Various constants for use in X calls and event processing.
521
522=item urxvt::PrivMode_132, PrivMode_132OK, PrivMode_rVideo, PrivMode_relOrigin,
523PrivMode_Screen, PrivMode_Autowrap, PrivMode_aplCUR, PrivMode_aplKP,
524PrivMode_HaveBackSpace, PrivMode_BackSpace, PrivMode_ShiftKeys,
525PrivMode_VisibleCursor, PrivMode_MouseX10, PrivMode_MouseX11,
526PrivMode_scrollBar, PrivMode_TtyOutputInh, PrivMode_Keypress,
527PrivMode_smoothScroll, PrivMode_vt52, PrivMode_LFNL, PrivMode_MouseBtnEvent,
528PrivMode_MouseAnyEvent, PrivMode_BracketPaste, PrivMode_ExtMouseUTF8,
529PrivMode_ExtMouseUrxvt, PrivMode_BlinkingCursor, PrivMode_mouse_report,
530PrivMode_Default
531
532Constants for checking DEC private modes.
517 533
518=back 534=back
519 535
520=head2 RENDITION 536=head2 RENDITION
521 537
589sub parse_resource { 605sub parse_resource {
590 my ($term, $name, $isarg, $longopt, $flag, $value) = @_; 606 my ($term, $name, $isarg, $longopt, $flag, $value) = @_;
591 607
592 $term->scan_extensions; 608 $term->scan_extensions;
593 609
610 # iterating over all resources has quadratic time overhead
611 # overall, maybe this could be optimised?
594 my $r = $term->{meta}{resource}; 612 my $r = $term->{meta}{resource};
595 keys %$r; # reset iterator 613 keys %$r; # reset iterator
596 while (my ($k, $v) = each %$r) { 614 while (my ($k, $v) = each %$r) {
597 my $pattern = $k; 615 my $pattern = $k;
598 $pattern =~ y/./-/ if $isarg; 616 $pattern =~ y/./-/ if $isarg;
605 if ($pattern eq $prefix) { 623 if ($pattern eq $prefix) {
606 $name = "$urxvt::RESCLASS.$k$suffix"; 624 $name = "$urxvt::RESCLASS.$k$suffix";
607 625
608 push @{ $term->{perl_ext_3} }, $v->[0]; 626 push @{ $term->{perl_ext_3} }, $v->[0];
609 627
628 return 1 unless $isarg;
629
610 if ($v->[1] eq "boolean") { 630 if ($v->[1] eq "boolean") {
611 $term->put_option_db ($name, $flag ? "true" : "false"); 631 $term->put_option_db ($name, $flag ? "true" : "false");
612 return 1; 632 return 1;
613 } else { 633 } else {
614 $term->put_option_db ($name, $value); 634 $term->put_option_db ($name, $value);
709 @TERM_EXT = (); 729 @TERM_EXT = ();
710 $TERM->register_package ($_) for @pkg; 730 $TERM->register_package ($_) for @pkg;
711 } 731 }
712 732
713 for ( 733 for (
734 @{ delete $TERM->{perl_ext_3} },
714 (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2), 735 (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2),
715 @{ delete $TERM->{perl_ext_3} }
716 ) { 736 ) {
717 if ($_ eq "default") { 737 if ($_ eq "default") {
718 738
719 $ext_arg{$_} = [] 739 $ext_arg{$_} = []
720 for qw(selection option-popup selection-popup readline searchable-scrollback); 740 for qw(selection option-popup selection-popup readline searchable-scrollback confirm-paste);
721 741
722 for ($TERM->_keysym_resources) { 742 for ($TERM->_keysym_resources) {
723 next if /^(?:string|command|builtin|builtin-string|perl)/; 743 next if /^(?:string|command|builtin|builtin-string|perl)/;
724 next unless /^([A-Za-z0-9_\-]+):/; 744 next unless /^([A-Za-z0-9_\-]+):/;
725 745
1134sub scan_extensions { 1154sub scan_extensions {
1135 my ($self) = @_; 1155 my ($self) = @_;
1136 1156
1137 return if exists $self->{meta}; 1157 return if exists $self->{meta};
1138 1158
1139 my @libdirs = perl_libdirs $self; 1159 my @urxvtdirs = perl_libdirs $self;
1160# my @cpandirs = grep -d, map "$_/URxvt/Ext", @INC;
1140 1161
1141# return if $self->{meta_libdirs} eq join "\x00", @libdirs;#d#
1142
1143# $self->{meta_libdirs} = join "\x00", @libdirs;#d#
1144 $self->{meta} = \my %meta; 1162 $self->{meta} = \my %meta;
1145 1163
1146 # first gather extensions 1164 # first gather extensions
1147 for my $dir (reverse @libdirs) { 1165
1166 my $gather = sub {
1167 my ($dir, $core) = @_;
1168
1148 opendir my $fh, $dir 1169 opendir my $fh, $dir
1149 or next; 1170 or return;
1171
1150 for my $ext (readdir $fh) { 1172 for my $ext (readdir $fh) {
1151 $ext !~ /^\./ 1173 $ext !~ /^\./
1174 or next;
1175
1152 and open my $fh, "<", "$dir/$ext" 1176 open my $fh, "<", "$dir/$ext"
1177 or next;
1178
1179 -f $fh
1180 or next;
1181
1182 $ext =~ s/\.uext$// or $core
1153 or next; 1183 or next;
1154 1184
1155 my %ext = (dir => $dir); 1185 my %ext = (dir => $dir);
1156 1186
1157 while (<$fh>) { 1187 while (<$fh>) {
1170 } 1200 }
1171 } 1201 }
1172 1202
1173 $meta{ext}{$ext} = \%ext; 1203 $meta{ext}{$ext} = \%ext;
1174 } 1204 }
1175 } 1205 };
1206
1207# $gather->($_, 0) for @cpandirs;
1208 $gather->($_, 1) for @urxvtdirs;
1176 1209
1177 # and now merge resources 1210 # and now merge resources
1211
1212 $meta{resource} = \my %resource;
1213
1178 while (my ($k, $v) = each %{ $meta{ext} }) { 1214 while (my ($k, $v) = each %{ $meta{ext} }) {
1179 #TODO: should check for extensions overriding each other 1215 #TODO: should check for extensions overriding each other
1180 %{ $meta{resource} } = (%{ $meta{resource} }, %{ $v->{resource} }); 1216 %resource = (%resource, %{ $v->{resource} });
1181 } 1217 }
1182} 1218}
1183 1219
1184=item $term = new urxvt::term $envhashref, $rxvtname, [arg...] 1220=item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1185 1221
1248 insecure intensityStyles iso14755 iso14755_52 jumpScroll loginShell 1284 insecure intensityStyles iso14755 iso14755_52 jumpScroll loginShell
1249 mapAlert meta8 mouseWheelScrollPage override_redirect pastableTabs 1285 mapAlert meta8 mouseWheelScrollPage override_redirect pastableTabs
1250 pointerBlank reverseVideo scrollBar scrollBar_floating scrollBar_right 1286 pointerBlank reverseVideo scrollBar scrollBar_floating scrollBar_right
1251 scrollTtyKeypress scrollTtyOutput scrollWithBuffer secondaryScreen 1287 scrollTtyKeypress scrollTtyOutput scrollWithBuffer secondaryScreen
1252 secondaryScroll skipBuiltinGlyphs skipScroll transparent tripleclickwords 1288 secondaryScroll skipBuiltinGlyphs skipScroll transparent tripleclickwords
1253 urgentOnBell utmpInhibit visualBell 1289 urgentOnBell utmpInhibit visualBell disablePasteBrackets
1254 1290
1255=item $value = $term->resource ($name[, $newval]) 1291=item $value = $term->resource ($name[, $newval])
1256 1292
1257Returns the current resource value associated with a given name and 1293Returns the current resource value associated with a given name and
1258optionally sets a new value. Setting values is most useful in the C<init> 1294optionally sets a new value. Setting values is most useful in the C<init>
1284 preeditType print_pipe pty_fd reverseVideo saveLines scrollBar 1320 preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1285 scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness 1321 scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1286 scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle 1322 scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1287 secondaryScreen secondaryScroll shade skipBuiltinGlyphs skipScroll 1323 secondaryScreen secondaryScroll shade skipBuiltinGlyphs skipScroll
1288 term_name title transient_for transparent tripleclickwords urgentOnBell 1324 term_name title transient_for transparent tripleclickwords urgentOnBell
1289 utmpInhibit visualBell 1325 utmpInhibit visualBell rewrapMode disablePasteBrackets
1290 1326
1291=cut 1327=cut
1292 1328
1293sub resource($$;$) { 1329sub resource($$;$) {
1294 my ($self, $name) = (shift, shift); 1330 my ($self, $name) = (shift, shift);
1331 my $res = &x_resource; 1367 my $res = &x_resource;
1332 1368
1333 $res =~ /^\s*(?:true|yes|on|1)\s*$/i ? 1 : defined $res && 0 1369 $res =~ /^\s*(?:true|yes|on|1)\s*$/i ? 1 : defined $res && 0
1334} 1370}
1335 1371
1372=item $action = $term->lookup_keysym ($keysym, $state)
1373
1374Returns the action bound to key combination C<($keysym, $state)>,
1375if a binding for it exists, and C<undef> otherwise.
1376
1336=item $success = $term->bind_action ($key, $action) 1377=item $success = $term->bind_action ($key, $action)
1337 1378
1338Adds a key binding exactly as specified via a C<keysym> resource. See the 1379Adds a key binding exactly as specified via a C<keysym> resource. See the
1339C<keysym> resource in the urxvt(1) manpage. 1380C<keysym> resource in the urxvt(1) manpage.
1340 1381
1341To add default bindings for an extension, the extension should call C<< 1382To add default bindings for actions, an extension should call C<<
1342->bind_action >> on it's C<init> hook for every such binding. Doing it 1383->bind_action >> in its C<init> hook for every such binding. Doing it
1343in the C<init> hook allows users the override or remove the the binding 1384in the C<init> hook allows users to override or remove the binding
1344again. 1385again.
1345 1386
1346Example: the C<searchable-scrollback> by default binds itself 1387Example: the C<searchable-scrollback> by default binds itself
1347on C<Meta-s>, using C<< $self->bind_action >>, which calls C<< 1388on C<Meta-s>, using C<< $self->bind_action >>, which calls C<<
1348$term->bind_action >>. 1389$term->bind_action >>.
1597 1638
1598=item $term->key_release ($state, $keycode[, $time]) 1639=item $term->key_release ($state, $keycode[, $time])
1599 1640
1600Deliver various fake events to to terminal. 1641Deliver various fake events to to terminal.
1601 1642
1602=item $window_width = $term->width 1643=item $window_width = $term->width ([$new_value])
1603 1644
1604=item $window_height = $term->height 1645=item $window_height = $term->height ([$new_value])
1605 1646
1606=item $font_width = $term->fwidth 1647=item $font_width = $term->fwidth ([$new_value])
1607 1648
1608=item $font_height = $term->fheight 1649=item $font_height = $term->fheight ([$new_value])
1609 1650
1610=item $font_ascent = $term->fbase 1651=item $font_ascent = $term->fbase ([$new_value])
1611 1652
1612=item $terminal_rows = $term->nrow 1653=item $terminal_rows = $term->nrow ([$new_value])
1613 1654
1614=item $terminal_columns = $term->ncol 1655=item $terminal_columns = $term->ncol ([$new_value])
1615 1656
1616=item $has_focus = $term->focus 1657=item $has_focus = $term->focus ([$new_value])
1617 1658
1618=item $is_mapped = $term->mapped 1659=item $is_mapped = $term->mapped ([$new_value])
1619 1660
1620=item $max_scrollback = $term->saveLines 1661=item $max_scrollback = $term->saveLines ([$new_value])
1621 1662
1622=item $nrow_plus_saveLines = $term->total_rows 1663=item $nrow_plus_saveLines = $term->total_rows ([$new_value])
1623 1664
1624=item $topmost_scrollback_row = $term->top_row 1665=item $topmost_scrollback_row = $term->top_row ([$new_value])
1625 1666
1626Return various integers describing terminal characteristics. 1667Return various integers describing terminal characteristics. If an
1668argument is given, changes the value and returns the previous one.
1627 1669
1628=item $x_display = $term->display_id 1670=item $x_display = $term->display_id
1629 1671
1630Return the DISPLAY used by rxvt-unicode. 1672Return the DISPLAY used by rxvt-unicode.
1631 1673
1667Returns the currently displayed screen (0 primary, 1 secondary). 1709Returns the currently displayed screen (0 primary, 1 secondary).
1668 1710
1669=item $cursor_is_hidden = $term->hidden_cursor 1711=item $cursor_is_hidden = $term->hidden_cursor
1670 1712
1671Returns whether the cursor is currently hidden or not. 1713Returns whether the cursor is currently hidden or not.
1714
1715=item $priv_modes = $term->priv_modes
1716
1717Returns a bitset with the state of DEC private modes.
1718
1719Example:
1720
1721 if ($term->priv_modes & urxvt::PrivMode_mouse_report) {
1722 # mouse reporting is turned on
1723 }
1672 1724
1673=item $view_start = $term->view_start ([$newvalue]) 1725=item $view_start = $term->view_start ([$newvalue])
1674 1726
1675Returns the row number of the topmost displayed line. Maximum value is 1727Returns the row number of the topmost displayed line. Maximum value is
1676C<0>, which displays the normal terminal contents. Lower values scroll 1728C<0>, which displays the normal terminal contents. Lower values scroll
1681Requests a screen refresh. At the next opportunity, rxvt-unicode will 1733Requests a screen refresh. At the next opportunity, rxvt-unicode will
1682compare the on-screen display with its stored representation. If they 1734compare the on-screen display with its stored representation. If they
1683differ, it redraws the differences. 1735differ, it redraws the differences.
1684 1736
1685Used after changing terminal contents to display them. 1737Used after changing terminal contents to display them.
1738
1739=item $term->refresh_check
1740
1741Checks if a refresh has been requested and, if so, schedules one.
1686 1742
1687=item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]]) 1743=item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1688 1744
1689Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >> 1745Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1690is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost 1746is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines