firewalker Δημοσ. 2 Απριλίου 2012 Share Δημοσ. 2 Απριλίου 2012 Ένα από τα πράγματα που μου την έσπαγε στην εφαρμογή konsole του KDE 4 ήταν η απουσία του "cd" στην εναπόθεση ενός φακέλου/αρχείου πάνω της. Στο KDE 3.5.x: Στο KDE 4: Έκατσα χθες το βράδυ και έγραψα μία χαζομαρούλα που προσθέτει το "cd". Το νέο konsole: Να τονίσω πως δεν γνωρίζω Qt, Cpp. Το patch: >diff -rupN konsole-4.8.1/src/TerminalDisplay.cpp src/konsole-4.8.1/src/TerminalDisplay.cpp --- konsole-4.8.1/src/TerminalDisplay.cpp 2011-12-02 23:31:44.000000000 +0200 +++ konsole-4.8.1/src/TerminalDisplay.cpp 2012-04-02 11:55:02.541161153 +0300 @@ -31,6 +31,8 @@ #include <QtCore/QEvent> #include <QtCore/QTime> #include <QtCore/QFile> +#include <QtCore/QFileInfo> +#include <QtCore/QString> #include <QtGui/QGridLayout> #include <QtGui/QLabel> #include <QtGui/QLayout> @@ -2913,10 +2915,16 @@ void TerminalDisplay::dropEvent(QDropEve QAction* pasteAction = new QAction(i18n("&Paste as text"), this); pasteAction->setData(dropText); + QAction* cdAction = new QAction(i18n("c&d"), this); + cdAction->setData(dropText); + connect(pasteAction, SIGNAL(triggered()), this, SLOT(dropMenuPasteTriggered())); + connect(cdAction, SIGNAL(triggered()), this, SLOT(dropMenucdTriggered())); QList<QAction*> additionalActions; + additionalActions.append(pasteAction); + additionalActions.append(cdAction); KUrl target(_sessionController->currentDir()); @@ -2950,6 +2958,54 @@ void TerminalDisplay::dropMenuPasteTrigg } } +void TerminalDisplay::dropMenucdTriggered() +{ + QString str1; + QString str2; + QByteArray ba; + const char * str3; + + if ( sender() ) + { + const QAction* action = dynamic_cast<const QAction*>(sender()); + if ( action ) + { + str1 = action->data().toString(); + + //Trimming the blank characters (spaces) from the beginning and the end of the string. + str1=str1.trimmed(); + + //Trimming "'" characters (if there) from the beginning and the end of the string. + str1=str1.remove(QRegExp("\\'+$")); + str1=str1.remove(QRegExp("\\'")); + + QFileInfo fileInfo(str1); + + if (fileInfo.isFile()) + { + //If the string represents a file return path+filename (e.g. /tmp/test/file.cpp). + str2=fileInfo.absolutePath(); + + } else { + //If the string represents a folder return path (e.g. /tmp/test/). + str2=fileInfo.absoluteFilePath(); + } + + //QString to char *. + ba = str2.toLocal8Bit(); + str3 = ba.data(); + + emit sendStringToEmu("cd '"); + emit sendStringToEmu(str3); + emit sendStringToEmu("'\r"); + + } + + activateWindow(); + } + +} + void TerminalDisplay::doDrag() { _dragInfo.state = diDragging; diff -rupN konsole-4.8.1/src/TerminalDisplay.h src/konsole-4.8.1/src/TerminalDisplay.h --- konsole-4.8.1/src/TerminalDisplay.h 2011-11-17 22:57:16.000000000 +0200 +++ konsole-4.8.1/src/TerminalDisplay.h 2012-04-02 11:44:05.415442563 +0300 @@ -516,6 +516,11 @@ public slots: */ void dropMenuPasteTriggered(); + /** + * Called from the drag'n'drop popup. Causes "cd" into the folder or file's folder droped. + */ + void dropMenucdTriggered(); + signals: /** Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα