Öffnen Sie ein Verzeichnis im Standard-Dateimanager und wählen Sie eine Datei aus

9

In einem Programm, das ich schreibe, möchte ich die Funktionalität anbieten, das Verzeichnis zu öffnen, in dem sich die Datei befindet, die ich gerade verarbeite, und diese Datei automatisch auszuwählen (damit der Benutzer nicht danach suchen muss).

Ich weiß, dass ich mit im Standard-Dateimanager ein Verzeichnis öffnen kann

xdg-open /path/to/directory

Ich weiß, dass ich ein Verzeichnis in Nautilus öffnen und eine Datei mit auswählen kann

nautilus /path/to/file.txt

Ich dachte , ich könnte es gebrauchen

xdg-mime query default inode/directory

Um den Standard-Dateimanager zu erhalten und - wenn es sich um Nautilus handelt - rufen Sie ihn wie oben gezeigt auf. Trotz der Tatsache, dass Nautilus die Standardeinstellung auf meinem System ist ( xdg-openöffnet Nautilus und das Ortsmenü in der Gnome-Shell), wird xdg-mimezurückgegeben Thunar.desktop. (Ich habe es versucht, find / -name Thunar.desktop -mount 2>/dev/nullaber es wurde nichts gefunden.)

Auch ich weiß nicht , wie ein Verzeichnis zu öffnen und einen Unter wählen Verzeichnis in Nautilus (mit dem oben genannten Ansatz wäre es das Unterverzeichnis öffnen).

Wie kann ich ein Verzeichnis im Standard-Dateimanager öffnen und eine Datei in diesem Verzeichnis auswählen (wenn auch die Auswahl eines Verzeichnisses möglich wäre, wäre das großartig, aber für diese Anwendung nicht erforderlich) oder zumindest den Standard-Dateimanager herausfinden, damit ich kann es direkt anrufen?

Jakun
quelle

Antworten:

6

1. So öffnen Sie ein Verzeichnis und wählen ein Unterverzeichnis / eine Datei in nautilus aus:

nautilus --select path/to/file/or/directory

Aus der Manpage von nautilus (1) :

-s, --select
  Wählen Sie den angegebenen URI im übergeordneten Ordner aus.

2. xdg-mime kehrt zurück Thunar.desktop, xdg-openöffnet sich abernautilus

xdg-mimewird verwendet mimeapps.list, um die zu verwendende Standardanwendung zu bestimmen.

Es sind separate mimeapps.listDateien vorhanden, um benutzerspezifische, systemspezifische und verteilungsspezifische Anforderungen zu erfüllen. Ihre Suchreihenfolge finden Sie hier .

mimeapps.listlistet Standardanwendungen für einen bestimmten Mimetyp im Abschnitt [Standardanwendungen] auf. Es ermöglicht die Auflistung mehrerer Standardanwendungen in absteigender Reihenfolge. Beispielsweise :

[Default Applications]
mimetype1 = default1.desktop;default2.desktop;

Dabei ist mimetype1 der MIME-Typ und * .desktop die Desktop-Dateien.

xdg-openSucht in der Suchreihenfolge in der Einstellungsliste nach Desktop-Dateien, bis eine gültige Desktop-Datei gefunden wird. Wenn in allen Dateien keine solche Datei gefunden wird, wird die gemäß den Zuordnungen am meisten bevorzugte ausgewählt und als Standardanwendung verwendet.

Nehmen wir im Fall unseres Beispiels an, dass default1.desktopes auf unserem System nicht vorhanden ist, xdg-openund versuchen Sie daher, unsere Datei mit zu öffnen default2.desktop. Gibt jedoch xdg-mimezurück, default1.desktopwas der erste Eintrag in unserer mimeapps.listDatei ist.

In Ihrem Fall default1.desktopmuss Thunar.desktopdaher die Ausgabe sein. Es ist jedoch nicht auf Ihrem System installiert. So xdg-openöffnet die Dateien / Verzeichnisse mit , nautilusdie auf dem System vorhanden ist. Um dies zu überprüfen, können Sie Ihre mimeapps.listDatei auf Zeilen überprüfen inode/directory. Für Ubuntu 17.10 mimeapps.listlautet der Speicherort der Datei:/usr/share/applications/defaults.list

HINWEIS: Den vollständigen Algorithmus zur Ermittlung der Standardanwendungen finden Sie hier .

Amit Singh
quelle
Falls etwas unbeantwortet geblieben ist oder Verwirrung herrscht, schreiben Sie einen Kommentar.
Amit Singh
1
Ihre ausgezeichnete Antwort sah auf den ersten Blick wie eine Frage aus (was ist ein Löschgrund), sie könnte die Rezensenten irreführen, deshalb habe ich sie ein wenig bearbeitet. Fühlen Sie sich frei, einen Rollback durchzuführen, wenn dies nicht in Ordnung ist.
Peterh
@ Peterh Danke für die Bearbeitung! Ich werde es für zukünftige Antworten berücksichtigen.
Amit Singh
+1. Vielen Dank für Ihre Antwort. Der erste Teil funktioniert perfekt. Der zweite Teil erklärt zusammen mit dieser Spezifikation, welche Werte angenommen werden, wenn die Umgebungsvariablen nicht gesetzt sind , warum Thunar zurückgegeben wird.
Jakun
1
Ich kann jedoch immer noch nicht nachvollziehen, warum Nautilus gestartet wurde, da es nicht in a angegeben ist mimeapps.list. Können Sie erklären, in was sich diese Zuordnungen befinden? "Wenn nach der Verarbeitung aller Dateien noch keine Standardanwendung gefunden wurde, wählen Sie die am meisten bevorzugte Anwendung (nach Zuordnungen) aus, die den Typ unterstützt"? Wissen Sie, wie Sie herausfinden können, welches Programm automatisch gestartet wird, ohne dass dieser Algorithmus erneut implementiert werden muss?
Jakun
0

Möglicherweise möchten Sie dbus zum Öffnen Ihrer Datei verwenden, da diese schnell immer beliebter wird.

Das Konzept eines "Standard" -Dateimanagers gibt es nur dann wirklich, wenn Sie sich ausschließlich auf xdg-mimedbus konzentrieren. In der Tat nimmt die Geschichte bei den meisten Anwendungen eine andere Wendung und das Konzept eines "Standard" -Dateimanagers hört auf zu existieren.

So öffnen Sie eine Datei ( /home/me/path/to/folder/or/file) im (Standard?) Dateimanager mit dbus:

dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file:///home/me/path/to/folder/or/file" string:""

Dieser Befehl sucht nach einem dbus-Dienst, der die org.freedesktop.FileManager1Schnittstelle implementiert , und ruft ihn mit dem Pfad zu der Datei auf, die Sie öffnen möchten.

Der Grund, warum ich nach dem Standard ein Fragezeichen setze, ist, dass dbus das Konzept des "Standard" -Dateimanagers nicht respektiert. Alles, was es tut, ist den Anruf an den ersten Dienst zu senden, den es findet, der die Schnittstelle implementiert und die Operation ausführen lässt. Nun kann es sein, dass die ausgewählte Anwendung Ihr "Standard" -Dateimanager ist, aber das ist nicht immer eine Garantie.

Die meisten modernen Anwendungen werden dbusstandardmäßig verwendet und greifen dann darauf zurück, xdg-mimewenn der dbus-Aufruf fehlschlägt. Ich würde Ihnen daher empfehlen, dies zu tun.

smac89
quelle