]> ruderich.org/simon Gitweb - fcscs/fcscs.git/blobdiff - bin/fcscs
Move Screen::die to the end of the class
[fcscs/fcscs.git] / bin / fcscs
index 582d194c7a47fd86011650f79eef9dd8046512c8..f7752209145c213fcc9000b27ebe7ed2fd93dffb 100755 (executable)
--- 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', @_);
 }