Shellexec-Plugin Version 2.30

Das Plugin dient zum Aufrumen des Mens der blauen Taste. Viele dort auswhl-
bare Scripts oder Binarys werden selten bentigt und verringern nur die ber-
sichtlichkeit des Mens. Statt dieser vielen Plugins wird nun das shellexec-
plugin in den Ordner /lib/tuxbox/plugins kopiert und die anderen Plugins kn-
nen dort gelscht werden. Die von ihnen aufgerufenen Scripte werden nun in die
shellexec.conf eingetragen, und stehen nun als eine Art Untermen unter dem
in der shellexec.cfg eingetragenen Namen zur Verfgung. 

Auch wer selber Plugins als Script schreibt, kann dieses Plugin als Ersatz fr
das ungeliebte LCD-Men verwenden. 
Wenn man nicht direkt ein weiteres Script vom Men aufrufen lassen will, kann 
man sich natrlich auch den vom Benutzer ausgewhlten Menpunkt in eine Datei 
schreiben lassen: 

  fr Menpunkt 1 z.B. die Aktion "echo 1 > /tmp/menu.res" eintragen

und diese Datei anschlieend mit seinem Script auswerten. Somit kann man
seine eigenen Plugins mit einem komfortableren Men ausstatten. Die Dateien
shellexec.so und shellexec.cfg werden in diesem Fall nicht bentigt, da der Auf-
ruf des Plugins ja vom Script aus erfolgt. In diesem Fall mssen jedoch in der 
.cfg des aufrufenden Scripts die Eintrge "needfb=" und "needrc=" auf "1" ge-
setzt werden, damit whrend der Aktivitt des Mens nicht auch Neutrino auf
die Tasten der Fernbedienung reagiert.

Um auch mehrere Konfigurationsmens gleichzeitig auf der Box halten zu knnen,
kann die shellexec sowohl aus der shellexec.so als auch von der Kommandozeile
aus mit einem Parameter fr die zu verwendende Konfigurationsdatei aufgerufen 
werden. Der abweichende Pfad zur Config-Datei kann in der shellexec.so mit ei-
nem Hex-Editor ab Adresse 1E35H eingetragen werden. Hat man zum Beispiel mit 
seinem Script eine spezielle Konfiguration als /tmp/myconfig.cfg abgespeichert, 
kann bei einem Aufruf aus einem Script heraus folgender Aufruf verwendet werden:

  shellexec /tmp/myconfig.conf
  
Wird kein Kommandozeilenparameter angegeben, verwendet das Plugin die Datei 
/var/tuxbox/config/shellexec.conf.


Installation:

Die Verzeichnis-Struktur gibt den Ort der Dateien im Image eigentlich schon vor,
also shellexec.cfg und shellexec.so (Rechte auf 755) nach /lib/tuxbox/plugins/.
shellexec nach /var/plugins und shellexec.conf nach /var/tuxbox/config. shellexec 
braucht die Rechte 755.
Wer die beiliegende shellexec.conf testen mchte, bentigt dazu noch das Script
"operations" in /var/plugins/, ebenfalls mit den Rechten 755.

In der shellexec.cfg kann man eintragen, unter welchem Namen das Plugin in der
Pluginliste der blauen Taste angezeigt werden soll. Umlaute sind hier nicht zu-
lssig (liegt aber am Neutrino).

Die Eintrge in der shellexec.conf legen fest, welche Aktionen ausgefhrt werden 
sollen. In dieser Datei sind Umlaute zulssig.

Die Hhe des Menfensters wir mit dem Eintrag:

  HIGHT=
  
festgelegt. Kleinster Wert und auch Defaultwert ist aus Kompatibilittsgrnden
zu vorherigen Versionen des FlexMens eine Hhe von 380 Pixeln. Der Maximalwert
ergibt sich aus der Hhe des in den Videoeinstellungen festgelegten Bildbereiches.

Auch die Breite des Menfensters, welche durch den Eintrag:

  WIDTH=
  
festgelegt wird, betrgt minimal und defaultmig 400 Pixel und maximal die in
den Videoeinstellungen festgelegte Fensterbreite.

Fr die Auswahl des Textfonts ist der Eintrag:

  FONT=/share/fonts/micron_bold.ttf
  
zustndig. Hier kann der gewnschte im Image verfgbare Font eingetragen werden.
Wird dieser Eintrag weggelassen, wird standardmig der Font "pakenham.ttf" ver-
wendet, welcher in jedem Image vorhanden ist.

