GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalten Sie das Symbol, den MIME-Typ und die Anwendung, die einer Datei auf dem Linux-Desktop zugeordnet sind?

Hier ist ein Beispiel für die Verwendung von GLib/GIO, um die gewünschten Informationen zu erhalten.

#include <gio/gio.h>
#include <stdio.h>

int
main (int argc, char **argv)
{
    g_thread_init (NULL);
    g_type_init ();

    if (argc < 2)
        return -1;

    GError *error;
    GFile *file = g_file_new_for_path (argv[1]);
    GFileInfo *file_info = g_file_query_info (file,
                                              "standard::*",
                                              0,
                                              NULL,
                                              &error);

    const char *content_type = g_file_info_get_content_type (file_info);
    char *desc = g_content_type_get_description (content_type);
    GAppInfo *app_info = g_app_info_get_default_for_type (
                                  content_type,
                                  FALSE);

    /* you'd have to use g_loadable_icon_load to get the actual icon */
    GIcon *icon = g_file_info_get_icon (file_info);

    printf ("File: %s\nDescription: %s\nDefault Application: %s\n",
            argv[1],
            desc,
            g_app_info_get_executable (app_info));

    return 0;
}

Sie können dafür die von xdg verfügbaren Tools verwenden, insbesondere xdg-mime query .

Um den Dateityp von z.B. eine Datei index.html du würdest

$ xdg-mime query filetype index.html

Dies gibt den Mimetyp zurück. Um abzufragen, welche Anwendung mit diesem Mimetye verknüpft ist, verwenden Sie z. B.

$ xdg-mime query default text/html

Dies gibt epiphany.desktop zurück hier, also $APPNAME.desktop , daher ist es einfach, den Anwendungsnamen daraus abzurufen. Wenn Sie die Datei nur in der Standard-App öffnen möchten, können Sie sie natürlich auch einfach ausführen

$ xdg-open index.html

was Epiphanie auslösen würde.

Abfragefunktionen für Icon-Ressourcen scheinen in xdg-utils nicht verfügbar zu sein , aber Sie könnten mit pyxdg ein kleines Python-Skript schreiben, das auch jede Menge zusätzlicher Funktionen bietet.

Für C-Bindungen müssen Sie sich wahrscheinlich den Portland-Code ansehen, der auf der xdg-Seite verlinkt ist.

BEARBEITEN:

Zu libmagic und Freunde, Sie müssen sich für Ihre Präferenzen entscheiden:Während libmagic in Bezug auf die Abdeckung von Dateitypen vollständiger (und genauer) zu sein scheint, kümmert es sich überhaupt nicht darum Informationen zu Standardanwendungen oder Symbolen. Es stellt Ihnen auch keine Tools zur Verfügung, um zusätzliche Mimetypen zu installieren.


In Qt>=4.6 gibt es eine neue Funktion für X11-Systeme

QIcon QIcon::fromTheme ( const QString & name, const QIcon & fallback = QIcon() ) [static]

Sie können diese Funktion verwenden. Dokumentation hier / (Qt 5)


Linux
  1. Wie sind Sie zu Linux gekommen?

  2. So erfassen Sie Terminalsitzungen und geben sie mit dem Linux-Skriptbefehl aus

  3. Wie finde ich die Anwendung für einen Mime-Typ unter Linux?

  4. Wie kann ich ein Symbol mit einem RELATIVEN Pfad für eine Linux-Desktop-Eintragsdatei angeben?

  5. Wie bekomme ich nur den Dateinamen mit Linux 'find'?

Erstellen Sie mit dem Linux MLVWM einen Retro-Apple-Desktop

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So bestimmen Sie den MIME-Typ einer Datei in Linux

So erhalten Sie den Dateinamen aus dem vollständigen Pfad in Linux

Wie man mit Hardlinks und Softlinks unter Linux arbeitet

Wie bekomme ich die Datei-/Ordnergröße mit SSH unter Linux?