Unix-Befehl in Widget ausführen

sheep

sheep

Aktives Mitglied
Thread Starter
Dabei seit
21.03.2005
Beiträge
1.255
Reaktionspunkte
25
Ich habe ein Unix-Script geschrieben, für welches ich gerne ein Widget als Frontend hätte. Das Script sieht so aus:

Code:
sheep@powerbook:~$ cat /usr/bin/gesetz
#!/bin/bash
#Gesetzesartikel in der Form 'OR 41' in Safari aufrufen

# Fehlerhafte Anzahl Argumente (erwartet: 2) abfangen
if [ "$#" != "2" ]; then
   echo "Erlass und Artikel werden erwaret. Bsp.: gesetz OR 41"
   exit 1
fi

# SR-Nummer des angegebenen Erlasses ermitteln
declare erlass
case "$1" in
        OR)
                erlass='220'
                ;;
        ZGB)
                erlass='210'
                ;;
        StGB)
                erlass='311_0'
                ;;
        BV)
                erlass='101'
                ;;
        SVG)
                erlass='741_01'
                ;;
        OG)
                erlass='173_110'
                ;;
        PrHG)
                erlass='221_112_944'
                ;;

        # HIER WEITERE ERLASSE EINFüGN!
        # Achtung: Punkt (.) in SR-Nummer wird zu Unterstrich (_)

        #Erlass)
        #       erlass='SR_Nummer'
        #       ;;

        # Eingabe unbekannter Erlasse abfangen
        *)
                echo "Unbekannter Erlass"
                exit 1
                ;;
esac

# URL generieren
declare url='http://www.admin.ch/ch/d/sr/'$erlass'/a'$2'.html'

# Resultat zur Kontrolle zurückgeben
echo 'Norm   : Art. '$2' '$1
echo 'Erlass : SR ' $erlass
echo 'URL    : '$url

# URL öffnen
open -a Safari $url
Das Script dient dazu, Gesetzesartikel (ich studiere Schweizer Recht ;)) mit einem Befehl aufzurufen. Bspw. kann der Art. 111 des Strafgesetzbuches mit dem Befehl "gesetz StGB 111" angezeigt werden. Jetzt wäre es natürlich schön, wenn ich ein Widget hätte, welches das Script so aufruft, dass ich nur noch einzutippen brauche "StGB 111" und das Widget daraus den Befehl "gesetz StGB 111" macht und ausführt.

Weiss jemand, wie man so etwas realisiert? Ich habe schon ein klein wenig Ahnung von Widgets (allerdings wirklich nicht viel), aber beim Ausführen von Unix-Befehlen hapert es irgendwie :(. Habe es nicht hinbekommen...

So habe ich es versucht (im Javascript-File):

function gesetzAnzeigen(artikel)
{
widget.system("gesetz " + artikel, null);
}

wobei das so im HTML-File aufgerufen wird:

<div id="search-field-gesetz"><input
id="searchOR" size="24" placeholder="Gesetzesartikel"
results="10" onsearch="srchOR(this.value);" type="search"></div>

Sieht jemand den Fehler bzw. kann mir sagen, wie man so etwas richtig macht? Bin nicht sicher, ob ich überhaupt auf der richtigen Fährte bin, aber so schwierig kann das ja wohl nicht sein :).
 
ich frag mich gerade, warum du das über ein shell script machen willst, die if/case sachen sollten doch auch direkt in javascript gehen...
 
oneOeight schrieb:
ich frag mich gerade, warum du das über ein shell script machen willst, die if/case sachen sollten doch auch direkt in javascript gehen...
Das hat zwei Gründe:
1. Ich habe das Script schon früher geschrieben und jetzt erweitert
2. Ich mag Shell-Scripts :) und von Javascript habe ich keine Ahnung
 
Blöde Frage:
Warum nimmst Du nicht einfach das Formular der SR-Suchseite und lässt die Ergebnisse in Safari anzeigen?
Hätte den Vorteil dass das Widget optisch nicht größer als das Formular sein müsste.
Code:
<form action="http://www.admin.ch/chp/redir_sr2.pl" method="POST">
<INPUT TYPE=text NAME=q size=48 maxlength=200 VALUE="">
<input type=submit value="Suchen">
<input type="hidden" name="lang" value="d">
<input type="hidden" name="pg" value="q">
</form>

Evtl. habe ich etwas mit dem Pfad geschusselt, müsste man halt verifizieren
Das Ergebnis wäre eine dezente Eingabezeile, die man sich sogar dauerhaft auf den Desktop holen kann (defaults write com.apple.dashboard devmode YES
Kurz ein und ausloggen, dann Dashboard aktivieren, gewünschtes Widget nehmen, festhalten, Dashboard deaktivieren, noch immer festgehaltenes Widget auf Desktop ablegen, fertig.), dann muss man nicht erst Dashboard aktivieren, und hat sie immer griffbereit.

Grüße,
Flo
 