Um bei einem whlbaren Font die Textgre anzupassen, ist der Eintrag:

  FONTSIZE=19
  
entsprechend zu modifizieren. Dieser Wert hngt stark vom verwendeten Font ab.
Wurde der Eintrag "FONT=" bereits weggelassen, sollte auch dieser Eintrag nicht
verwendet werden, damit das Plugin den zum "pakenham.ttf" passenden Wert von 30
verwendet.

Der Eintrag

  PAGING=1
  
legt fest, da der Auswahlbalken beim Bewegen ber die Hoch-/Runter-Tasten bei 
Erreichen des Seitenendes auf die nchste Seite berspringt. Mit dem Parameter 
"0" bewegt sich der Balken nur innerhalb der aktuellen Seite, springt also bei
Erreichen des Seitenendes wieder an den Seitenanfang und umgekehrt.

Um die Anzahl der Zeilen festzulegen, welche pro Menseite angezeigt werden sol-
len, kann der Parameter

  LINESPP=
  
verwendet werden. Standardmig wird von 10 Zeilen je Seite ausgegangen. Sollen
mehr Zeilen dargestellt werden, ist auch die Fontgre entsprechend zu verkleinern,
damit sich die Zeilen nicht berlappen.


Um den Aufbau komplexerer Mens zu beschleunigen, kann das Plugin nach seinem Start
den sectionsd von Neutrino anhalten oder auch komplett beenden. Die nun freigewordene 
Prozessorperformance steht nun dem Plugin zur Verfgung. Beim Beenden wird der sec-
tionsd natrlich wieder gestartet. Ob der sectionsd whrend der Laufzeit beendet 
werden soll, kann mit einer "1" fr Beenden und einer "2" fr das Anhalten hinter dem 
Parameter

  KILLEPG=
  
festgelegt werden. Der Nachteil des Beendens des sections gegenber dem bloen Anhalten
liegt darin, da nach dem Beenden des FlexMens der sectionsd erst wieder alle Daten
neu sammeln mu. Daher ist das Anhalten mit "2" die bessere Wahl.


Da die Uhr systembedingt beim Aufruf von Plugins nachgeht, kann das FlexMen beim Be-
enden die Uhrzeit wieder korrigieren, sofern eine Internetverbindung mglich ist. Dazu
wird standardmig der Server von time.fu-berlin.de verwendet. Dieses Verhalten kann
mit dem Parameter

  TIMESERVICE=
  
gesteuert werden. Ist dieser Eintrag gar nicht vorhanden, wird, wie gesagt, der Berliner
Zeitserver verwendet. Soll ein anderer Server verwendet werden, ist er hinter dem "="
einzutragen. Soll gar keine Zeitsynchronisation verwendet werden, ist hinter dem "=" ent-
weder "NONE" oder gar nichts einzutragen (nur Zeilenumbruch).

Ein Men (auch das Hauptmen) wird mit dem Eintrag:

  MENU=Menname

eingeleitet, wobei fr "Menname" einzutragen ist, wie das Men auf dem Bildschirm
und im LCD-Display genannt werden soll. 
Sollen Mens abngig von vorhandenen Flag-Dateien (z.B. /tmp/.camd3) angezeigt werden, 
ist das ber die folgenden Schlsselwrter mglich:

  MENUDON=Menname,Dateiname

wird nur als Men angezeigt, wenn die Datei "Dateiname" vorhanden ist. Hingegen wird

  MENUDOFF=Menname,Dateiname
  
nur angezeigt, wenn die Datei "Dateiname" nicht vorhanden ist. Somit kann das Men
abhngig von Systemzustnden aufgebaut werden. Ein Beispiel dazu ist in der beilie-
genden shellexec.conf zu finden.

Sollen Mens abngig von Ergebnissen von Shell-Kommandos angezeigt werden, ist das 
ber die folgenden Schlsselwrter mglich:

  MENUSON=Menname,Shell-Kommando

wird nur als Men angezeigt, wenn das eingetragene Shell-Kommando Erfolg (also 0) rck-
meldet

  MENUSOFF=Menname,Shell-Kommando
  
wenn das eingetragene Shell-Kommando Fehler (also -1) rckmeldet. Somit kann das Men
z.B. mit dem "grep"-Kommando abhngig vom Inhalt von Dateien aufgebaut werden. Ein Bei-
spiel dazu ist in der beiliegenden shellexec.conf zu finden.

