Skip to content
Snippets Groups Projects
checkkeys.pl 1.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env perl
    ## Copyright © 2011 by Daniel Friesel <derf@finalrewind.org>
    ## License: WTFPL:
    ##   0. You just DO WHAT THE FUCK YOU WANT TO.
    use strict;
    use warnings;
    use 5.010;
    
    use autodie;
    
    my $fh;
    my $keys;
    
    my $re_struct = qr{
    	struct \s __fehkey \s (?<action> [^;]+ ) ;
    }x;
    
    my $re_set = qr{
    	feh_set_kb \( \& keys \. (?<action> [^ ,]+ ) \s* ,
    	\s* (?<mod1> \d+ ) ,
    	\s* (?<key1> [^ ,]+ ) \s* ,
    	\s* (?<mod2> \d+ ) ,
    	\s* (?<key2> [^ ,]+ ) \s* ,
    	\s* (?<mod3> \d+ ) ,
    	\s* (?<key3> [^ ,]+ ) \s* \) ;
    }x;
    
    my $re_parse_action = qr{
    	if \s \( \! strcmp \( action , \s " (?<action> [^"]+ ) " \) \)
    }x;
    
    my $re_parse_conf = qr{
    	cur_kb \s = \s \& keys \. (?<str> [^;]+ ) ;
    }x;
    
    my $re_man = qr{
    	^ \. It \s (?<keys> .+ ) \s Bq \s (?<action> .+ ) $
    }x;
    
    my $re_skip = qr{
    	^ ( action | orient ) _
    }x;
    
    open($fh, '<', 'src/options.h');
    while (my $line = <$fh>) {
    	if ($line =~ $re_struct) {
    		$keys->{ $+{action} }->{struct} = 1;
    	}
    }
    close($fh);
    
    open($fh, '<', 'src/keyevents.c');
    while (my $line = <$fh>) {
    	if ($line =~ $re_set) {
    		$keys->{ $+{action} }->{default}
    			= [@+{'mod1', 'key1', 'mod2', 'key2', 'mod3', 'key3'}];
    	}
    	elsif ($line =~ $re_parse_action) {
    		$keys->{ $+{action} }->{parse} = 1;
    	}
    }
    close($fh);
    
    open($fh, '<', 'man/feh.pre');
    while (my $line = <$fh>) {
    	if ($line =~ $re_man) {
    		$keys->{ $+{action} }->{man} = 1;
    	}
    }
    close($fh);
    
    for my $action (sort keys %{$keys}) {
    	my $k = $keys->{$action};
    
    	if ($action =~ $re_skip) {
    		next;
    	}
    
    	if (not defined $k->{struct}) {
    		say "$action missing in struct";
    	}
    	if (not defined $k->{default}) {
    		say "$action missing in defaults";
    	}
    	if (not defined $k->{parse}) {
    		say "$action missing in parser";
    	}
    	if (not defined $k->{man}) {
    		say "$action missing in manual";
    	}
    }