#!/usr/bin/perl -l =head1 DESCRIPTION Naive program for B selection: (over)writes one's F<`~/.xinitrc'>. Data for the program is appended literally at the end of it, after the __END__ token and has the form C<< :: >> where is the key to be selected by the user, preferably consisting of one or at most a few chars, is the name of the Window Manager and is the command to be put in F<`~/.xinitrc'>. is case-insensitive and shown uppercase. In the unlikely event that any item contains literal C<:>'s, any longer string of colons can be used as a separator instead, like thus: C Lines with no colons are silently ignored. No additional checking is performed. =cut use strict; use warnings; my ($q,%wm,%saw)='Q'; # Quit Key while () { chomp; my $sep; $sep |= $_ for /:+/g; $sep or next; my ($k,$n,$cmd)=split /$sep/; $k=uc $k; (warn "$0: Cannot use [$k] as a key for `$n'"), next if $k eq $q; (warn "$0: Duplicate key [$k]. Skipping `$n'"), next if $saw{$k}++; $wm{$k}=[$n,$cmd]; } { print "Choose Window Manager:"; print "[$_] $wm{$_}[0]" for sort keys %wm; print "[$q] "; chomp(my $in=uc ); last if $in eq $q; exists $wm{$in} or (warn "Invalid choice: [$in]\n"), redo; open my $fh, '>', "$ENV{HOME}/.xinitrc" or die "Can't write to ~/.xinitrc: $!\n"; print $fh $wm{$in}[1]; print <<"EOT"; `~/.xinitrc' successfully updated for use with $wm{$in}[0]! Do you want to start X now? [y/Y] to do so, anything else to quit. EOT exec 'startx' if uc eq "Y\n"; } __END__ G:Gnome:exec gnome-session K:KDE:exec startkde B:Blackbox:exec blackbox E:Enlightenment:exec enlightenment F:FVWM:exec fvwm I:IceWM:exec icewm-session S:Sawfish:exec sawfish W:Window Maker:exec wmaker A:Waimea:exec waimea X:XFce3:exec xfwm X4:XFce4:exec startxfce4 U:Fluxbox:exec fluxbox L:evilwm:exec evilwm