Pano içeriğini ve MIME türünü göstermeyi sağlayan uygulama?


9

Pano içeriğinin ayrıntılarını bana gösterebilecek bir uygulama arıyorum.

Bazı verileri panoya kopyalarken, veriler belirli bir MIME türüyle ilişkilendirilir. Normal metin text/plain, ikili veri olarak kopyalanabilir application/octet-stream, vb. İkili verileri kopyalayan, kendi MIME türü olarak etiketleyen bir uygulamam var ve bunun ne tür olduğunu ve hangi verilere sahip olduğunu görmek istiyorum.

Pano içeriğini hedef not defteri benzeri bir uygulamaya yapıştıramıyorum, çünkü hedef pano nesnesinin MIME türünü bekliyor text/plain.

Panoda şu anda var olan tüm MIME türlerini numaralandıran bir uygulama da yeterli olacaktır.

Yanıtlar:


7

Kullanım xclip:

xclip -o -t TARGETS

kullanılabilir tüm türleri görmek için. Örneğin:

  1. web tarayıcınızdan bir şey kopyalayın
  2. mevcut türleri araştır
$ xclip -o -t HEDEFLER
TIMESTAMP
HEDEFLERİ
BİRDEN
text / html
metin / _moz_htmlcontext
metin / _moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
METİN
STRING
metin / x-Moz-url-priv
  1. ilgilendiğiniz içeriği edinin: xclip -o -t text/html

Xclip tarafından erişilen varsayılan pano "birincil" dir. -selection clipboardAçıkça kopyalanan içeriği görmek için kullanın . Bkz. Superuser.com/questions/90257/… .
Raman

3

Tamam, aslında ihtiyacım olanı yapan bir kod yazdım. İyi bir şey Qt oldukça kolay.

Yapı bilgisi bu yazının altındadır.

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)

@Slm tarafından yapılan yorumda istendiği gibi bilgi oluşturma: kullandığınız sisteme bağlıdır. Bu kodun derlenmesi için Qt5 ve CMake gerekir. Her ikisine de sahipseniz, yapmanız gereken tek şey çalıştırmaktır:

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

veya FreeBSD kullanıyorsanız 'gmake' veya Windows vb. kullanıyorsanız 'mingw32-make'.

Qt5 veya CMake yoksa, Qt4 ve manuel derleme ile kurtulmayı deneyebilirsiniz:

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

Geçersiz --std=c++11seçenek hakkında bilgi alıyorsanız , --std=c++0xbunun yerine deneyin ve derleyicinizi yükseltmeyi düşünün;).


1
Bu çözümü gönderdiğiniz için teşekkür ederiz. Gelecekteki ziyaretçiler için nasıl derleneceği hakkında biraz ayrıntı ekleyebilir misiniz?
slm

2
@slm, antonone, Kodunuzu basitleştirdim / kısalttım, bu şekilde derlemek de daha kolay olmalı: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.