Jede Menebene wird immer mit dem Schlsselwort

  ENDMENU[=Aktion beim Schliessen des Untermens[,Bedingung fr Aktionsausfhrung]]

beendet. Optional kann angegeben werden, ob beim Schlieen des jeweiligen Untermens 
noch eine Aktion (Shell-Kommando) ausgefhrt werden soll. Wird keine Aktion angegeben, 
wird das Untermen einfach geschlossen. Eine angegebene Aktion ohne Bedingung wird bei 
jedem Schlieen des Untermens ausgefhrt. Optional kann noch ein Shell-Kommando als
Bedingung angegeben werden. Dann wird die Aktion nur ausgefhrt, wenn das Ergebnis des
als Bedingung angegebenen Shell-Kommandos "0" ist. Die Anwendung dieser Funktion ist in
der "shellexec.conf" in Verbindung mit der "operations" demonstriert. So kann jetzt zum 
Beispiel die Uhrzeit ber das Internet bei jedem Verlassen des Flexmmens automatisch 
korrigiert werden. 
  
  ENDMENU=/var/plugins/tuxwet/swisstime
  
bewirkt, da die Uhrzeit automatisch gestellt wird, wenn das entsprechende Untermen 
verlassen wird.

Nun folgen die Eintrge der Aktionen in der Form:

  ACTION=Anzeigename im Men,auszufhrende Aktion[,Message]

Die auszufhrende Aktion kann ein direktes Shell-Kommando sein oder der Aufruf eines 
Scriptes oder einer Binary. Die aufzurufenden Scripte mssen natrlich die Rechte 755 haben.

Sollen Aktionseintrge abhngig von vorhandenen Flag-Dateien (z.B. /tmp/.wol) ange-
zeigt werden, ist das ber die folgenden Schlsselwrter mglich:

  DEPENDON=Anzeigename im Men,[auszufhrende Aktion],Dateiname[,Message]

wird nur im Men angezeigt, wenn die Datei "Dateiname" vorhanden ist. Hingegen wird

  DEPENDOFF=Anzeigename im Men,[auszufhrende Aktion],Dateiname[,Message]
  
nur angezeigt, wenn die Datei "Dateiname" nicht vorhanden ist. Somit kann das Men
abhngig von Systemzustnden aufgebaut werden. Ein Beispiel dazu ist in der beilie-
genden shellexec.conf zu finden.

Sollem Aktionseintrge abngig von Ergebnissen von Shell-Kommandos angezeigt werden,
ist das ber die folgenden Schlsselwrter mglich:

  SHELLRESON=Anzeigename im Men,[auszufhrende Aktion],Shell-Kommando[,Message]

wird nur im Men angezeigt, wenn das eingetragene Shell-Kommando Erfolg (also 0) rck-
meldet

  SHELLRESOFF=Anzeigename im Men,[auszufhrende Aktion],Shell-Kommando[,Message]
  
wenn das eingetragene Shell-Kommando Fehler (also -1) rckmeldet. Somit kann das Men
z.B. mit dem "grep"-Kommando abhngig vom Inhalt von Dateien aufgebaut werden. Ein Bei-
spiel dazu ist in der beiliegenden shellexec.conf zu finden.

Eintrge in eckigen Klammern knnen bei Bedarf entfallen. Wird [auszufhrende Aktion]
nicht eingetragen, wird der Eintrag zwar angezeigt, wenn die Anzeigebedingungen erfllt
sind, dies jedoch in der Farbe des Kommentartextes und der Eintrag ist auch nicht aus-
whlbar. Ein solcher Eintrag kann zum Beispiel als systemabhngige Informationszeile
verwendet werden.
Der Zusatz ",Message" wird bei Aktionseintrgen verwendet, welche nach Ausfhrung zum
Men zurckkehren. Normalerweise wird whrend der Ausfhrung der Aktion ein Meldungs-
fenster mit der Nachricht "Bitte warten" angezeigt. Statt dessen kann der als "Message"
eingegebene Text in diesem Fenster angezeigt werden. Diesen Text aber bitte nicht zu
lang whlen, es steht nur eine Zeile fr die Darstellung zu Verfgung.