lengsel schrieb:
Blöde Frage:
Warum nimmst Du nicht einfach das Formular der SR-Suchseite und lässt die Ergebnisse in Safari anzeigen?
Hätte den Vorteil dass das Widget optisch nicht größer als das Formular sein müsste.
Code:
<form action="http://www.admin.ch/chp/redir_sr2.pl" method="POST">
<INPUT TYPE=text NAME=q size=48 maxlength=200 VALUE="">
<input type=submit value="Suchen">
<input type="hidden" name="lang" value="d">
<input type="hidden" name="pg" value="q">
</form>

Evtl. habe ich etwas mit dem Pfad geschusselt, müsste man halt verifizieren
Das Ergebnis wäre eine dezente Eingabezeile, die man sich sogar dauerhaft auf den Desktop holen kann (defaults write com.apple.dashboard devmode YES
Kurz ein und ausloggen, dann Dashboard aktivieren, gewünschtes Widget nehmen, festhalten, Dashboard deaktivieren, noch immer festgehaltenes Widget auf Desktop ablegen, fertig.), dann muss man nicht erst Dashboard aktivieren, und hat sie immer griffbereit.

Grüße,
Flo
Ich Esel :p. Das funktioniert ja tatsächlich! Ich habe ganz ehrlich noch nie gemerkt, dass man da einen konkreten Artikel eingeben kann und direkt da landet.

Hab Dank, da kann ich mir ja die Bastelei mit den CASE-Anweisungen komplett sparen, wenn das Formular das bereits so perfekt beherrscht :).

Ach ja: Der Code funktioniert in einer HTML-Datei, allerdings öffnet sich Safari nicht, wenn man das Widget benutzt. Wie realisiert man das konkret, dass das "Ergebnis" in Safari geöffnet wird?
 
Zuletzt bearbeitet:
sheep schrieb:
...
Ach ja: Der Code funktioniert in einer HTML-Datei, allerdings öffnet sich Safari nicht, wenn man das Widget benutzt. Wie realisiert man das konkret, dass das "Ergebnis" in Safari geöffnet wird?

Freut mich dass der Code prinzipiell mal funktioniert, bin aber auch nicht so der Widget-chef. Ich meine mal gelesen zu haben dass es da einen JS-Befehl für Widgets gibt der (u.a.) Safari extern öffnet.

Grüße,
Flo
 
lengsel schrieb:
Freut mich dass der Code prinzipiell mal funktioniert, bin aber auch nicht so der Widget-chef. Ich meine mal gelesen zu haben dass es da einen JS-Befehl für Widgets gibt der (u.a.) Safari extern öffnet.

Grüße,
Flo
Jaja, den gibt es: widget.openURL(url). Was mir nicht ganz klar ist, ist wie ich das damit realisieren soll. Wenn das "Ergebnis" des Formulars eine URL ist, könnte man die an den obigen Befehl übergeben, aber wie?
 
Zuletzt bearbeitet:
Geschafft :).

Man braucht lediglich ein Suchfeld zu definieren und das dann so:

widget.openURL("http://www.admin.ch/chp/redir_sr2.pl?q=" + q);

aufzurufen (wobei q der übergebene Suchtext ist).

Wie das - kombiniert mit dem obigen Tipp (Anzeige direkt auf dem Desktop) - aussieht, seht Ihr im Anhang. Eine wirklich saubere Sache, vielen Dank für die Hilfe!
 

Anhänge

  • Bild 1.png
    Bild 1.png
    7,9 KB · Aufrufe: 60
Zuletzt bearbeitet:
Na das ist ja mal schick mit dem Suchfeld in der Menüleiste. :)
Ich bin beeindruckt.

Grüße,
Flo

P.S.: Magst Du das Widget mal irgendwo veröffentlichen?
 
Zuletzt bearbeitet:
lengsel schrieb:
Na das ist ja mal schick mit dem Suchfeld in der Menüleiste. :)
Ich bin beeindruckt.

Grüße,
Flo

P.S.: Magst Du das Widget mal irgendwo veröffentlichen?
Danke ;). Ich habe es da (Menüleiste) natürlich nur hingeschoben, aber finde auch, dass es sich da ganz gut macht und ergonomisch ist es auf jeden Fall.

Das Widget kann ich selbstverständlich "veröffentlichen" - es ist aber scheusslich programmiert, weil ich einen früheren Versuch als Vorlage verwendet und diesen einfach in Hau-Ruck-Manier (verstümmelter Quelltext, Namen falsch, kein Icon etc.) abgeändert habe. Ich glaube zwar nicht, dass der üble Stil einen Einfluss auf die Funktionalität hat, aber ich schäme mich, dieses Frickelwerk hier zu posten :rolleyes:.

Werde das noch verbessern und dann hier reinstellen, sollte nicht allzu lange dauern.

Edit:
Es ist fertig. Ich habe hier einen neuen Thread gestartet.
 
Zuletzt bearbeitet:
Zurück
Oben Unten