Aplikasi yang memungkinkan untuk menampilkan konten clipboard dan jenis MIME-nya?

9

Saya mencari aplikasi yang dapat menunjukkan kepada saya detail isi clipboard.

Saat menyalin beberapa data ke clipboard, data tersebut dikaitkan dengan jenis MIME tertentu. Teks normal text/plain, data biner dapat disalin application/octet-stream, dll. Saya memiliki aplikasi yang menyalin data biner, menandainya sebagai tipe MIME-nya sendiri, dan saya ingin melihat tipe apa itu, dan data apa yang dimilikinya.

Saya tidak bisa hanya menempelkan konten clipboard ke aplikasi notepad seperti target, karena target mengharapkan tipe MIME objek clipboard menjadi text/plain.

Aplikasi yang menyebutkan semua jenis objek MIME yang ada saat ini di clipboard juga sudah cukup.

antonon
sumber

Jawaban:

6

Gunakan xclip:

xclip -o -t TARGETS

untuk melihat semua tipe yang tersedia. Sebagai contoh:

  1. menyalin sesuatu dari browser web Anda
  2. selidiki jenis yang tersedia
$ xclip -o -t TARGET
TIMESTAMP
SASARAN
GANDA
teks / html
text / _moz_htmlcontext
teks / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEKS
TALI
teks / x-moz-url-priv
  1. dapatkan konten untuk yang Anda minati: xclip -o -t text/html
neo
sumber
3

OK, saya sebenarnya telah menulis beberapa kode yang melakukan apa yang saya butuhkan. Untung itu cukup mudah di Qt.

Info bangunan ada di bagian bawah posting ini.

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)

Membangun info seperti yang diminta dalam komentar oleh @slm: itu tergantung pada sistem yang Anda gunakan. Kode ini membutuhkan Qt5 dan CMake untuk dikompilasi. Jika Anda memiliki keduanya, yang perlu Anda lakukan adalah menjalankan:

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

atau 'gmake' jika Anda menggunakan FreeBSD, atau 'mingw32-make' jika Anda menggunakan Windows, dll.

Jika Anda tidak memiliki Qt5 atau CMake, Anda dapat mencoba melepaskan Qt4 dan kompilasi manual:

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

Jika Anda mendapatkan informasi tentang --std=c++11opsi yang tidak valid , coba --std=c++0x, dan pertimbangkan untuk meningkatkan kompiler Anda;).

antonon
sumber
1
Terima kasih telah memposting solusi ini. Bisakah Anda menambahkan sedikit detail tentang cara mengompilasinya untuk pengunjung masa depan?
slm
2
@slm, antonone, saya telah menyederhanakan / mempersingkat kode Anda, juga harus lebih mudah untuk mengkompilasi seperti itu: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig