Update changelog
[grml-scripts.git] / usr_sbin / grml-quickconfig
index ea1395c..7668e7f 100755 (executable)
@@ -4,12 +4,13 @@
 # Authors:       Michael Schierl <schierlm-public@gmx.de>, Alexander Wirt <formorer@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Don Apr 12 13:47:04 CEST 2007 [mika]
+# Latest change: Mon Dez 17 22:31:30 CET 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";
@@ -56,10 +57,9 @@ $HLINE=$B."x".$N;      # A single horizontal line drawing character
     v => 'fvwm',
     2 => 'fvwm2',
     c => 'fvwm-crystal',
-    i => 'ion3',
-    j => 'jwm',
-    p => 'pekwm',
-    3 => 'pwm3',
+    o => 'openbox',
+    k => 'pekwm',
+    p => 'pwm3',
     r => 'ratpoison',
     t => 'twm',
     9 => 'w9wm',
@@ -68,14 +68,23 @@ $HLINE=$B."x".$N;      # A single horizontal line drawing character
     n => 'wm-ng',
 );
 
-# main loop
-while(1) {
+sub getKey
+{
+  print "Press a key: ".$M;
+  ReadMode 4; # Turn off controls keys
 
-# disable input buffering, see
-# man perlfunc | less '+/   getc'
-# for details
-    system "stty", '-icanon', 'eol', "\001";
+  # 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) {
 # main loop
     $command="";
     while($command eq "") {
@@ -97,42 +106,34 @@ while(1) {
    ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N}
 
 EOF
-  print "Press a key: ".$M;
-  ReadMode 4; # Turn off controls keys
-  while (not defined ($x = ReadKey(-1))) {
-      # No key yet
-  }
-  ReadMode 0; # Reset tty mode before exiting
+  $x = getKey();
 
   print $N.$/.$/;
   if (defined($menu_commands{$x})) {
       $command = $menu_commands{$x};
-  } elsif ($x eq "\n") {
+  } elsif ($x eq "\n" || $x eq ' ') {
       $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}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             $HLINE
-   $HLINE w${W}9${N}wm ${W}w${N}indowlab wm${W}i${N}i wmi-${W}n${N}g                             $HLINE
-   ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N}
+   ${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}             ${N}$HLINE
+   $HLINE ${W}o${N}penbox pe${W}k${N}wm ${W}p${N}wm3 ${W}r${N}atpoison ${W}t${N}wm w${W}9${N}wm ${W}w${N}indowlab         ${N}$HLINE
+   $HLINE wm${W}i${N}i wm-${W}n${N}g                                              ${N}$HLINE
+   ${B}mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj${N}
 
 EOF
-      print "Press a key: ".$M;
-      ReadMode 4; # Turn off controls keys
-      while (not defined ($x = ReadKey(-1))) {
-    # No key yet
-      }
-      ReadMode 0; # Reset tty mode before exiting
+      $x = getKey();
 
       print $N.$/.$/;
       if (defined($windowmanagers{$x})) {
     $command = "su - grml -c 'grml-x ".$windowmanagers{$x}."'";
       } else {
-    print "Unknown key.\n";
+    print "Unknown key, not bound to a windowmanager.\n";
+    print "Returning to main menu.\n";
       }
   } else {
       print "Unknown key.\n";