Applicazione che consente di mostrare il contenuto degli appunti e il suo tipo MIME?


9

Sto cercando un'applicazione in grado di mostrarmi i dettagli del contenuto degli Appunti.

Quando si copiano alcuni dati negli Appunti, i dati sono associati a un tipo MIME specifico. Il testo normale è che i text/plaindati binari possono essere copiati come application/octet-stream, ecc. Ho un'applicazione che copia i dati binari, taggandolo come proprio tipo MIME e vorrei vedere di che tipo è e quali dati ha.

Non posso semplicemente incollare il contenuto degli appunti in un'applicazione simile a un blocco note di destinazione, poiché la destinazione si aspetta che sia il tipo MIME dell'oggetto appunti text/plain.

Sarebbe anche sufficiente un'applicazione che enumera tutti i tipi di oggetti MIME attualmente esistenti negli Appunti.

Risposte:


6

Utilizzare xclip:

xclip -o -t TARGETS

per vedere tutti i tipi disponibili. Per esempio:

  1. copia qualcosa dal tuo browser web
  2. investigare i tipi disponibili
$ xclip -o -t OBIETTIVI
TIMESTAMP
OBIETTIVI
MULTIPLA
text / html
text / _moz_htmlcontext
text / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TESTO
CORDA
text / x-moz-url-priv
  1. ottieni i contenuti per quello a cui sei interessato: xclip -o -t text/html

3

OK, in realtà ho scritto del codice che fa quello che mi serve. Per fortuna è abbastanza facile in Qt.

Le informazioni sulla costruzione sono in fondo a questo 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)

Creazione di informazioni come richiesto nel commento di @slm: dipende dal sistema in uso. Questo codice richiede Qt5 e CMake per la compilazione. Se hai entrambi, tutto ciò che devi fare è eseguire:

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

o 'gmake' se sei su FreeBSD, o 'mingw32-make' se sei su Windows, ecc.

Se non hai Qt5 o CMake, puoi provare a cavartela con Qt4 e la compilazione manuale:

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

Se stai ricevendo informazioni --std=c++11sull'opzione non valida, prova --std=c++0xinvece e considera l'aggiornamento del compilatore;).


1
Grazie per aver pubblicato questa soluzione. Potresti aggiungere qualche dettaglio su come compilarlo per i futuri visitatori?
slm

2
@slm, antonone, ho semplificato / abbreviato il tuo codice, dovrebbe anche essere più facile da compilare in questo modo: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.