Anwendung, mit der der Inhalt der Zwischenablage und der MIME-Typ angezeigt werden können?

9

Ich suche nach einer Anwendung, die mir die Details des Inhalts der Zwischenablage anzeigen kann.

Beim Kopieren einiger Daten in die Zwischenablage werden die Daten einem bestimmten MIME-Typ zugeordnet. Normaler Text ist text/plain, Binärdaten können kopiert application/octet-streamwerden usw. Ich habe eine Anwendung, die Binärdaten kopiert und als eigenen MIME-Typ kennzeichnet, und ich möchte sehen, welcher Typ es ist und welche Daten es hat.

Ich kann den Inhalt der Zwischenablage nicht einfach in eine Notizblock-ähnliche Zielanwendung einfügen, da das Ziel den MIME-Typ des Zwischenablageobjekts erwartet text/plain.

Eine Anwendung, die alle derzeit vorhandenen MIME-Objekttypen in der Zwischenablage auflistet, würde ebenfalls ausreichen.

Antonon
quelle

Antworten:

6

Verwendung xclip:

xclip -o -t TARGETS

um alle verfügbaren Typen zu sehen. Zum Beispiel:

  1. Kopieren Sie etwas von Ihrem Webbrowser
  2. verfügbare Typen untersuchen
$ xclip -o -t ZIELE
TIMESTAMP
ZIELE
MEHRERE
Text / HTML
text / _moz_htmlcontext
text / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text / x-moz-url-priv
  1. Holen Sie sich den Inhalt für den, an dem Sie interessiert sind: xclip -o -t text/html
Neo
quelle
3

OK, ich habe tatsächlich einen Code geschrieben, der das tut, was ich brauche. Gut, dass es in Qt ziemlich einfach ist.

Gebäudeinformationen finden Sie am Ende dieses Beitrags.

xclipshow.cpp:

#include <QApplication>
#include <QTimer>
#include <QClipboard>
#include <QMimeData>
#include <QDebug>
#include <QStringList>

class App: public QObject {
    Q_OBJECT
private:
    void main();
public:
    App(): QObject() { }
public slots:
    void qtmain() { main(); emit finished(); }
signals:
    void finished();
};

void App::main() {
    QClipboard *clip = QApplication::clipboard();

    for(QString& formatName: clip->mimeData()->formats()) {
        std::string s;
        s = formatName.toStdString();

        QByteArray arr = clip->mimeData()->data(formatName);
        printf("name=%s, size=%d: ", s.c_str(), arr.size());

        for(int i = 0; i < arr.size(); i++) {
            printf("%02x ", (unsigned char) arr.at(i));
        }

        printf("\n");
    }
}

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    App *task = new App();
    QObject::connect(task, SIGNAL(finished()), & app, SLOT(quit()));
    QTimer::singleShot(0, task, SLOT(qtmain()));
    return app.exec();
}

#include "xclipshow.moc"

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
project(xclipshow)
find_package(Qt5Widgets)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(SRC
    xclipshow.cpp)

add_definitions(-std=c++11)
add_executable(xclipshow ${SRC})
qt5_use_modules(xclipshow Widgets Core)

Gebäudeinformationen wie im Kommentar von @slm angefordert: Dies hängt vom verwendeten System ab. Dieser Code benötigt Qt5 und CMake zum Kompilieren. Wenn Sie beide haben, müssen Sie nur Folgendes ausführen:

BUILD_DIR=<path to an empty temporary dir, which will contain the executable file>
SRC_DIR=<path to the directory which contains xclipshow.cpp>

$ cd $BUILD_DIR
$ cmake $SRC_DIR
$ make

oder "gmake", wenn Sie unter FreeBSD arbeiten, oder "mingw32-make", wenn Sie unter Windows usw. arbeiten.

Wenn Sie kein Qt5 oder CMake haben, können Sie versuchen, mit Qt4 und manueller Kompilierung davonzukommen:

$ moc xclipshow.cpp > xclipshow.moc
$ g++ xclipshow.cpp -o xclipshow `pkg-config --cflags --libs QtGui` -I. --std=c++11

Wenn Sie Informationen über eine ungültige --std=c++11Option erhalten, versuchen Sie es --std=c++0xstattdessen und erwägen Sie, Ihren Compiler zu aktualisieren;).

Antonon
quelle
1
Vielen Dank für die Veröffentlichung dieser Lösung. Können Sie ein paar Details hinzufügen, wie Sie es für zukünftige Besucher kompilieren können?
slm
2
@slm, antonone, ich habe Ihren Code vereinfacht / gekürzt, sollte auch einfacher zu kompilieren sein: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig