Προς το περιεχόμενο

KDE konsole 4.8.1 "cd" Drop menu patch.


firewalker

Προτεινόμενες αναρτήσεις

Ένα από τα πράγματα που μου την έσπαγε στην εφαρμογή konsole του KDE 4 ήταν η απουσία του "cd" στην εναπόθεση ενός φακέλου/αρχείου πάνω της.

 

Στο KDE 3.5.x:

QerRus.png

 

Στο KDE 4:

71EM3s.png

 

Έκατσα χθες το βράδυ και έγραψα μία χαζομαρούλα που προσθέτει το "cd".

 

Το νέο konsole:

MmoQOs.png

 

 

Να τονίσω πως δεν γνωρίζω 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:

    /**

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...