- f: file paths
- i: IPs
- u: URLs
+ - c: checksums (e.g. MD5, SHA1, ..)
- ...
- /: search mode
- for `normal' modes:
=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
return {
select => 'path select',
matches => \@matches,
- handler => $config->{handler}{yank},
+ handler => $config->{handler}{path},
};
}
sub mapping_mode_url {
handler => $config->{handler}{ip},
};
}
+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},
+ };
+}
=head2 SEARCH MODE (AND EXTEND MODE)
=item B<i> select IPv4 and IPv6 addresses (C<\&mapping_mode_ip>)
+=item B<c> select checksums (e.g. MD5, SHA) (C<\&mapping_mode_checksum>)
+
=item B</> search for regex to get selection (C<\&mapping_mode_search>)
=item B<q> quit fcscs (C<\&mapping_quit>)
f => \&mapping_mode_path,
u => \&mapping_mode_url,
i => \&mapping_mode_ip,
+ c => \&mapping_mode_checksum,
'/' => \&mapping_mode_search,
q => \&mapping_quit,
);
=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>)
# enough.
ipv4 => qr!\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?:/\d{1,2})?)\b!,
ipv6 => qr!\b((?:[0-9a-fA-F]{1,4})?(?::+[0-9a-fA-F]{1,4})+(?:/\d{1,3})?)\b!,
+ # MD5, SHA1, SHA256, SHA512
+ checksum => qr!\b([0-9a-fA-F]{32}|[0-9a-fA-F]{40}|[0-9a-fA-F]{64}|[0-9a-fA-F]{128})\b!,
);
=head2 HANDLERS
=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<path> used to handle paths (C<\&handler_yank>)
-=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<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<ip> used to handle IPs (C<\&handler_yank>)
+=item B<checksum> used to handle checksums (C<\&handler_yank>)
=back
=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,
);
my %state = (
mapping_mode_path()
mapping_mode_url()
mapping_mode_ip()
+ mapping_mode_checksum()
mapping_mode_search()
mapping_paste()
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.
sub mapping_mode_path { return main::mapping_mode_path(@_); }
sub mapping_mode_url { return main::mapping_mode_url(@_); }
sub mapping_mode_ip { return main::mapping_mode_ip(@_); }
+ sub mapping_mode_checksum { return main::mapping_mode_checksum(@_); }
sub mapping_mode_search { return main::mapping_mode_search(@_); }
sub mapping_paste { return main::mapping_paste(@_); }