add checksum mode (mapped to c)
authorSimon Ruderich <simon@ruderich.org>
Mon, 1 Feb 2016 18:35:45 +0000 (19:35 +0100)
committerSimon Ruderich <simon@ruderich.org>
Mon, 1 Feb 2016 18:35:45 +0000 (19:35 +0100)
bin/fcscs

index 971cb8098e3d46bc47a455fcfdcb4cdbe1a2d314..bbf97940452b7b6952b919e317d76307a6965201 100755 (executable)
--- a/bin/fcscs
+++ b/bin/fcscs
@@ -64,6 +64,7 @@ Short overview of the general usage, details below:
         - f: file paths
         - i: IPs
         - u: URLs
+        - c: checksums (e.g. MD5, SHA1, ..)
         - ...
         - /: search mode
     - for `normal' modes:
@@ -747,6 +748,8 @@ The following normal modes are available:
 
 =item B<ip mode>   select IPv4 and IPv6 addresses
 
+=item B<checksum mode> select checksums (MD5, SHA1, SHA256, SHA512)
+
 =back
 
 =cut
@@ -787,6 +790,18 @@ sub mapping_mode_ip {
         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)
 
@@ -1078,6 +1093,8 @@ them in parentheses):
 
 =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>)
@@ -1131,6 +1148,7 @@ my %mapping_mode = (
     f   => \&mapping_mode_path,
     u   => \&mapping_mode_url,
     i   => \&mapping_mode_ip,
+    c   => \&mapping_mode_checksum,
     '/' => \&mapping_mode_search,
     q   => \&mapping_quit,
 );
@@ -1256,6 +1274,8 @@ my %regex = (
     # 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
@@ -1274,6 +1294,8 @@ The following handlers are available, defaults in parentheses.
 
 =item B<ip>    used to handle IPs (C<\&handler_yank>)
 
+=item B<checksum> used to handle checksums (C<\&handler_yank>)
+
 =back
 
 Example:
@@ -1297,6 +1319,7 @@ my %handler = (
     paste => \&handler_paste,
     url   => \&handler_url,
     ip    => \&handler_yank,
+    checksum => \&handler_yank,
 );
 
 my %state = (
@@ -1319,6 +1342,7 @@ Create a new Curses attribute with the given fore- and background color.
     mapping_mode_path()
     mapping_mode_url()
     mapping_mode_ip()
+    mapping_mode_checksum()
     mapping_mode_search()
 
     mapping_paste()
@@ -1398,6 +1422,7 @@ package Fcscs {
     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(@_); }