Abra un directorio en el administrador de archivos predeterminado y seleccione un archivo


9

En un programa que estoy escribiendo, quiero ofrecer la funcionalidad para abrir el directorio donde se encuentra el archivo que estoy procesando actualmente y seleccionar automáticamente ese archivo (para que el usuario no necesite buscarlo).

Sé que puedo abrir un directorio en el administrador de archivos predeterminado usando

xdg-open /path/to/directory

Sé que puedo abrir un directorio en nautilus y seleccionar un archivo usando

nautilus /path/to/file.txt

Yo pensé que podría utilizar

xdg-mime query default inode/directory

para obtener el administrador de archivos predeterminado y, si es nautilus, llámelo como se muestra arriba. Pero, a pesar de que nautilus es el valor predeterminado en mi sistema ( xdg-openabre nautilus y también el menú de lugares en el shell gnome), xdg-mimeregresa Thunar.desktop. (Lo intenté find / -name Thunar.desktop -mount 2>/dev/nullpero no encontré nada).

Además, no sé cómo abrir un directorio y seleccionar un sub directorio en Nautilus (con el enfoque mencionado anteriormente que abriría el subdirectorio).

¿Cómo puedo abrir un directorio en el administrador de archivos predeterminado y seleccionar un archivo en ese directorio (si seleccionar un directorio también fuera posible, sería genial, pero para esta aplicación no es necesario) o al menos encontrar el administrador de archivos predeterminado para que yo pueda puede llamarlo directamente?

Respuestas:


6

1. Para abrir un directorio y seleccionar un subdirectorio / archivo en nautilus:

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

Desde la página de manual de nautilus (1) :

-s, --seleccionar
  Seleccione el URI especificado en la carpeta principal.

2. xdg-mime vuelve Thunar.desktoppero se xdg-openabrenautilus

xdg-mimeutiliza mimeapps.listpara determinar la aplicación predeterminada que se utilizará.

mimeapps.listExisten archivos separados para manejar los requisitos específicos del usuario, específicos del sistema y específicos de la distribución. Su orden de búsqueda se puede encontrar aquí .

mimeapps.listenumera las aplicaciones predeterminadas para un tipo MIME determinado en la sección [Aplicaciones predeterminadas]. Permite enumerar múltiples aplicaciones predeterminadas en su orden decreciente de preferencia. Por ejemplo :

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

donde mimetype1 es el tipo mime y * .desktop son los archivos de escritorio.

xdg-openbusca el archivo de escritorio en el orden de búsqueda, en la lista de preferencias hasta que encuentra un archivo de escritorio válido. Si no se encuentra dicho archivo en todos los archivos, se elige el más preferido de acuerdo con las asociaciones y se utiliza como aplicación predeterminada.

Entonces, en el caso de nuestro ejemplo, supongamos default1.desktopque no está presente en nuestro sistema, por xdg-openlo que intentaremos abrir nuestro archivo usando default2.desktop. Sin embargo, xdg-mimedevuelve default1.desktopcuál es la primera entrada en nuestro mimeapps.listarchivo.

En su caso default1.desktopdebe ser, Thunar.desktoppor lo tanto, la salida. Sin embargo, no está instalado en su sistema. Entonces xdg-openabre su archivo / directorios usando el nautilusque está presente en su sistema. Para verificar esto, puede verificar que su mimeapps.listarchivo contenga una línea inode/directory. Para Ubuntu 17.10, la ubicación del mimeapps.listarchivo es:/usr/share/applications/defaults.list

NOTA: El algoritmo completo para determinar 'Aplicaciones predeterminadas' se puede encontrar aquí .


En caso de que algo haya quedado sin respuesta o si hay alguna confusión, deje un comentario.
Amit Singh

1
Su excelente respuesta parecía una pregunta en primer lugar (qué es un motivo de eliminación), podría confundir a los revisores, por lo que la edité un poco. Siéntase libre de retroceder si no está bien.
peterh - Restablece a Mónica

@peterh ¡Gracias por la edición! Lo tendré en cuenta para futuras respuestas.
Amit Singh

+1. Muchas gracias por tu respuesta. La primera parte funciona perfectamente. La segunda parte, junto con esta especificación, explica qué valores se suponen si las variables de entorno no están establecidas, explica por qué se devuelve Thunar.
jakun

1
Sin embargo, aún no puedo rastrear por qué se inicia Nautilus porque no se especifica en a mimeapps.list. ¿Puede explicar en qué consisten estas asociaciones "si después de que se manejan todos los archivos, aún no hemos encontrado una aplicación predeterminada, seleccione la aplicación más preferida (según las asociaciones) que admita el tipo"? ¿Conoces la forma de averiguar qué programa se iniciará automáticamente sin necesidad de volver a implementar este algoritmo?
jakun

0

Es posible que desee considerar el uso de dbus para abrir su archivo, ya que rápidamente se está volviendo más popular.

El concepto de un administrador de archivos "predeterminado" solo existe realmente si está centrado únicamente en xdg-mime, sin embargo, en dbus land, y de hecho la mayoría de las aplicaciones, la historia toma un giro diferente, y el concepto de un administrador de archivos "predeterminado" deja de existir.

Así es como abre un archivo ( /home/me/path/to/folder/or/file) en el administrador de archivos (¿predeterminado?), Usando 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:""

Lo que hace este comando es buscar cualquier servicio dbus que implemente la org.freedesktop.FileManager1interfaz y lo llame con la ruta al archivo que desea abrir.

La razón por la que pongo un signo de interrogación después del valor predeterminado es porque dbus no respeta el concepto de administrador de archivos "predeterminado"; todo lo que hace es enviar la llamada al primer servicio que encuentra que implementa la interfaz y le permite manejar la operación. Ahora puede ser que la aplicación que elija sea su administrador de archivos "predeterminado", pero eso no siempre es una garantía.

La mayoría de las aplicaciones modernas usarán dbusde forma predeterminada y luego recurrirán a xdg-mimesi la llamada dbus falla, así que esto es lo que te sugiero que hagas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.