--- rxvt-unicode/src/urxvt.pm 2006/01/11 02:13:56 1.79 +++ rxvt-unicode/src/urxvt.pm 2006/01/13 07:03:48 1.93 @@ -42,11 +42,33 @@ =item selection (enabled by default) (More) intelligent selection. This extension tries to be more intelligent -when the user extends selections (double-click). Right now, it tries to -select urls and complete shell-quoted arguments, which is very convenient, -too, if your F supports C<--quoting-style=shell>. +when the user extends selections (double-click and further clicks). Right +now, it tries to select words, urls and complete shell-quoted +arguments, which is very convenient, too, if your F supports +C<--quoting-style=shell>. -It also offers the following bindable keyboard command: +A double-click usually selects the word under the cursor, further clicks +will enlarge the selection. + +The selection works by trying to match a number of regexes and displaying +them in increasing order of length. You can add your own regexes by +specifying resources of the form: + + URxvt.selection.pattern-0: perl-regex + URxvt.selection.pattern-1: perl-regex + ... + +The index number (0, 1...) must not have any holes, and each regex must +contain at least one pair of capturing parentheses, which will be used for +the match. For example, the followign adds a regex that matches everything +between two vertical bars: + + URxvt.selection.pattern-0: \\|([^|]+)\\| + +You can look at the source of the selection extension to see more +interesting uses, such as parsing a line from beginning to end. + +This extension also offers the following bindable keyboard command: =over 4 @@ -72,23 +94,59 @@ =item searchable-scrollback (enabled by default) Adds regex search functionality to the scrollback buffer, triggered -by a hotkey (default: C). When in search mode, normal terminal -input/output is suspended. +by a hotkey (default: C). While in search mode, normal terminal +input/output is suspended and a regex is displayed at the bottom of the +screen. -C starts an incremental regex search, C searches further, C

