Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 21 von 21

Thema: Kleines Skript mir großer Wirkung

  1. #16
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von fork
    > Kann dein Script URLs handhaben?

    Wuesste nicht das tar damit umgehen kann, aber beim testen scheint das kein Unterschied zu Dateinamen zu machen. Hab's reingeschrieben weil's in der Ark Vorlage auch drin war.
    Hmm, wahrscheinlich ist bei file:// der übergeben Teil das selbe.
    Bei echten URLs könnte es anders sein, hab da aber auch noch nicht experientiert.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  2. #17
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ich hab sie ausprobiert, eure Scripts. Sie scheinen alle gut zu funktionieren. Ich sollte eigentlich zufrieden sein, hab ich doch jetzt, was ich wollte. Aber ich bin noch nicht ganz fertig:

    Das wäre pack.desktop

    [Desktop Action Pack]
    Exec=/home/axel/bin/pack %U
    Name=Packen...

    [Desktop Entry]
    Actions=Pack
    Icon=/usr/share/apps/ark/icons/hicolor/22x22/actions/ark_addfile.png
    ServiceTypes=allfiles

    und das unpack.desktop:

    [Desktop Action ExtractDir]
    Exec=extractdir %f
    Name=In Verzeichnis entpacken

    [Desktop Entry]
    Actions=ExtractDir
    Icon=/usr/share/apps/ark/icons/hicolor/22x22/actions/ark_extract.png
    ServiceTypes=application/x-tgz,application/x-tarz

    Leider werden die Icons nicht angezeigt, das mag aber an KDE 2 liegen.
    Ich musste das Verzeichnis

    /home/axel/.kde/share/apps/konqueror/servicemenus

    erst anlegen, und voila, bei dem nächsten Login war auch der Eintrag "Entpacken..." von Ark da.

    Die UI vom Pack-Skript verwendet kein Qt, das ist mir aufgefallen. Qt wäre wahrscheinlich auch zu langsam. Diese UI dagegen ist sehr schnell, bin ich gar nicht so gewöhnt. Ich hab das xterm ausgebaut, weil ich nicht mehr Fenster haben wollte, als unbedingt nötig. Nur leider hat man dann auch keine Informationen mehr, wie lange das Packen wohl noch dauert. Ist es möglich, die Ausgaben, die normalerweise im XTerm angezeigt werden, in die UI zu integrieren? Ansonsten macht die UI den Anschein, als sei sie abgestürzt. Es findet auch kein Repaint statt. Wenn das nicht geht, konnte man vielleicht einfach ein Label machen "Packing...", das man weis, es dauert eben noch.

    So eine UI wäre auch für das Unpack-Skript schön, das der Anwender weis, da tut sich irgendwas.

    ABer ich freue mich erstmal, das mein Gedanken überhaupt so viel Feedback gefunden hat. Früher musste ich immer eine Konsole aufmachen, tar -zxf <tgzfile> schreiben, und dürfte die Konsole danach wieder zumachen. Das ist auf jeden Fall schon mal ein Schritt in die richtige Richtung. Hat jdm. Kontakt zum KDE-Team, das sie so etwas in KDE einbauen? Evtl. könnte Ark einen Kommandozeilenparameter kriegen, so ist das ja auch unter Windows gelöst. Da würde es dann eine QT-UI mit Progressbar geben.

    Eine zweite Version des Pack-Skriptes für bzip2 wäre auch nicht schlecht, ich verwende unter der Konsole eigentlich nur bz2. Da müßte man einfach anstatt tar -czf einfach tar -cjf aufrufen.

  3. #18
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von axeljaeger

    Name=Packen...

    Name=In Verzeichnis entpacken
    Name= ist ansich in der Standardsprache (meist Englisch).
    Name[de]= wäre für deutsch.

    Ist für dich privat kein Unterschied, aber wenn einen ServiceMenu Eintrag mal weitergeben willst, ist es so einfacher das anzupassen, ohne vorhandenes zu löschen oder zu überschreiben.


    So eine UI wäre auch für das Unpack-Skript schön, das der Anwender weis, da tut sich irgendwas.
    Das Script war nur als Demonstration der ServiceMenu Sache gedacht.
    Ich hab bischen experimentiert, um statt tar ark zu verwenden, aber leider ignoriert ark das aktuelle Verzeichnis und bietet als Ausgangsverzeichnis der Extraktion das Verzeichnis des tgz an.


    ABer ich freue mich erstmal, das mein Gedanken überhaupt so viel Feedback gefunden hat. Früher musste ich immer eine Konsole aufmachen, tar -zxf <tgzfile> schreiben, und dürfte die Konsole danach wieder zumachen. Das ist auf jeden Fall schon mal ein Schritt in die richtige Richtung. Hat jdm. Kontakt zum KDE-Team, das sie so etwas in KDE einbauen? Evtl. könnte Ark einen Kommandozeilenparameter kriegen, so ist das ja auch unter Windows gelöst. Da würde es dann eine QT-UI mit Progressbar geben.
    Ja, ein --extractto dir Parameter wäre nicht schlecht
    Für solche Sachen ist es das beste, man geht auf http:://bugs.kde.org/ und macht einen Bugreport mit Severity "wishlist" für das jewielige Programm.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #19
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    > Qt wäre wahrscheinlich auch zu langsam. Diese UI dagegen ist sehr schnell
    Qt finde ich angenehmer, und die paar microsekunden mehr kann ich warten. Aber "Tk" ist im Moment die beste Möglichkeit grafische Oberflächen darzustellen, bis ich mehr Wissen habe.

    > --extractto
    Meinst Du damit das ein Dialog aufgeht wohin das Archiv entpackt wird? Das sollte ja kein Problem sein einfach ein die Option an "tar -C" zu übergeben

    > xterm ausgebaut
    Das kleine Programm zeigt nicht immer eine vernünftige(überhaupt keine) Fehlermeldung an deswegen ist das drin geblieben.

    > Ist es möglich, die Ausgaben, die normalerweise im XTerm angezeigt werden, in die UI zu
    > integrieren?
    Möglich ist alles.

    > Status wenigstens durch Packing... anzeigen
    Wenn ich Zeit und Lust habe mich intensiver mit "Tk"-Grundlagen zu beschäftigen dürfte ich das hinkriegen, leider wird mein Programm unterbrochen wenn ich einen Systemaufruf ausführe. Bin aber im Moment wo anders dran, ausserdem ist Sommer und es gibt Orte in Deutschland wo die Flüsse nicht aus dem Himmel fliessen. ;-)

    > Früher musste ich immer eine Konsole aufmachen, tar -zxf <tgzfile> schreiben
    weniger als 5 Sub-Konsolen in "konsole" sind bei mir sowieso nicht offen ;-)

    > tar/bzip2 anstatt tar -czf einfach tar -cjf aufrufen
    Das steht jedem frei zu ändern.

    -----

    Generell ist das aber mal ein besserer Ansatz, keine grossartige GUI sondern einfach nur Packen/Entpacken fertig. Vielleicht noch irgendwo eine Optionsschaltfläche...

    Oder gleich Kaptain nehmen und den für tar nur richtig aufrufen, das hört sich interessant an.
    -> http://kaptain.sourceforge.net

  5. #20
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Mir ist eingefallen, wie man eine Progressbar implementieren kann:
    Es gibt eine Option für tar, -t, die den Inhalt der Datei anzeigt. Hat zwar bei nicht funktioniert, vielliecht hab ich es auch nur falsch bedient.
    Man kan tar außerdem mit -v dazu bringen, die Dateien anzuzeigen die gerade entpackt werden.
    Wenn man jetzt die Dateien zählt, die entpackt werden, diese Zahl mit 100 malnimmt und durch
    die Anzahl aller Dateien teilt, hätte man die Progressbar.

    currentcount * 100 / all

    Ich würde das auch mal mit Qt und C++ versuchen, wenn das mit TkTCL nicht geht und ihr das
    für sinnvoll haltet, ich weis nicht, wie es da mit der Performance aussieht.
    Man könnte ja auch ein Label machen und mit "|" füllen, wenn es in TkTCL keine Progressbar
    gibt.

  6. #21
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    QT Version

    ich hab mal angefangen, eine QT-Version zu schreiben, hab dann aber aufgehört, weil mir das System abgeschmiert ist. Es sollte theoretissch funktionieren, es ist nur noch ein Segfault drin. GDB sagt, das irgendwo strlen von libc.so.6 aufgerufen wird. Vielleicht will ja mla jmd. den Quelltext als Basis nehmen und weitermachen.


    Code:
    #include <qprogressdialog.h>
    #include <qapplication.h>
    #include <qprocess.h>
    
    #include <iostream>
    
    class Untar : public QProgressDialog
    {
     Q_OBJECT
     public:
      Untar(QString filename);
      ~Untar(){};
      public slots:
       void cprocsst();
       void procsst();
       void untar();
      protected:
       int filecount;
       int currentfile;
       QString workingdir, singlefilename;
    };
    
    Untar::Untar(QString filename) : QProgressDialog()
    {
    filecount = 0;
    currentfile = 0;
    
    workingdir = filename.mid(0,filename.findRev("/")); 
    singlefilename = filename.mid(filename.findRev("/"));
    
    connect(this, SIGNAL(cancelled()), qApp, SLOT(quit()));
    
    QProcess* countproc = new QProcess(this);
    
    countproc->addArgument("tar");
    countproc->addArgument(((filename.endsWith(".bz2")) ? "-jt": "-zt"));
    countproc->addArgument(filename);
    
    connect(countproc, SIGNAL(readyReadStdout()), this, SLOT(cprocsst()));
    connect(countproc, SIGNAL(processExited()), this, SLOT(untar()));
    
    connect(countproc, SIGNAL(readyReadStderr()), qApp, SLOT(quit()));
    
    if(! countproc->start())
      qApp->quit();
    }
    void Untar::cprocsst()
    {
     filecount++;
     qDebug("void Untar::cprocsst()");
    }
    void Untar::procsst()
    {
     setProgress(currentfile * 100 / filecount);
    }
    void Untar::untar()
    {
    qDebug("Untar started");
    
    QProcess* proc = new QProcess(this);
    
    proc->addArgument("tar");
    proc->addArgument((singlefilename.endsWith(".bz2") ? "-jxf": "-zxf"));
    proc->addArgument(singlefilename);
    proc->setWorkingDirectory(workingdir);
    
    connect(proc, SIGNAL(readyReadStdout()), this, SLOT(procsst()));
    connect(proc, SIGNAL(processExited()), qApp, SLOT(quit()));
    
    proc->start();
    }
    
    #include "untar.moc.cpp"
    
    int main(int argc, char **argv)
    {
     if(argc != 2)
       return(0);
     QApplication app(argc, argv);
     Untar t(app.argv()[1]);
     t.resize(400,100);
     app.setMainWidget(&t);
     t.show();
     return(app.exec());
    }

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •