Application qui permet d'afficher le contenu du presse-papiers et son type MIME?

9

Je recherche une application qui peut me montrer les détails du contenu du presse-papiers.

Lors de la copie de certaines données dans le presse-papiers, les données sont associées à un type MIME spécifique. Le texte normal est text/plain, les données binaires peuvent être copiées en tant que application/octet-stream, etc.

Je ne peux pas simplement coller le contenu du presse-papiers dans une application de type bloc-notes cible, car la cible s'attend à ce que le type MIME de l'objet presse-papiers soit text/plain.

Une application qui énumère tous les types d'objets MIME actuellement existants dans le presse-papiers suffirait également.

antonone
la source

Réponses:

6

Utilisation xclip:

xclip -o -t TARGETS

pour voir tous les types disponibles. Par exemple:

  1. copier quelque chose depuis votre navigateur Web
  2. enquêter sur les types disponibles
CIBLES $ xclip -o -t
TIMESTAMP
CIBLES
PLUSIEURS
texte / html
text / _moz_htmlcontext
text / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXTE
CHAÎNE
text / x-moz-url-priv
  1. obtenez le contenu de celui qui vous intéresse: xclip -o -t text/html
néo
la source
3

OK, j'ai en fait écrit du code qui fait ce dont j'ai besoin. Heureusement, c'est assez facile dans Qt.

Les informations de construction sont au bas de ce post.

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)

Informations de construction comme demandé dans le commentaire de @slm: cela dépend du système que vous utilisez. Ce code a besoin de Qt5 et CMake pour être compilé. Si vous disposez des deux, il vous suffit d'exécuter:

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

ou 'gmake' si vous êtes sous FreeBSD, ou 'mingw32-make' si vous êtes sous Windows, etc.

Si vous n'avez pas Qt5 ou CMake, vous pouvez essayer de vous en sortir avec Qt4 et la compilation manuelle:

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

Si vous obtenez des informations sur une --std=c++11option non valide , essayez --std=c++0xplutôt et pensez à mettre à niveau votre compilateur;).

antonone
la source
1
Merci d'avoir publié cette solution. Pourriez-vous ajouter un peu de détails sur la façon de le compiler pour les futurs visiteurs?
slm
2
@slm, antonone, j'ai simplifié / raccourci votre code, devrait également être plus facile à compiler de cette façon: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig