Ouvrez un répertoire dans le gestionnaire de fichiers par défaut et sélectionnez un fichier

9

Dans un programme que j'écris, je veux offrir la fonctionnalité d'ouvrir le répertoire où se trouve le fichier que je traite actuellement et de sélectionner automatiquement ce fichier (afin que l'utilisateur n'ait pas besoin de le rechercher).

Je sais que je peux ouvrir un répertoire dans le gestionnaire de fichiers par défaut en utilisant

xdg-open /path/to/directory

Je sais que je peux ouvrir un répertoire dans nautilus et sélectionner un fichier en utilisant

nautilus /path/to/file.txt

Je pensais pouvoir utiliser

xdg-mime query default inode/directory

pour obtenir le gestionnaire de fichiers par défaut et - s'il s'agit de nautilus - appelez-le comme indiqué ci-dessus. Mais, malgré le fait que nautilus est la valeur par défaut sur mon système ( xdg-openouvre nautilus et le menu des lieux dans le gnome shell aussi), xdg-mimerevient Thunar.desktop. (J'ai essayé find / -name Thunar.desktop -mount 2>/dev/nullmais il n'a rien trouvé.)

De plus, je ne sais pas comment ouvrir un répertoire et sélectionner un sous- répertoire dans nautilus (avec l'approche mentionnée ci-dessus, il ouvrirait le sous-répertoire).

Comment puis-je ouvrir un répertoire dans le gestionnaire de fichiers par défaut et sélectionner un fichier dans ce répertoire (si la sélection d'un répertoire était également possible, ce serait bien, mais pour cette application non nécessaire) ou au moins trouver le gestionnaire de fichiers par défaut pour que je peut l'appeler directement?

jakun
la source

Réponses:

6

1. Pour ouvrir un répertoire et sélectionner un sous-répertoire / fichier dans nautilus:

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

Depuis la page de manuel nautilus (1) :

-s, --select
  Sélectionnez l'URI spécifié dans le dossier parent.

2. xdg-mime revient Thunar.desktopmais xdg-openouvrenautilus

xdg-mimeutilise mimeapps.listpour déterminer l'application par défaut à utiliser.

Des mimeapps.listfichiers distincts existent pour gérer les exigences spécifiques à l'utilisateur, spécifiques au système et spécifiques à la distribution. Leur ordre de recherche peut être trouvé ici .

mimeapps.listrépertorie les applications par défaut pour un type de mime donné dans la section [Applications par défaut]. Il permet de lister plusieurs applications par défaut dans leur ordre de préférence décroissant. Par exemple :

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

mimetype1 est le type mime et * .desktop sont les fichiers du bureau.

xdg-openrecherche un fichier de bureau dans l'ordre de recherche, dans la liste de préférences jusqu'à ce qu'il trouve un fichier de bureau valide. Si aucun fichier de ce type n'est trouvé dans tous les fichiers, le plus préféré selon les associations est choisi et est utilisé comme application par défaut.

Donc, dans le cas de notre exemple, supposons qu'il default1.desktopne soit pas présent sur notre système, alors xdg-openessayez d'ouvrir notre fichier en utilisant default2.desktop. Cependant, xdg-mimerenvoie default1.desktopce qui est la première entrée de notre mimeapps.listfichier.

Dans votre cas default1.desktopdoit être Thunar.desktopdonc la sortie. Cependant, il n'est pas installé sur votre système. xdg-openOuvre donc votre fichier / répertoires en utilisant nautilusce qui est présent sur votre système. Pour vérifier cela, vous pouvez vérifier votre mimeapps.listfichier pour la ligne contenant inode/directory. Pour Ubuntu 17.10, l'emplacement du mimeapps.listfichier est:/usr/share/applications/defaults.list

REMARQUE: l' algorithme complet pour déterminer les «applications par défaut» peut être trouvé ici .

Amit Singh
la source
Dans le cas où quelque chose est resté sans réponse ou en cas de confusion, laissez un commentaire.
Amit Singh
1
Votre excellente réponse ressemblait à une question à première vue (ce qui est une raison de suppression), elle pourrait induire en erreur les évaluateurs, alors je l'ai modifiée un peu. N'hésitez pas à revenir en arrière si ce n'est pas correct.
peterh
@peterh Merci pour la modification! Je garderai cela à l'esprit pour les réponses futures.
Amit Singh
+1. Merci beaucoup pour votre réponse. La première partie fonctionne parfaitement. La deuxième partie avec cette spécification expliquant quelles valeurs sont supposées si les variables d'environnement ne sont pas définies explique pourquoi Thunar est retourné.
jakun
1
Cependant, je ne peux toujours pas retracer pourquoi Nautilus est démarré car il n'est pas spécifié dans a mimeapps.list. Pouvez-vous expliquer en quoi consistent ces associations "si une fois tous les fichiers traités, nous n'avons pas encore trouvé d'application par défaut, sélectionnez l'application la plus préférée (selon les associations) qui prend en charge le type"? Connaissez-vous un moyen de savoir quel programme sera démarré automatiquement sans avoir besoin de réimplémenter cet algorithme?
jakun
0

Vous voudrez peut-être envisager d'utiliser dbus pour ouvrir votre fichier car il devient rapidement plus populaire.

Le concept d'un gestionnaire de fichiers "par défaut" n'existe vraiment que si vous vous concentrez uniquement sur xdg-mime, cependant dans dbus land, et en effet la majorité des applications là-bas, l'histoire prend une tournure différente, et le concept d'un gestionnaire de fichiers "par défaut" cesse d'exister.

Voici comment ouvrir un fichier ( /home/me/path/to/folder/or/file) dans le gestionnaire de fichiers (par défaut?), En utilisant 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:""

Ce que cette commande fait est de rechercher tout service dbus qui implémente l' org.freedesktop.FileManager1interface et l'appelle avec le chemin d'accès au fichier que vous souhaitez ouvrir.

La raison pour laquelle je mets un point d'interrogation après défaut est que dbus ne respecte pas le concept de gestionnaire de fichiers "par défaut"; il ne fait qu'appeler le premier service qu'il trouve qui implémente l'interface et lui permet de gérer l'opération. Maintenant, il se peut que l'application choisie soit votre gestionnaire de fichiers "par défaut", mais ce n'est pas toujours une garantie.

La plupart des applications modernes utiliseront dbuspar défaut puis reviendront en xdg-mimecas d'échec de l'appel dbus, c'est donc ce que je vous suggère de faire.

smac89
la source