Ứng dụng cho phép hiển thị nội dung clipboard và loại MIME của nó?


9

Tôi đang tìm kiếm một ứng dụng có thể hiển thị cho tôi các chi tiết về nội dung của bảng tạm.

Khi sao chép một số dữ liệu vào bảng tạm, dữ liệu được liên kết với một loại MIME cụ thể. Văn bản thông thường là text/plain, dữ liệu nhị phân có thể được sao chép application/octet-stream, v.v.

Tôi không thể chỉ dán nội dung clipboard vào một ứng dụng giống như notepad mục tiêu, bởi vì mục tiêu mong đợi loại MIME của đối tượng clipboard là text/plain.

Một ứng dụng liệt kê tất cả các loại đối tượng MIME hiện có trong bảng tạm cũng sẽ đủ.

Câu trả lời:


6

Sử dụng xclip:

xclip -o -t TARGETS

để xem tất cả các loại có sẵn. Ví dụ:

  1. sao chép một cái gì đó từ trình duyệt web của bạn
  2. điều tra các loại có sẵn
$ xclip -o -t MỤC TIÊU
THỜI GIAN
MỤC TIÊU
ĐA SỐ
văn bản / html
văn bản / _moz_htmlcontext
văn bản / _moz_htmlinfo
UTF8_STRING
SO SÁNH
BẢN VĂN
CHUỖI
văn bản / x-moz-url-private
  1. lấy nội dung cho người bạn quan tâm: xclip -o -t text/html

3

OK, tôi thực sự đã viết một số mã làm những gì tôi cần. Điều tốt là nó khá dễ dàng trong Qt.

Thông tin xây dựng là ở dưới cùng của bài này.

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)

Xây dựng thông tin theo yêu cầu trong nhận xét của @slm: tùy thuộc vào hệ thống bạn đang sử dụng. Mã này cần Qt5 và CMake để biên dịch. Nếu bạn có cả hai, tất cả những gì bạn cần làm là chạy:

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

hoặc 'gmake' nếu bạn đang sử dụng FreeBSD hoặc 'mingw32-make' nếu bạn đang ở trên Windows, v.v.

Nếu bạn không có Qt5 hoặc CMake, bạn có thể thử thoát khỏi Qt4 và biên dịch thủ công:

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

Nếu bạn nhận được thông tin về --std=c++11tùy chọn không hợp lệ , --std=c++0xthay vào đó hãy thử và xem xét nâng cấp trình biên dịch của bạn;).


1
Cảm ơn đã đăng giải pháp này. Bạn có thể thêm một chút chi tiết về cách biên dịch nó cho khách truy cập trong tương lai không?
slm

2
@slm, antonone, tôi đã đơn giản hóa / rút ngắn mã của bạn, cũng sẽ dễ dàng biên dịch theo cách đó: gist.github.com/gsauthof/c955f727606f4a5b0cc2
maxschlepzig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.