Sollen die Eintrge, welche normalerweise nicht angezeigt werden wrden, zwar angezeigt
werden aber nicht auswhlbar sein (Darstellung erfolgt in der Farbe der Info-Eintrge),
so ist fr den entsprechenden Eintrag ein "+" vor den Anzeigenamen zu schreiben. Das
kann angewendet werden, um die Seitenaufteilung eines Mens immer gleich zu halten.
Soll dem inaktiven Eintrag auch ein Shortcut-Eintrag vorangestellt werden, um z.B. die
Farbtasten immer gleich zu belegen, ist statt des "+" ein "-" zu verwenden. Eine Kombi-
nation von "+" bzw. "-" und den unten beschriebenen "*", "" und "&" ist zulssig.

Zur besseren Strukturierung des Mens knnen auch Info-Zeilen eingefgt werden. Diese
werden im Men in kleinerer Schrift und mit der Farbe des fr die Mens eingestellten
inaktiven Textes dargestellt. Diese Eintrge sind im Men nicht anwhlbar. Mittels die-
ser Eintrge knnen auch Info-Seiten erstellt werden, welche nur Kommentareintrge ent-
halten. Erstellt werden sie ber den Eintrag:

  COMMENT=Anzeigename im Men
  
Wird ein leerer Info-Eintrag mit Unterstreichung angelegt:

  COMMENT=*

wird der Strich nicht unterhalb der Zeile sondern mittig dargestellt, um eine gleich-
mige Verteilung der Eintrge zu gewhrleisten.

Mens und Aktionseintrge knnen dabei beliebig gemischt werden. Zur Unterscheidung
von Mens und Aktionen werden Mennamen auf dem Bildschirm mit einem vorangestellten
">" angezeigt.
Steht vor dem Anzeigenamen ein "*", wird im Men unterhalb dieses Eintrages ein Trenn-
strich gezogen. Das Plugin beendet sich nach dem Aufruf der eingetragenen Aktion nor-
malerweise selbst. Soll es sich nicht selbststndig schlieen, ist vor dem Anzeige-
namen ein "&" einzutragen. Das Plugin wartet dann, bis die aufgerufene Aktion beendet
ist und steht dann fr weitere Aktionen zur Verfgung. 
Viele Plugins (z.B. der Werbezapper) verwenden die Fernbedienung und den Framebuffer.
So lange sie ber die Plugin-Verwaltung von Neutrino aufgerufen werden, gibt es keine
Probleme. Beim Aufruf ber das Men-Plugin kommt es jedoch zu Reaktionen von Neutrino
auf die Fernbedienung. In diesem Fall ist statt des "&" der Schalter "" zu verwenden.
Das Men-Plugin wartet dann so lange, wie das aufgerufene Plugin luft und blockiert
fr diese Zeit die Fernbedienung und den Framebuffer fr Neutrino. Somit treten auch
keine gegenseitigen Beeinflussungen mehr auf. Wird das aufgerufene Plugin beendet, be-
endet sich auch das Men-Plugin. Auch die Kombination "*&" oder "*" vor dem Anzeige-
namen ist zulssig fr einen unterstrichenen Eintrag, bei dem das Men nicht selbst-
stndig beendet werden soll. Auch der Eintrag "&*" oder "*" ist zulssig.

Zur Hervorhebung von Men- und Aktionseintrgen knnen diesen auch andere als die im
Neutrino eingestellten Standardfarben zugewiesen werden. Das geschieht durch Farbsteu-
erzeichen innerhalb des Textes. Eingeleitet wird die Farbsteuerung mit dem Zeichen "~"
gefolgt von dem Buchstaben fr dei Farbauswahl. Folgende Farben sind mglich:

  ~R    nachfolgenden Text rot darstellen, gilt bis zum Textende oder einem neuen Farbbefehl
  ~G    nachfolgenden Text grn darstellen, gilt bis zum Textende oder einem neuen Farbbefehl
  ~B    nachfolgenden Text blau darstellen, gilt bis zum Textende oder einem neuen Farbbefehl
  ~Y    nachfolgenden Text gelb darstellen, gilt bis zum Textende oder einem neuen Farbbefehl
  ~S    nachfolgenden Text wieder in Standardfarbe darstellen

