Unix-Befehl in Widget ausführen

  1. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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 :).
     
    sheep, 03.08.2005
  2. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.161
    Zustimmungen:
    3.886
    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, 03.08.2005
  3. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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
     
    sheep, 03.08.2005
  4. lengsel

    lengselMacUser Mitglied

    Mitglied seit:
    25.11.2003
    Beiträge:
    4.553
    Zustimmungen:
    53
    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, 03.08.2005
  5. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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?
     
    sheep, 03.08.2005
  6. lengsel

    lengselMacUser Mitglied

    Mitglied seit:
    25.11.2003
    Beiträge:
    4.553
    Zustimmungen:
    53
    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, 03.08.2005
  7. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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?
     
    sheep, 03.08.2005
  8. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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
      Dateigröße:
      7,9 KB
      Aufrufe:
      25
    sheep, 03.08.2005
  9. lengsel

    lengselMacUser Mitglied

    Mitglied seit:
    25.11.2003
    Beiträge:
    4.553
    Zustimmungen:
    53
    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?
     
    lengsel, 03.08.2005
  10. sheep

    sheep Thread StarterMacUser Mitglied

    Mitglied seit:
    21.03.2005
    Beiträge:
    1.223
    Zustimmungen:
    24
    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.
     
    sheep, 03.08.2005
Die Seite wird geladen...