2009-08-26 9 views
2

Wie erstelle ich ein Dialog-Widget für die Linux-Konsole (nicht X, sondern die "Terminal" -Konsole), die neben einem Widget, das eine Menüliste oder ein Textfeld sein könnte, einen Countdown in Sekunden anzeigt?Erstellen Sie ein Countdown-Dialogfeld für ein Linux-Terminal?

Idealerweise könnte dies ein eigenständiges Programm sein, wie ein Dialog, der Parameter zur Steuerung seines Verhaltens enthält.

Wenn der Countdown 0 erreicht, wird der ausgewählte Wert des Widgets zurückgegeben. Es könnte einen Standardwert geben, falls kein Mensch anwesend ist (oder der Mensch den Standard bevorzugt). Die Boot-Loader wie Grob und Lilo können das schon, so ziemlich. Ich habe die Dialog-Manpage durchgesehen und konnte diesen Funktionsumfang nicht finden.

bisher versucht:

dialog --timeout 30 --menu 'Menu Title' 20 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C' Nähe ist, aber es die 30-Sekunden-Timer tickt nach unten nicht zeigt.

dialog --pause 'Hurry!' 10 60 30 -- zeigt eine Nachricht und OK/Abbrechen mit dem Timer läuft aber nur Interstitial und nicht für Benutzereingaben.

Es ist möglich, mehrere Zeilen wie diese zu kombinieren:

dialog --menu 'Menu Title' 10 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C' --pause 'Hurry up' 10 60 30 

aber das zeigt die Widgets sequentiell statt kombiniert auf einer Seite. Hier, nachdem das Menü ohne Timer beantwortet wurde, erhalten Sie eine Nachricht mit einem Timer.

Antwort

1

Ich glaube, Ncurses ist was du suchst.

+0

Vielen Dank für Ihre Antwort. Um es zu kodieren, würde ich zustimmen. Ich hatte gehofft, jemand hätte es schon getan. – Paul

2

Ich schlage vor, Sie lesen die dialog man-Seite. Oh, hast du schon, sagst du? Und was ist los mit:

--pause Texthöhe Breite Sekunden

Eine Pause Feld zeigt einen Meter entlang der Unterseite der Box. Das Messgerät zeigt an, wie viele Sekunden bis zum Ende der Pause verbleiben. Die Pause wird beendet, wenn die Zeitüberschreitung erreicht ist oder der Benutzer die OK-Taste drückt (Status OK) oder der Benutzer die CANCEL-Taste oder Esc-Taste drückt.

+0

Danke, dass du mich darauf aufmerksam gemacht hast. Pause ist jedoch ein Widget, das eine Nachricht, einen Countdown und OK/Abbrechen anzeigt. Es ist kein Attribut oder Modifikator für andere Widgets. Es wird also kein Menü mit einem Countdown implementiert. --timeout30 fügt einem Menü ein 30-sekündiges Timeout hinzu, aber es wird kein Fortschritt angezeigt. – Paul

3

Um bei der Verwendung von Dialog zu bleiben, habe ich ein ähnliches Problem gelöst, indem ich dies in zwei Dialogfelder aufgeteilt habe. Zunächst erscheint ein Dialogfeld mit dem Standardwert (und optional alternativen Optionen), der auf dem Bildschirm angezeigt wird, und dieser verfügt über einen Countdown-Timer. Der Benutzer kann esc drücken oder Abbrechen drücken, um die Option zu ändern, oder der Countdown erreicht 0 und das Programm wird mit den Standardeinstellungen fortgesetzt. Wenn der Benutzer die Escape-Taste drückt, erscheint ein zweiter Dialog, in dem die Optionen bearbeitet werden können. Ich wollte keine weitere Software zu unserem deb-live/clonezilla Custom OS Build hinzufügen und musste daher einen Weg mit dem Dialog finden.

dialog --title Some options to choose from, showing default --pause "\n\n Do you accept these options?: \n ${options_in_nice_format_for_display}" 20 60 5 
[ $? -ne 0 ] && EDIT_IP=true || EDIT_IP=false 

if ${EDIT_IP}; then 
    dialog --editbox ${MY_OPTIONS_FILE} 20 60 2> ${EDITED_OPTIONS_FILE} 
fi 

Für eine noch bessere Lösung (die ich verwendet habe, wollte aber nicht überflüssig Code hier hinzufügen) können Sie eine while-Schleife auf dem Booleschen konditionierten hinzufügen und erlauben Wiederholungen der Änderungen, bis der Benutzer zufrieden ist.

Verwandte Themen