Innerhalb einer Zeile knnen auch mehrere Farbsteuerzeichen fr unterschiedliche Text-
teile verwendet werden. Folgen zwei Farbsteuerzeichen unmittelbar aufeinander, gilt das
letze. Das erste Farbsteuerzeichen darf erst hinter eventuellen Steuerschaltern (*&+-)
stehen. Kommentare, inaktive Zeilen und die Farbe des Textes wenn der Auswahlbalken ber
ihm steht, werden von den Farbsteuerzeichen nicht beeinflut.
Fr eine von der Zeichenbreite der Truetypefonts unabhngige Formatierung kann das Tabu-
latorsteuerzeichen "~T" verwendet werden. Das nchste auf dieses Steuerzeichen folgende
Zeichen wird auf einer Position dargestellt, welche das nchste Vielfache von 40 Pixeln
nach dem letzten bis dahin geschriebenen Zeichen ist.

Zum Einbinden dynamisch erzeugter Menteile kann das Kommando

  INCLUDE=Dateiname
  
innerhalb einer Konfigurationsdatei verwendet werden. Erkennt das Plugin solch einen Ein-
trag, wird diese Zeile durch den Inhalt der angegebenen Datei "Dateiname" ersetzt. So knn-
nen andere Plugins Men- oder Informationseintrge z.B. dynamisch in /tmp/ erzeugen und so
das Aussehen des Mens beenflussen. Existiert die angegebene Datei nicht, wird der Eintrag
ignoriert. Auch die mit "INCLUDE" eingebundene Datei darf "INCLUDE"-Eintrge enthalten. Das
ist bis zu einer Verschachtelungstiefe von 16 Ebenen mglich.

Sonderzeichen ber die Kommandozeile
------------------------------------
Da Linux keine bergabe von Sonder- und Steuerzeichen ber die Kommandozeile untersttzt, 
welche ja zum erstellen dnamisch erzeugter Konfigurationen verwendet wird, knnen die wich-
tigsten Sonderzeichen ber die Nutzung des Formatsteuerzeichens sowohl aus Scripten als auch 
von der Kommandozeile dargestellt werden. Aktuell werden folgende Sonder- und Steuerzeichen
untersttzt:

  ~t    Tabulator
  ~Tnnn absoluter Tabulator auf Position nnn (in Pixel), nnn mu immer dreistellig sein
  ~a    
  ~o    
  ~u    
  ~A    
  ~O    
  ~U    
  ~z    
  ~d     (degree)

Um diese Steuerzeichen zum Beispiel fr die bergabe ber die Kommandozeile an ander Plugins
beim Einlesen der Config beizubehalten, kann der Text, dessen Steuerzeichen beibehalten wer-
den sollen, in einfache Hochkommas gesetzt werden. Der Text "Spa~z" wrde nach dem Einlesen
also zu "Spa" umgewandelt werden, 'Spa~z' hingegen bleibt unverndert.

Sollten Programme oder Webseiten den Text als Unicode liefern, kann das FlexMen auch die
wichtigsten Umlaute daraus darstellen (auch bei neueren Images mit rigoroserem UFT8-Handling).
Folgende Unicode-Zeichen werden untersttzt:

 0xC3+0xA4	
 0xC3+0xB6	
 0xC3+0xBC	
 0xC3+0x84	
 0xC3+0x96	
 0xC3+0x9C	
 0xC3+0x9F	

Um auch im Anzeigenamen Kommas verwenden zu knnen, welche normalerweise als Trennzeichen
zwischen den einzelnen Eintragsteilen verwendet werden, kann man den Text, welcher Kommas
enthlt, in einfache Hochkommas einschlieen. Dadurch werden die Kommas mit im Men angezeigt.


Bei mehr als "LINESPP" Eintrgen wird ein Scrollbalken eingeblendet und mittels der Rechts-/
Linkstasten kann im Men jeweils eine Seite vor-/zurckgeblttert werden.
Mit der Home-Taste wird kehrt man zur vorherigen Menebene zurck. In der obersten Men-
ebene beendet Home das Plugin. Mit der Standby-Taste kann das Plugin aus jeder Men-Ebene
heraus beendet werden.
Sollte gerade etwas Interessantes gezeigt werden, was durch das Men verdeckt wird, kann man
das Men durch einen kurzen Druck auf die Mute-Taste der Fernbedienung ausblenden. Das Plugin
bleibt aber im Hintergrund aktiv und kann durch einen erneuten Druck auf die Mute-Taste wieder
eingeblendet werden. Ist das Men ausgeblendet, werden alle Tasten auer "Mute" ignoriert.

Gre vom New-Tuxwetter-Team SnowHead und Worschter