X-Git-Url: https://ruderich.org/simon/gitweb/?p=fcscs%2Ffcscs.git;a=blobdiff_plain;f=bin%2Ffcscs;h=f7752209145c213fcc9000b27ebe7ed2fd93dffb;hp=0675def809dd771be3f7e1aee0eebb8e05bc95c8;hb=59ecf9b92140258c9ec311f35aa5ea2440b68c1b;hpb=dd84992d32a47e07165fdb64e420ed00e37cd552 diff --git a/bin/fcscs b/bin/fcscs index 0675def..f775220 100755 --- a/bin/fcscs +++ b/bin/fcscs @@ -323,6 +323,39 @@ package Screen { return; } + + sub prompt { + my ($self, %settings) = @_; + + foreach (keys %settings) { + die if not exists $self->{prompt}{$_}; + $self->{prompt}{$_} = $settings{$_}; + } + return; + } + + + sub debug { + my ($self, $module, @args) = @_; + + return if not $self->{debug}; + + state $fh; # only open the file once per run + if (not defined $fh) { + # Ignore errors if the directory doesn't exist. + if (not open $fh, '>', "$ENV{HOME}/.config/fcscs/log") { + $fh = undef; # a failed open still writes a value to $fh + return; + } + $fh->autoflush(1); + } + + foreach (@args) { + $_ = $self->encode($_); + } + say $fh "$module: @args" or die $!; + return; + } sub die { my ($self, @args) = @_; @@ -355,38 +388,6 @@ package Screen { $self->deinit; exit 1; } - sub debug { - my ($self, $module, @args) = @_; - - return if not $self->{debug}; - - state $fh; # only open the file once per run - if (not defined $fh) { - # Ignore errors if the directory doesn't exist. - if (not open $fh, '>', "$ENV{HOME}/.config/fcscs/log") { - $fh = undef; # a failed open still writes a value to $fh - return; - } - $fh->autoflush(1); - } - - foreach (@args) { - $_ = $self->encode($_); - } - say $fh "$module: @args" or CORE::die $!; - return; - } - - - sub prompt { - my ($self, %settings) = @_; - - foreach (keys %settings) { - CORE::die if not exists $self->{prompt}{$_}; - $self->{prompt}{$_} = $settings{$_}; - } - return; - } # Wrapper for Curses. sub width { return $Curses::COLS; } @@ -663,7 +664,7 @@ sub extend_match { } 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 }; @@ -682,54 +683,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', @_); } @@ -753,29 +743,23 @@ The following normal modes are available: =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}{path}, + 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 +775,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)