summaryrefslogtreecommitdiff
path: root/scripts/checkkeys.pl
blob: 54978c52f47282c1035d2b8a95d9776be1ebfd45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/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";
	}
}