defined locked_by or watch_and_notify 0;
};
+$OP{"next-config"} = sub {
+ (my $dir = $C{config}) =~ s:/[^/]*$::;
+ my (@conf, $curr, $conf, $min);
+
+ if (-l $C{config} && (my $t = readlink $C{config}) =~ /^passwd\.(.*)$/)
+ { $curr = $1; }
+
+ opendir my $dh, +$dir;
+ FILE: while (my $f = readdir $dh)
+ { push @conf, $1 if $f =~ /^passwd\.(.*[^~])$/; }
+
+ for (my $i = 0; $i < @conf; $i++) {
+ $min = $conf[$i] if (!defined $min) || $conf[$i] lt $min;
+ $conf = $conf[$i]
+ if ((!defined $curr) || $curr lt $conf[$i]) &&
+ ((!defined $conf) || $conf[$i] lt $conf);
+ }
+ $conf = $min unless defined $conf;
+
+ try_unlink "$dir/passwd.new";
+ symlink "passwd.$conf", "$dir/passwd.new";
+ rename "$dir/passwd.new", "$dir/passwd";
+ notify "DisOrder configuration", "Switched to `$conf'";
+};
+
###--------------------------------------------------------------------------
### Main program.
KeyDown C5 x wop * close
KeyDown C5 numbersign exec xinitcmd pavucontrol
KeyDown C5 apostrophe exec xinitcmd disobedience
+KeyDown C5 semicolon exec disorder-notify next-config
KeyDown C5 plus exec disorder-notify volume-up
KeyDown C5 minus exec disorder-notify volume-down
KeyDown C5 period exec disorder-notify enable/disable