Unix-Befehl in Widget ausführen

Dieses Thema im Forum "Mac OS X Apps" wurde erstellt von sheep, 03.08.2005.

  1. sheep

    sheep Thread Starter MacUser Mitglied

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

    oneOeight MacUser Mitglied

    Beiträge:
    46.810
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    ich frag mich gerade, warum du das über ein shell script machen willst, die if/case sachen sollten doch auch direkt in javascript gehen...
     
  3. sheep

    sheep Thread Starter MacUser Mitglied

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

    lengsel MacUser Mitglied

    Beiträge:
    4.627
    Zustimmungen:
    53
    MacUser seit:
    25.11.2003
    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
     
  5. sheep

    sheep Thread Starter MacUser Mitglied

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

    lengsel MacUser Mitglied

    Beiträge:
    4.627
    Zustimmungen:
    53
    MacUser seit:
    25.11.2003
    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
     
  7. sheep

    sheep Thread Starter MacUser Mitglied

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

    sheep Thread Starter MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    MacUser seit:
    21.03.2005
    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:

    Zuletzt bearbeitet: 03.08.2005
  9. lengsel

    lengsel MacUser Mitglied

    Beiträge:
    4.627
    Zustimmungen:
    53
    MacUser seit:
    25.11.2003
    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: 03.08.2005
  10. sheep

    sheep Thread Starter MacUser Mitglied

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