Como mudar o diretório de trabalho ao abrir um arquivo com um clique duplo na área de trabalho do ubuntu?

10

Queria abrir um arquivo (arquivo .pdb: formato da estrutura da proteína, não importa) com um clique duplo.

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 abri, é crucial que eu queira acessá-los.

Eu acho que o "pymol" é executado em $ HOME enquanto o caminho absoluto do "arquivo pdb" (arquivo clicado duas vezes) é passado como argumento.

Eu acho que este é um problema geral e faça uma pergunta:

Como posso deixar o sistema alterar o "diretório de trabalho" para o "diretório em que cliquei no arquivo" e executar um programa?

Seungpyo Hong
fonte

Respostas:

16

Embora isso seja anos depois, aqui está o que funcionou para mim:

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

% k fornece o caminho do diretório do iniciador que você acabou de lançar.

TuxForLife
fonte
1
a% k não fez trabalho (nem% d), mas eu não precisava a parte -c festa
Marc Van Daele
1
Ainda bem que posso ajudar indiretamente. Você precisa da parte bash -c para definir ~corretamente. Você não precisa do bash -c se usar o caminho direto / home / marc.
TuxForLife 16/07/19
1
bash -c fez o trabalho. me ajudou muito graças :)
Muthu
2
O% k resolve para o caminho completo, incluindo o arquivo da área de trabalho, para cd "%k"que não funcione. Mas você pode usar cd "$(dirname %k)".
ivant
Estou confuso, por que você entra em um diretório usando "% k" e o comando logo após &&está executando algo relativo a ~?
vdegenne
5

Nenhuma das soluções acima funcionou no meu debian. Também %destá obsoleto. Consulte Especificação de entrada na área de trabalho .

Então, eu estou usando o seguinte script bash para executar pymol. Primeiro, você precisa criar o seguinte arquivo de script bash e salvá-lo /usr/local/bin/run_pymol.sh. Salvei o arquivo /usr/localporque parece que xdg-openele 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 $@

Segundo, 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 pymol.desktoparquivo da seguinte maneira e seu pymol será iniciado no diretório em que o primeiro arquivo especificado 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 :-)

Islisue
fonte
3
Eu era capaz de colocar Path=/my/pathe isso funcionou muito bem. Path - If entry is of type Application, the working directory to run the program in.
Ripster
2

Não entendo por que a solução lá em cima é tão votada, faz algo totalmente diferente. Ele altera o diretório de trabalho para aqueles onde está o arquivo .desktop, enquanto a pergunta 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'

Lembre-se de que definir variáveis ​​env para arquivos .desktop é diferente, assim

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

Você pode acessar /usr/share/applicationse encontrar o nome apropriado file.desktopsempre que abrir um tipo de arquivo específico. Em seguida, edite-o e execadicione na linha cd PATH &&o início da linha.

Mostafa Shahverdy
fonte
-1

ESTÁ BEM -

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

não funcionou para mim, pois PATH não está definido para apontar para o caminho de% F. As únicas variáveis ​​disponíveis em qualquer arquivo da área de trabalho de aplicativos são:

  • % fa nome do arquivo único.
  • % F vários nomes de arquivos.
  • % ua URL único.
  • % U vários URLs.
  • % da diretório único. Usado em conjunto com% f para localizar um arquivo.
  • % D vários diretórios. Usado em conjunto com% F para localizar arquivos.
  • % um nome de arquivo único sem um caminho.
  • % N vários nomes de arquivos sem caminhos.
  • % ka URI ou nome do arquivo local do local do arquivo da área de trabalho.
  • % v o nome da entrada do dispositivo.

Aí está:% d é o diretório único que você está procurando, pois 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ê precisa 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). Mude 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 este arquivo .pdb está, para que o pymol possa ver todos os seus arquivos.

Claro, você também pode iniciar o pymol a partir da linha de comando depois de navegar primeiro para o diretório em que seus arquivos estão, mas acho que você queria uma solução de GUI, portanto, é necessário fazer uma pequena edição :-)

user147058
fonte