} elsif ($char eq '$') { # select to end of line
extend_match_regex_right($line, $match, qr/.+/);
- # Allow mode changes if not overwritten by local mappings.
+ # Allow mode changes if not overwritten by above mappings.
} elsif (defined $config->{mapping}{mode}{$char}) {
$screen->draw_matches($config, [$match_old], []); # clear match
return { key => $char };
}
-sub mapping_paste {
- my ($key, $screen, $config, $input) = @_;
+sub mapping_state_helper {
+ my ($name, $flags, $key, $screen, $config, $input) = @_;
- $screen->debug('mapping_paste', 'started');
+ $screen->debug("mapping_$name", 'started');
- $config->{state}{handler} = $config->{handler}{paste};
+ $config->{state}{handler} = $config->{handler}{$name};
- $screen->prompt(flags => 'P'); # paste
+ $screen->prompt(flags => $flags);
$screen->draw_prompt($config);
$screen->refresh;
return {};
}
-sub mapping_paste_now {
- my ($key, $screen, $config, $input) = @_;
+sub mapping_state_now_helper {
+ my ($name, $key, $screen, $config, $input) = @_;
- $screen->debug('mapping_paste_now', 'started');
+ $screen->debug("mapping_${name}_now", 'started');
- $config->{state}{handler} = $config->{handler}{paste};
+ $config->{state}{handler} = $config->{handler}{$name};
return {
select_match => 1,
};
}
-sub mapping_yank {
- my ($key, $screen, $config, $input) = @_;
-
- $screen->debug('mapping_yank', 'started');
-
- $config->{state}{handler} = $config->{handler}{yank};
-
- $screen->prompt(flags => 'Y'); # yank
- $screen->draw_prompt($config);
- $screen->refresh;
+sub mapping_paste {
+ return mapping_state_helper('paste', 'P', @_);
+}
+sub mapping_paste_now {
+ return mapping_state_now_helper('paste', @_);
+}
- return {};
+sub mapping_yank {
+ return mapping_state_helper('yank', 'Y', @_);
}
sub mapping_yank_now {
- my ($key, $screen, $config, $input) = @_;
-
- $screen->debug('mapping_yank_now', 'started');
-
- $config->{state}{handler} = $config->{handler}{yank};
-
- return {
- select_match => 1,
- };
+ return mapping_state_now_helper('yank', @_);
}
=over 4
-=item B<path mode> select relative/absolute paths
+=item B<path mode> select relative/absolute paths
-=item B<url mode> select URLs
+=item B<url mode> select URLs
-=item B<ip mode> select IPv4 and IPv6 addresses
+=item B<ip mode> select IPv4 and IPv6 addresses
=item B<checksum mode> select checksums (MD5, SHA1, SHA256, SHA512)
=back
=cut
-sub mapping_mode_path {
- my ($key, $screen, $config, $input) = @_;
+sub mapping_mode_helper {
+ my ($name, $select, $key, $screen, $config, $input) = @_;
- $screen->debug('mapping_mode_path', 'started');
+ $screen->debug("mapping_mode_$name", 'started');
- my @matches = get_regex_matches($input, $config->{regex}{path});
+ my @matches = get_regex_matches($input, $config->{regex}{$name});
return {
- select => 'path select',
+ select => $select,
matches => \@matches,
- handler => $config->{handler}{yank},
+ handler => $config->{handler}{$name},
};
}
+sub mapping_mode_path {
+ return mapping_mode_helper('path', 'path select', @_);
+}
sub mapping_mode_url {
- my ($key, $screen, $config, $input) = @_;
-
- $screen->debug('mapping_mode_url', 'started');
-
- my @matches = get_regex_matches($input, $config->{regex}{url});
- return {
- select => 'url select',
- matches => \@matches,
- handler => $config->{handler}{url},
- };
+ return mapping_mode_helper('url', 'url select', @_);
}
sub mapping_mode_ip {
my ($key, $screen, $config, $input) = @_;
};
}
sub mapping_mode_checksum {
- my ($key, $screen, $config, $input) = @_;
-
- $screen->debug('mapping_mode_checksum', 'started');
-
- my @matches = get_regex_matches($input, $config->{regex}{checksum});
- return {
- select => 'checksum select',
- matches => \@matches,
- handler => $config->{handler}{checksum},
- };
+ return mapping_mode_helper('checksum', 'checksum select', @_);
}
=head2 SEARCH MODE (AND EXTEND MODE)
=item B<initial_mode> start in this mode, must be a valid mode mapping (C<\&mapping_mode_url>)
-=item B<multiplexer> set multiplexer ("screen" or "tmux") if not autodetected (C<undef>)
+=item B<multiplexer> set multiplexer ("screen" or "tmux"), defaults to autodetection (C<undef>)
=item B<ignorecase> ignore case when searching (C<0>)
=over
-=item B<yank> used to yank (copy) selection to paste buffer (C<\&handler_yank>)
+=item B<yank> used to yank (copy) selection to paste buffer (C<\&handler_yank>)
-=item B<paste> used to paste selection into window (C<\&handler_paste>)
+=item B<paste> used to paste selection into window (C<\&handler_paste>)
-=item B<url> used to open URLs (e.g. in a browser) (C<\&handler_url>)
+=item B<path> used to handle paths (C<\&handler_yank>)
-=item B<ip> used to handle IPs (C<\&handler_yank>)
+=item B<url> used to open URLs (e.g. in a browser) (C<\&handler_url>)
+
+=item B<ip> used to handle IPs (C<\&handler_yank>)
=item B<checksum> used to handle checksums (C<\&handler_yank>)
=cut
my %handler = (
- yank => \&handler_yank,
- paste => \&handler_paste,
- url => \&handler_url,
- ip => \&handler_yank,
+ yank => \&handler_yank,
+ paste => \&handler_paste,
+ path => \&handler_yank,
+ url => \&handler_url,
+ ip => \&handler_yank,
checksum => \&handler_yank,
);
run_command()
run_in_background()
-Helper functions when writing custom mappings, see the source for details.
+Helper functions when writing custom mappings, see the source and example for
+details.
Example:
}
return $result;
- }
+ };
# Also update initial mode to use our new "URL mode".
$config{setting}{initial_mode} = $config{mapping}{mode}{u};
});
};
-
-
=cut
# All variables and functions which are usable by ~/.fcscsrc.