Comment changer de répertoire de travail lors de l'ouverture d'un fichier en double-cliquant sur le bureau Ubuntu?

10

Je voulais ouvrir un fichier (fichier .pdb: format de structure protéique, peu importe) par un double-clic.

Le "ouvrir avec" est dirigé manuellement pour exécuter "pymol" (un programme qui ouvre le format .pdb) avec Ubuntu Tweak.

Cependant, j'ai trouvé que le répertoire de travail est $ HOME.

Comme les autres fichiers du répertoire que j'ai ouvert sont cruciaux, je veux y accéder.

Je suppose que le "pymol" est exécuté sur $ HOME tandis que le chemin absolu du "fichier pdb" (fichier double-cliqué) est passé en argument.

Je suppose que c'est un problème quelque peu général et posez une question:

Comment laisser le système changer le "répertoire de travail" en "répertoire où j'ai cliqué sur le fichier" et exécuter un programme?

Seungpyo Hong
la source

Réponses:

16

Bien que ce soit des années plus tard, voici ce qui a fonctionné pour moi:

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

% k vous donne le chemin du répertoire du lanceur que vous venez de lancer.

TuxForLife
la source
1
le% k n'a pas fonctionné (ni% d) mais j'avais besoin de la partie bash -c
Marc Van Daele
1
Heureux de pouvoir aider indirectement. Vous avez besoin de la partie bash -c pour définir ~correctement. Vous n'avez pas besoin de bash -c si vous utilisez le chemin direct / home / marc.
TuxForLife
1
bash -c a fait le travail. m'a beaucoup aidé merci :)
Muthu
2
Le% k résout le chemin complet, y compris le fichier de bureau, donc cd "%k"ne fonctionnera pas. Mais vous pouvez utiliser cd "$(dirname %k)".
ivant
Je suis confus, pourquoi allez-vous dans un répertoire en utilisant "% k" et ensuite la commande juste après &&exécute quelque chose par rapport à ~?
vdegenne
5

Aucune des solutions ci-dessus n'a fonctionné sur mon debian. Est également %dobsolète. Voir Spécifications d'entrée de bureau .

J'utilise donc le script bash suivant pour exécuter pymol. Vous devez d'abord créer le fichier de script bash suivant et l'enregistrer /usr/local/bin/run_pymol.sh. J'ai enregistré le fichier /usr/localcar il semble que le xdg-openne comprenne pas ce qu'est le répertoire HOME, etc.

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

Deuxièmement, accordez l'autorisation exécutable à ce fichier. Ouvrez un terminal et tapez les commandes suivantes pour accorder une autorisation et confirmer.

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

Enfin, modifiez votre pymol.desktopfichier comme suit et votre pymol démarrera dans le répertoire où se trouve le premier fichier donné.

#!/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;

J'espère que cela vous aide les gars :-)

Λlisue
la source
3
J'ai pu mettre Path=/my/pathet cela a très bien fonctionné. Path - If entry is of type Application, the working directory to run the program in.
Ripster du
2

Je ne comprends pas pourquoi la solution là-haut a été si bien votée, elle fait une chose absolument différente. Il change le répertoire de travail en ceux où se trouve le fichier .desktop, alors que la question était sur le point de changer le répertoire de travail en ceux avec le (s) fichier (s) ouvert (s).

Ma solution:

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

Gardez à l'esprit que la définition des variables env pour les fichiers .desktop est différente, comme

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

Vous pouvez aller sur /usr/share/applicationset trouver la bonne file.desktopqui est appelée chaque fois que vous ouvrez un type de fichier spécifique. Modifiez-le ensuite et execajoutez dans la ligne cd PATH &&au début de la ligne.

Mostafa Shahverdy
la source
-1

D'ACCORD -

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

n'a pas fonctionné pour moi car PATH n'est pas défini pour pointer vers le chemin de% F. Les seules variables disponibles dans n'importe quel fichier de bureau d'applications sont:

  • % fa nom de fichier unique.
  • % F plusieurs noms de fichiers.
  • % uune URL unique.
  • % U URL multiples.
  • % da un seul répertoire. Utilisé conjointement avec% f pour localiser un fichier.
  • % D répertoires multiples. Utilisé conjointement avec% F pour localiser les fichiers.
  • % na nom de fichier unique sans chemin.
  • % N noms de fichiers multiples sans chemins.
  • % ka URI ou nom de fichier local de l'emplacement du fichier de bureau.
  • % v le nom de l'entrée de périphérique.

Voilà:% d est le répertoire unique que vous recherchez, car il n'est pas logique de passer à plusieurs répertoires. Allez donc dans / usr / share / applications et éditez le fichier nom-application.desktop (dans votre cas pymol.desktop); vous devez avoir des privilèges de superutilisateur pour ce faire. Recherchez ensuite la ligne commençant par "Exec =". Il lit probablement

Exec=<application-name> %F

(Dans votre cas, Exec = pymol% F). Remplacez cette ligne par

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

Enregistrez ce fichier de bureau et la prochaine fois que vous cliquerez sur un fichier .pdb, votre répertoire de travail devrait être celui dans lequel se trouve ce fichier .pdb, afin que pymol puisse y voir tous vos fichiers.

Bien sûr, vous pouvez également démarrer pymol à partir de la ligne de commande après avoir d'abord navigué vers le répertoire où se trouvent vos fichiers, mais je suppose que vous vouliez une solution GUI, vous devez donc faire un peu d'édition :-)

user147058
la source