¿Cómo cambiar el directorio de trabajo al abrir un archivo haciendo doble clic en el escritorio de ubuntu?

10

Quería abrir un archivo (archivo .pdb: formato de estructura de proteína, no importa) haciendo doble clic.

El "abrir con" está dirigido manualmente para ejecutar "pymol" (un programa que abre el formato .pdb) con Ubuntu Tweak.

Sin embargo, descubrí que el directorio de trabajo es $ HOME.

Como otros archivos en el directorio que abrí es crucial, quiero acceder a ellos.

Supongo que el "pymol" se ejecuta en $ HOME mientras que la ruta absoluta del "archivo pdb" (archivo con doble clic) se pasa como argumento.

Supongo que este es un problema general y hacer una pregunta:

¿Cómo puedo dejar que el sistema cambie el "directorio de trabajo" al "directorio donde hice clic en el archivo" y ejecute un programa?

Seungpyo Hong
fuente

Respuestas:

16

Aunque esto es años después, esto es lo que funcionó para mí:

Exec=bash -c 'cd "%k" && ~/path/to/your/file'

% k te da la ruta del directorio del lanzador que acabas de lanzar.

TuxForLife
fuente
1
el% k no funcionó (ni% d) pero sí necesitaba la parte bash -c
Marc Van Daele
1
Me alegro de poder ayudar indirectamente. Necesita la parte bash -c para definir ~correctamente. No necesita bash -c si usa la ruta directa / home / marc.
TuxForLife
1
bash -c hizo el trabajo. me ayudó mucho gracias :)
Muthu
2
El% k se resuelve en la ruta completa, incluido el archivo de escritorio, por cd "%k"lo que no funcionará. Pero puedes usar cd "$(dirname %k)".
ivant
Estoy confundido, ¿por qué vas en un directorio usando "% k" y luego el comando justo después &&está ejecutando algo relativo ~?
vdegenne
5

Ninguna de las soluciones anteriores funcionó en mi Debian. También %destá en desuso. Ver la especificación de entrada de escritorio .

Así que estoy usando el siguiente script bash para ejecutar pymol. Primero debe crear el siguiente archivo de script bash y guardarlo /usr/local/bin/run_pymol.sh. Guardé el archivo /usr/localporque parece xdg-openque no comprende qué es el directorio HOME, etc.

#!/usr/bin/env bash
# change working directory
cd `dirname $1`
# run pymol
/usr/bin/env pymol $@

Segundo, otorgue el permiso ejecutable a ese archivo. Abra una terminal y escriba los siguientes comandos para otorgar un permiso y confirmar.

% chmod +x /usr/local/bin/run_pymol.sh
% run_pymol.sh

Finalmente, modifique su pymol.desktoparchivo de la siguiente manera y luego su pymol comenzará en el directorio donde se encuentra el primer archivo dado.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=PyMOL Molecular Graphics System
GenericName=Molecular Modeller
Comment=Model molecular structures and produce high-quality images of them
Type=Application
Exec=/usr/local/bin/run_pymol.sh %U
TryExec=pymol
Icon=pymol
MimeType=chemical/x-pdb
Categories=Education;Science;Chemistry;

Espero que les ayude chicos :-)

Λlista
fuente
3
Pude poner Path=/my/pathy eso funcionó bien. Path - If entry is of type Application, the working directory to run the program in.
Ripster
2

No entiendo por qué la solución allí arriba fue tan votada, que hace algo absolutamente diferente. Cambia el directorio de trabajo a aquellos donde está el archivo .desktop, mientras que la pregunta estaba a punto de cambiar el directorio de trabajo a aquellos con archivos abiertos.

Mi solución:

Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'

Tenga en cuenta que establecer variables env para archivos .desktop es diferente, como así

Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
Narical
fuente
0

Puede ir /usr/share/applicationsy encontrar el correcto file.desktopque se llama cada vez que abre un tipo de archivo específico. Luego edítelo y en la execlínea agregue cd PATH &&al inicio de la línea.

Mostafa Shahverdy
fuente
-1

OKAY -

Exec=cd PATH &&  <application-name> %F

no funcionó para mí ya que PATH no está definido para apuntar a la ruta de% F. Las únicas variables disponibles en cualquier archivo de escritorio de aplicaciones son:

  • % fa nombre de archivo único.
  • % F nombres de archivos múltiples.
  • % ua URL única.
  • % U URL múltiples.
  • % da directorio único. Se usa junto con% f para localizar un archivo.
  • % D múltiples directorios. Se usa junto con% F para localizar archivos.
  • % un nombre de archivo único sin una ruta.
  • % N nombres de archivos múltiples sin rutas.
  • % ka URI o nombre de archivo local de la ubicación del archivo de escritorio.
  • % v el nombre de la entrada del dispositivo.

Ahí está:% d es el directorio único que está buscando, ya que no tiene sentido cambiar a varios directorios. Vaya a / usr / share / aplicaciones y edite el archivo nombre-aplicación.desktop (en su caso pymol.desktop); tienes que tener privilegios de superusuario para hacer eso. Luego ubique la línea que comienza con "Exec =". Probablemente se lee

Exec=<application-name> %F

(En su caso, Exec = pymol% F). Cambie esta línea a

Exec=cd %d && <application-name> %F

Guarde ese archivo de escritorio, y la próxima vez que haga clic en un archivo .pdb, su directorio de trabajo debe ser el único en el que se encuentra este archivo .pdb, para que pymol pueda ver todos sus archivos allí.

Por supuesto, también puede iniciar pymol desde la línea de comandos después de haber navegado por primera vez al directorio donde están sus archivos, pero supongo que quería una solución GUI, por lo que debe editar un poco :-)

usuario147058
fuente