#include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); if (argc < 2) { printf("Usage: %s ''\n", argv[0]); return 1; } QWidget window; window.setWindowTitle("Shell Command Output Viewer"); window.setStyleSheet("background-color: black;"); QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); wl_surface *s = reinterpret_cast(native->nativeResourceForWindow("surface", window.windowHandle())); wl_surface_set_buffer_transform(s, WL_OUTPUT_TRANSFORM_270); wl_surface_commit(s); void *egl = native->nativeResourceForWindow("egldisplay", window.windowHandle()); assert(egl != nullptr); window.showFullScreen(); QVBoxLayout *layout = new QVBoxLayout(&window); QTextEdit *outputDisplay = new QTextEdit; outputDisplay->setFont(QFont("Consolas", 32)); outputDisplay->setReadOnly(true); outputDisplay->setStyleSheet("color: white; background-color: black;"); layout->addWidget(outputDisplay); QProcess process; QObject::connect(&process, &QProcess::readyReadStandardOutput, [&]() { static QStringList lines; QString output = process.readAllStandardOutput(); lines += output.split("\n", QString::SkipEmptyParts); while (lines.size() > 100) { lines.removeFirst(); } outputDisplay->setPlainText(lines.join("\n")); outputDisplay->verticalScrollBar()->setValue(outputDisplay->verticalScrollBar()->maximum()); }); QObject::connect(&process, QOverload::of(&QProcess::finished), [&]() { app.quit(); }); QString command = argv[1]; process.start(QString("bash -c \"%1\"").arg(command)); return app.exec(); }