]> ruderich.org/simon Gitweb - fcscs/fcscs.git/blobdiff - bin/fcscs
use helper function to reduce duplication in mappings
[fcscs/fcscs.git] / bin / fcscs
index bbf97940452b7b6952b919e317d76307a6965201..e0c8cb1a05d42eb6e38a678311972626c6b1c086 100755 (executable)
--- a/bin/fcscs
+++ b/bin/fcscs
@@ -682,54 +682,43 @@ sub extend_match {
 }
 
 
-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', @_);
 }
 
 
@@ -742,40 +731,34 @@ The following normal modes are available:
 
 =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) = @_;
@@ -791,16 +774,7 @@ sub mapping_mode_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},
-    };
+    return mapping_mode_helper('checksum', 'checksum select', @_);
 }
 
 =head2 SEARCH MODE (AND EXTEND MODE)
@@ -1206,7 +1180,7 @@ Defaults in parentheses.
 
 =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>)
 
@@ -1286,13 +1260,15 @@ The following handlers are available, defaults in parentheses.
 
 =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>)
 
@@ -1315,10 +1291,11 @@ Example:
 
 =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,
 );
 
@@ -1364,7 +1341,8 @@ Used as handler to yank, paste selection or open URL in browser.
     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:
 
@@ -1394,7 +1372,7 @@ Example:
         }
 
         return $result;
-    }
+    };
     # Also update initial mode to use our new "URL mode".
     $config{setting}{initial_mode} = $config{mapping}{mode}{u};
 
@@ -1408,8 +1386,6 @@ Example:
         });
     };
 
-
-
 =cut
 
 # All variables and functions which are usable by ~/.fcscsrc.