or -C jump to the previous match, C jumps to the bottom and clears the -history, C leaves search mode at the current position and C -returns to the original position. +Inputting characters appends them to the regex and continues incremental +search. C removes a character from the regex, C and C +search upwards/downwards in the scrollback buffer, C jumps to the +bottom. C leaves search mode and returns to the point where search +was started, while C or C stay at the current position and +additionally stores the first match in the current line into the primary +selection. -=item digital-clock +=item selection-autotransform -Displays a digital clock using the built-in overlay. +This selection allows you to do automatic transforms on a selection +whenever a selection is made. + +It works by specifying perl snippets (most useful is a single C +operator) that modify C<$_> as resources: + + URxvt.selection-autotransform.0: transform + URxvt.selection-autotransform.1: transform + ... + +For example, the following will transform selections of the form +C, often seen in compiler messages, into C: + + URxvt.selection-autotransform.0: s/^([^:[:space:]]+):(\\d+):?$/vi +$2 \\Q$1\\E\\x0d/ + +And this example matches the same,but replaces it with vi-commands you can +paste directly into your (vi :) editor: + + URxvt.selection-autotransform.0: s/^([^:[:space:]]+(\\d+):?$/\\x1b:e \\Q$1\\E\\x0d:$2\\x0d/ + +Of course, this can be modified to suit your needs and your editor :) + +To expand the example above to typical perl error messages ("XXX at +FILENAME line YYY."), you need a slightly more elaborate solution: + + URxvt.selection.pattern-0: ( at .*? line \\d+\\.) + URxvt.selection-autotransform.0: s/^ at (.*?) line (\\d+)\\.$/\x1b:e \\Q$1\E\\x0d:$2\\x0d/ + +The first line tells the selection code to treat the unchanging part of +every error message as a selection pattern, and the second line transforms +the message into vi commands to load the file. =item mark-urls Uses per-line display filtering (C) to underline urls and -make them clickable. When clicked, the program specified in the resource -C (default C) will be started. +make them clickable. When middle-clicked, the program specified in the +resource C (default C) will be started with +the URL as first argument. =item block-graphics-to-ascii @@ -96,6 +154,10 @@ by replacing all line-drawing characters (U+2500 .. U+259F) by a similar-looking ascii character. +=item digital-clock + +Displays a digital clock using the built-in overlay. + =item example-refresh-hooks Displays a very simple digital clock in the upper right corner of the @@ -232,7 +294,9 @@ Called whenever the user tries to extend the selection (e.g. with a double click) and is either supposed to return false (normal operation), or should extend the selection itelf and return true to suppress the built-in -processing. +processing. This can happen multiple times, as long as the callback +returns true, it will be called on every further click by the user and is +supposed to enlarge the selection more and more, if possible. See the F example extension. @@ -309,6 +373,12 @@ C action bound to it (see description of the B resource in the @@RXVT_NAME@@(1) manpage). +=item on_x_event $term, $event + +Called on every X event received on the vt window (and possibly other +windows). Should only be used as a last resort. Most event structure +members are not passed. + =item on_focus_in $term Called whenever the window gets the keyboard focus, before rxvt-unicode @@ -429,6 +499,22 @@ Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, AnyModifier +=item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask, +ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask, +PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask, +Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask, +KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask, +ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask, +FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask + +=item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify, +EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose, +GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify, +UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify, +ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify, +CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest, +SelectionNotify, ColormapNotify, ClientMessage, MappingNotify + Various constants for use in X calls and event processing. =back @@ -498,13 +584,13 @@ urxvt::warn ($msg); }; + # %ENV is the original startup environment delete $ENV{IFS}; delete $ENV{CDPATH}; delete $ENV{BASH_ENV}; $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin"; } -my @hook_count; my $verbosity = $ENV{URXVT_PERL_VERBOSITY}; sub verbose { @@ -596,16 +682,12 @@ warn $@; } } + + verbose 11, "$HOOKNAME[$htype] returning <$retval>" + if $verbosity >= 11; } if ($htype == 1) { # DESTROY - if (my $hook = delete $TERM->{_hook}) { - for my $htype (0..$#$hook) { - $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} } - or set_should_invoke $htype, 0; - } - } - # clear package objects %$_ = () for values %{ $TERM->{_pkg} }; @@ -616,6 +698,18 @@ $retval } +sub exec_async(@) { + my $pid = fork; + + return + if !defined $pid or $pid; + + %ENV = %{ $TERM->env }; + + exec @_; + _exit 255; +} + # urxvt::term::extension package urxvt::term::extension; @@ -629,10 +723,8 @@ defined $htype or Carp::croak "unsupported hook type '$name'"; - unless (exists $self->{term}{_hook}[$htype]{$pkg}) { - $hook_count[$htype]++ - or urxvt::set_should_invoke $htype, 1; - } + $self->set_should_invoke ($htype, +1) + unless exists $self->{term}{_hook}[$htype]{$pkg}; $self->{term}{_hook}[$htype]{$pkg} = $cb; } @@ -647,10 +739,8 @@ defined $htype or Carp::croak "unsupported hook type '$name'"; - if (delete $self->{term}{_hook}[$htype]{$pkg}) { - --$hook_count[$htype] - or urxvt::set_should_invoke $htype, 0; - } + $self->set_should_invoke ($htype, -1) + if delete $self->{term}{_hook}[$htype]{$pkg}; } } @@ -899,10 +989,18 @@ Return the current values of the selection mark, begin or end positions, and optionally set them to new values. +=item $term->selection_make ($eventtime[, $rectangular]) + +Tries to make a selection as set by C and +C. If C<$rectangular> is true (default: false), a +rectangular selection will be made. This is the prefered function to make +a selection. + =item $success = $term->selection_grab ($eventtime) -Try to request the primary selection from the server (for example, as set -by the next method). +Try to request the primary selection text from the server (for example, as +set by the next method). No visual feedback will be given. This function +is mostly useful from within C hooks. =item $oldtext = $term->selection ([$newtext]) @@ -1005,15 +1103,15 @@ =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle]) XORs the rendition values in the given span with the provided value -(default: C). Useful in refresh hooks to provide effects similar -to the selection. +(default: C), which I contain font styles. Useful in +refresh hooks to provide effects similar to the selection. =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]]) Similar to C, but xors a rectangle instead. Trailing whitespace will additionally be xored with the C<$rstyle2>, which defaults to C, which removes reverse video again and underlines -it instead. +it instead. Both styles I contain font styles. =item $term->scr_bell @@ -1057,6 +1155,13 @@ Return the window id of the terminal window. +=item $term->vt_emask_add ($x_event_mask) + +Adds the specified events to the vt event mask. Useful e.g. when you want +to receive pointer events all the times: + + $term->vt_emask_add (urxvt::PointerMotionMask); + =item $window_width = $term->width =item $window_height = $term->height @@ -1207,7 +1312,8 @@ =item $offset = $line->offset_of ($row, $col) Returns the character offset of the given row|col pair within the logical -line. +line. Works for rows outside the line, too, and returns corresponding +offsets outside the string. =item ($row, $col) = $line->coord_of ($offset) @@ -1572,7 +1678,9 @@ =item >= 3 - script loading and management -=item >=10 - all events received +=item >=10 - all called hooks + +=item >=11 - hook reutrn values =back