Embora isso seja anos depois, eis o que funcionou para mim:
Exec=bash -c 'cd "%k" && ~/path/to/your/file'
% k fornece o caminho do diretório do lançador que você acabou de lançar.
Queria abrir um arquivo (arquivo .pdb: formato de estrutura de proteína, não importa) clicando duas vezes.
O "open with" é direcionado manualmente para executar o "pymol" (um programa que abre o formato .pdb) com o Ubuntu Tweak.
No entanto, descobri que o diretório de trabalho é $ HOME.
Como outros arquivos no diretório que eu abri o arquivo é crucial, eu quero acessá-los.
Eu acho que o "pymol" é executado em $ HOME enquanto o caminho absoluto do "arquivo pdb" (arquivo clicado duas vezes) é passado como um argumento.
Acho que isso é um problema geral e faço uma pergunta:
Como posso deixar o sistema alterar o "diretório de trabalho" para o diretório "onde eu cliquei no arquivo" e executar um programa?
Embora isso seja anos depois, eis o que funcionou para mim:
Exec=bash -c 'cd "%k" && ~/path/to/your/file'
% k fornece o caminho do diretório do lançador que você acabou de lançar.
Nenhuma das soluções acima funcionou no meu debian. Também %d
está obsoleto. Consulte Especificação de entrada na área de trabalho .
Estou usando o seguinte script para rodar o pymol.
Primeiro você precisa criar o seguinte arquivo de script e salvá-lo em /usr/local/bin/run_pymol.sh
. Salvei o arquivo em /usr/local
porque parece que o xdg-open
não entende o que é o diretório HOME ou assim por diante.
#!/usr/bin/env bash
# change working directory
cd 'dirname $1'
# run pymol
/usr/bin/env pymol $@
Em segundo lugar, dê a permissão executável para esse arquivo. Abra um terminal e digite os seguintes comandos para dar uma permissão e confirmar.
% chmod +x /usr/local/bin/run_pymol.sh
% run_pymol.sh
Por fim, modifique seu arquivo pymol.desktop
como o seguinte e, em seguida, seu pymol será iniciado
no diretório onde o primeiro arquivo fornecido está localizado.
#!/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 ajude vocês: -)
Você pode ir para /usr/share/applications
e encontrar o file.desktop
que é chamado sempre que abrir um tipo de arquivo específico. Em seguida, edite-o e, em exec
line, adicione cd PATH &&
ao início da linha.
Eu não entendo por que a solução lá em cima está tão defasada, faz algo totalmente diferente. Ele muda o diretório de trabalho para aqueles onde o arquivo .desktop está, enquanto a questão estava prestes a mudar o diretório de trabalho para aqueles com arquivo (s) aberto (s).
Minha solução:
Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'
Tenha em mente que a configuração de variáveis env para arquivos .desktop é diferente, assim
Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
OK -
Exec=cd PATH && <application-name> %F
não funcionou para mim, pois o PATH não está definido para apontar para o caminho de% F. As únicas variáveis disponíveis em qualquer arquivo de área de trabalho de aplicativos são:
Aí está:% d é o único diretório que você está procurando, já que não faz sentido mudar para vários diretórios. Então vá para / usr / share / applications e edite o arquivo application-name.desktop (no seu caso pymol.desktop); você tem que ter privilégios de superusuário para fazer isso. Em seguida, localize a linha que começa com "Exec=". Provavelmente lê
Exec=<application-name> %F
(No seu caso Exec = pymol% F). Altere esta linha para
Exec=cd %d && <application-name> %F
Salve esse arquivo da área de trabalho e, da próxima vez que você clicar em um arquivo .pdb, seu diretório de trabalho deverá ser aquele em que o arquivo .pdb está, para que o pymol possa ver todos os seus arquivos.
Naturalmente, você também pode iniciar o pymol a partir da linha de comando depois de navegar pela primeira vez para o diretório onde estão seus arquivos, mas eu acho que você queria uma solução GUI, então você precisa editar um pouco: -)