entered number.
Press return before entering a number to select the last (lowest numbered)
-match. To abort without selecting any match either use "q".
+match (underlined by default). To abort without selecting any match either use
+"q".
To change the selection mode (e.g. paths, files, etc.) use one of the mappings
explained below. Per default URLs are selected, see options for a way to
change this.
+I<NOTE>: Opening URLs in the browser passes the URL via the command line which
+leaks URLs to other users on the current system via C<ps aux> or C<top>.
+
I<NOTE>: When yanking (copying) a temporary file is used to pass the data to
GNU screen/Tmux without exposing it to C<ps aux> or C<top>. However this may
leak data if those temporary files are written to disk. To prevent this change
sub draw_prompt {
my ($self, $config) = @_;
+ $self->debug('draw_prompt', 'started');
+
my $x = 0;
my $y = $self->height - 1;
# Draw prompt flags.
if (defined (my $s = $self->{prompt}{flags})) {
$s = "[$s]";
+ $self->debug('draw_prompt', $s);
$self->draw_clipped($y, $x, $config->{attribute}{prompt_flags}, $s);
$x += length($s) + 1; # space between next element
}
# Draw prompt name.
if (defined (my $s = $self->{prompt}{name})) {
$s = "[$s]";
+ $self->debug('draw_prompt', $s);
$self->draw_clipped($y, $x, $config->{attribute}{prompt_name}, $s);
$x += length($s) + 1;
}
# Draw prompt value, e.g. a search field.
if (defined (my $s = $self->{prompt}{value})) {
+ $self->debug('draw_prompt', $s);
$self->draw_clipped($y, $x, undef, $s);
$x += length($s) + 1;
}
my $attr_id = $config->{attribute}{match_id};
my $attr_string = $config->{attribute}{match_string};
+ my $attr_last = $config->{attribute}{match_last};
foreach (@{$matches_add}) {
- $self->draw($_->{y}, $_->{x}, $attr_string, $_->{string});
+ my $attr = (defined $_->{id} and $_->{id} == 1)
+ ? $attr_last
+ : $attr_string;
+ $self->draw($_->{y}, $_->{x}, $attr, $_->{string});
if (defined $_->{id}) {
$self->draw($_->{y}, $_->{x}, $attr_id, $_->{id});
}
# a working $$.
no warnings;
- system { $cmd->[0] } @{$cmd};
+ my @cmd = map { $screen->encode($_) } @{$cmd};
+ system { $cmd[0] } @cmd;
};
if ($exit != 0) {
my $msg;
$screen->debug('extend_match', 'started');
+ return if not defined $match;
+
$screen->prompt(name => 'extend', value => undef);
$screen->draw_prompt($config);
} elsif ($char eq 'E') { # select current WORD (only right)
extend_match_regex_right($line, $match, qr/\S+/);
- } elsif ($char eq '^') { # select to beginning of line
+ } elsif ($char eq '0') { # select to beginning of line
extend_match_regex_left($line, $match, qr/.+/);
} elsif ($char eq '$') { # select to end of line
extend_match_regex_right($line, $match, qr/.+/);
=item B<E> extend WORD to the right
-=item B<^> extend to beginning of line
+=item B<0> extend to beginning of line
=item B<$> extend to end of line
$screen->debug('handler_url', "opening $match->{value}");
run_in_background($screen, sub {
- my @cmd = map { $screen->encode($_) } (
- @{$config->{setting}{browser}},
- $match->{value},
- );
+ my @cmd = ( @{$config->{setting}{browser}}, $match->{value} );
run_command($screen, $config, \@cmd);
});
return;
=item B<match_string> attribute for matches (yellow, default, normal)
+=item B<match_last> attribute for the match selected by return (yellow, default, underline)
+
=item B<prompt_name> attribute for prompt name (standout)
=item B<prompt_flags> attribute for prompt flags (standout)
match_id => $screen->color_pair(Curses::COLOR_RED, -1)
| Curses::A_BOLD,
match_string => $screen->color_pair(Curses::COLOR_YELLOW, -1),
+ match_last => $screen->color_pair(Curses::COLOR_YELLOW, -1)
+ | Curses::A_UNDERLINE,
prompt_name => Curses::A_STANDOUT,
prompt_flags => Curses::A_STANDOUT,
);
$screen->debug('input', 'selecting match');
my $tmp = $result;
$result = select_match($result->{select},
- $screen, \%config, $input,
- $result->{matches});
+ $screen, \%config, $input,
+ $result->{matches});
$result->{handler} = $tmp->{handler};
$result->{extend} = $tmp->{extend};
goto RESULT; # reprocess special entries in result