X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_sbin%2Fgrml-quickconfig;h=2743418033fae7a30699d112278c600a822979e7;hb=aff26085653cc5ef38ac8b7bee649ff124c7f968;hp=354e3cf7594a1823446050f5db25754d182b4f46;hpb=a40272445f7ab16b264c87f7393bfb76dbcad9df;p=grml-scripts.git diff --git a/usr_sbin/grml-quickconfig b/usr_sbin/grml-quickconfig index 354e3cf..2743418 100755 --- a/usr_sbin/grml-quickconfig +++ b/usr_sbin/grml-quickconfig @@ -1,22 +1,25 @@ -#!/usr/bin/perl +#!/usr/bin/perl # Filename: grml-quickconfig # Purpose: get fast access to some basic grml-scripts # Authors: Michael Schierl , Alexander Wirt # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Sam Mär 17 12:42:50 CET 2007 [mika] +# Latest change: Fre Jun 22 23:05:01 CEST 2007 [mika] ################################################################################ # menu with quick config options +use Term::ReadKey; +use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); + # enable alternate charset support (needed for screen) print "\e(B\e)0"; -open (my $fh, '/proc/cmdline'); -my $cmdline = <$fh>; -close($fh); +open (my $fh, '/proc/cmdline'); +my $cmdline = <$fh>; +close($fh); -my $color = 1 unless $cmdline =~ /nocolor/; +my $color = 1 unless $cmdline =~ /nocolor/; # variables for nice display if ($color) { @@ -33,55 +36,69 @@ $HLINE=$B."x".$N; # A single horizontal line drawing character # menu options %menu_commands = ( - d => 'grml-lang de', - a => 'grml-lang at', - c => 'grml-lang ch', - u => 'grml-lang us', - n => 'grml-network', - e => 'netcardconfig', - i => 'grml-info', - h => 'grml2hd', - m => 'pdmenu -c', - q => 'exit', + d => 'grml-lang de', + a => 'grml-lang at', + c => 'grml-lang ch', + u => 'grml-lang us', + n => 'grml-network', + e => 'netcardconfig', + i => 'grml-info', + h => 'grml2hd', + m => 'pdmenu -c', + q => 'exit', # x and Return are handled manually ); # window managers %windowmanagers = ( - d => 'dwm', - e => 'evilwm', - f => 'fluxbox', - i => 'ion3', - j => 'jwm', - k => 'pekwm', - p => 'pwm3', - t => 'twm', - v => 'fvwm', - 2 => 'fvwm2', - c => 'fvwm-crystal', - r => 'ratpoison', - 9 => 'w9wm', - w => 'windowlab', - m => 'wmi', - i => 'wmii', - n => 'wm-ng', + d => 'dwm', + e => 'evilwm', + f => 'fluxbox', + v => 'fvwm', + 2 => 'fvwm2', + c => 'fvwm-crystal', + j => 'jwm', + o => 'openbox', + p => 'pekwm', + 3 => 'pwm3', + r => 'ratpoison', + t => 'twm', + 9 => 'w9wm', + w => 'windowlab', + i => 'wmii', + n => 'wm-ng', ); +sub getKey +{ + print "Press a key: ".$M; + ReadMode 4; # Turn off controls keys + + # HACK: this is necessary because startx/Xorg sets the console where it outputs + # to non-blocking mode + $flags = fcntl(STDIN, F_GETFL, 0) or die "Can't get flags for STDIN: $!\n"; + $flags = fcntl(STDIN, F_SETFL, $flags & ~O_NONBLOCK) or die "Can't set flags for STDIN: $!\n"; + + while (not defined ($x = ReadKey(0))) {} + ReadMode 0; # Reset tty mode before exiting + return $x; +} + # main loop while(1) { # disable input buffering, see # man perlfunc | less '+/ getc' # for details -system "stty", '-icanon', 'eol', "\001"; + system "stty", '-icanon', 'eol', "\001"; # main loop -$command=""; -while($command eq "") { -print <<"EOF"; + $command=""; + while($command eq "") { + print <<"EOF"; ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N} - $HLINE Welcome to ${M}grml-quickconfig${M} $HLINE + $HLINE Welcome to ${M}grml-quickconfig${M} $HLINE $HLINE Press a highlighted key to perform an action, or press $HLINE $HLINE ${W}Return${N} or ${W}q${N} to go back to the shell. $HLINE ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} @@ -96,48 +113,51 @@ print <<"EOF"; ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N} EOF -print "Press a key: ".$M; -$x = getc; -print $N.$/.$/; -if (defined($menu_commands{$x})) { - $command = $menu_commands{$x}; -} elsif ($x eq "\n") { - $command= 'exit'; -} elsif ($x eq "x") { - print <<"EOF"; - - ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N} - $HLINE Select a window manager (unsorted list): $HLINE - $HLINE Press any other key to return to the main menu. $HLINE - ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} - $HLINE ${W}f${N}luxbox ${W}d${N}wm ${W}e${N}vilwm ion${W}3${N} ${W}j${N}wm pe${W}k${N}wm ${W}p${N}wm3 ${W}t${N}wm ${W}r${N}atpoison $HLINE - $HLINE f${W}v${N}wm fvwm${W}2${N} fvwm-${W}c${N}rystal w${W}9${N}wm ${W}w${N}indowlab w${W}m${N}i wm${W}i${N}i wm-${W}n${N}g $HLINE - ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N} + $x = getKey(); + + print $N.$/.$/; + if (defined($menu_commands{$x})) { + $command = $menu_commands{$x}; + } elsif ($x eq "\n" || $x eq ' ') { + $command= 'exit'; + } elsif ($x eq "x") { + print <<"EOF"; + + ${B}lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk${N} + $HLINE Select a window manager (unsorted list): $HLINE + $HLINE Press any other key to return to the main menu. $HLINE + ${B}tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu${N} + $HLINE ${W}d${N}wm ${W}e${N}vilwm ${W}f${N}luxbox f${W}v${N}wm fvwm${W}2${N} fvwm-${W}c${N}rystal ${W}d${N}wm ${N}$HLINE + $HLINE ${W}o${N}penbox pe${W}k${N}wm ${W}p${N}wm3 ${W}t${N}wm ${W}r${N}atpoison w${W}9${N}wm ${W}w${N}indowlab ${N}$HLINE + $HLINE wm${W}i${N}i wmi-${W}n${N}g ${N}$HLINE + ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N} EOF - print "Press a key: ".$M; - $x = getc; - print $N.$/.$/; - if (defined($windowmanagers{$x})) { - $command = "su - grml -c 'grml-x ".$windowmanagers{$x}."'"; - } else { - print "Unknown key.\n"; - } -} else { - print "Unknown key.\n"; -} -} + $x = getKey(); + + print $N.$/.$/; + if (defined($windowmanagers{$x})) { + $command = "su - grml -c 'grml-x ".$windowmanagers{$x}."'"; + } else { + print "Unknown key, not bound to a windowmanager.\n"; + print "Returning to main menu.\n"; + } + } else { + print "Unknown key.\n"; + } + } # reenable input buffering -system "stty", 'icanon', 'eol', '^@'; - -if ($command eq "exit") { - last; -} -print $W . "Running command: " . $M . $command . $N . $/; -system($command); -print $/; + system "stty", 'icanon', 'eol', '^@'; + + if ($command eq "exit") { + last; + } + print $W . "Running command: " . $M . $command . $N . $/; + system($command); + print $/; } print "Happy hacking!\n"; ## END OF FILE ################################################################# +# vim: ai expandtab ft=perl