Jak zmienić katalog roboczy po otwarciu pliku podwójnym kliknięciem na pulpicie Ubuntu?

10

Chciałem otworzyć plik (plik .pdb: format struktury białka, nieważne) przez podwójne kliknięcie.

„Otwórz za pomocą” jest ręcznie kierowane, aby uruchomić „pymol” (program, który otwiera format .pdb) za pomocą Ubuntu Tweak.

Odkryłem jednak, że katalog roboczy to $ HOME.

Ponieważ inne pliki w katalogu, które otworzyłem, plik ma kluczowe znaczenie, chcę uzyskać do nich dostęp.

Wydaje mi się, że „pymol” jest wykonywany w $ HOME, podczas gdy bezwzględna ścieżka do pliku „pdb” (plik podwójnego kliknięcia) jest przekazywana jako argument.

Myślę, że jest to dość ogólny problem i zadaj pytanie:

Jak mogę pozwolić systemowi zmienić „katalog roboczy” na „katalog, w którym kliknąłem plik” i uruchomić program?

Seungpyo Hong
źródło

Odpowiedzi:

16

Chociaż to jest lata później, oto co dla mnie zadziałało:

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

% k podaje ścieżkę do katalogu właśnie uruchomionego programu uruchamiającego.

TuxForLife
źródło
1
% k nie działał (ani% d), ale potrzebowałem części bash -c
Marc Van Daele
1
Cieszę się, że mogę pośrednio pomóc. Potrzebujesz części bash -c, aby ~poprawnie zdefiniować . Nie potrzebujesz bash -c, jeśli używasz ścieżki direct / home / marc.
TuxForLife,
1
bash -c wykonał zadanie. bardzo mi pomogło dzięki :)
Muthu,
2
% K rozpoznaje pełną ścieżkę, w tym plik pulpitu, więc cd "%k"nie będzie działać. Ale możesz użyć cd "$(dirname %k)".
ivant
Jestem zdezorientowany, dlaczego wchodzisz do katalogu, używając „% k”, a następnie polecenie &&wykonuje coś względnego ~?
vdegenne
5

Żadne z powyższych rozwiązań nie działało na moim debianie. %dJest również przestarzałe. Zobacz specyfikację wpisu na pulpicie .

Więc używam następującego skryptu bash do uruchomienia pymola. Najpierw musisz utworzyć następujący plik skryptu bash i zapisać go w /usr/local/bin/run_pymol.sh. Zapisałem plik, /usr/localponieważ wygląda na xdg-opento, że nie rozumie on, co to jest katalog HOME itp.

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

Po drugie, zezwól na plik wykonywalny. Otwórz terminal i wpisz następujące polecenia, aby udzielić pozwolenia i potwierdzić.

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

Na koniec zmodyfikuj pymol.desktopplik w następujący sposób, a następnie pymol uruchomi się w katalogu, w którym znajduje się pierwszy dany plik.

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

Mam nadzieję, że to wam pomoże :-)

Uelisue
źródło
3
Byłem w stanie postawić Path=/my/pathi to działało dobrze. Path - If entry is of type Application, the working directory to run the program in.
Ripster,
2

Nie rozumiem, dlaczego rozwiązanie tak entuzjastyczne, robi zupełnie inną rzecz. Zmienia katalog roboczy na te, w których znajduje się plik .desktop, a pytanie dotyczyło zmiany katalogu roboczego na te z otwartymi plikami.

Moje rozwiązanie:

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

Pamiętaj, że ustawianie zmiennych env dla plików .desktop jest inne

Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
Narical
źródło
0

Możesz przejść do /usr/share/applicationsodpowiedniego, file.desktopktóry jest wywoływany za każdym razem, gdy otwierasz określony typ pliku. Następnie edytuj go i execdodaj cd PATH &&do początku linii.

Mostafa Shahverdy
źródło
-1

OK -

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

nie działało dla mnie, ponieważ PATH nie jest zdefiniowany tak, aby wskazywał ścieżkę% F. Jedynymi zmiennymi dostępnymi w dowolnym pliku pulpitu aplikacji są:

  • % fa pojedyncza nazwa pliku.
  • Wiele nazw plików% F.
  • % ua pojedynczy adres URL.
  • % U wielu adresów URL.
  • % da pojedynczy katalog. Używany w połączeniu z% f do zlokalizowania pliku.
  • % D wiele katalogów. Używany w połączeniu z% F do lokalizowania plików.
  • % na pojedynczą nazwę pliku bez ścieżki.
  • % N wielu nazw plików bez ścieżek.
  • % ka URI lub lokalna nazwa pliku lokalizacji pliku na pulpicie.
  • % v nazwa pozycji urządzenia.

Oto on:% d to pojedynczy katalog, którego szukasz, ponieważ nie ma sensu przechodzić do wielu katalogów. Więc przejdź do / usr / share / applications i edytuj plik application-name.desktop (w twoim przypadku pymol.desktop); musisz mieć do tego uprawnienia administratora. Następnie zlokalizuj wiersz rozpoczynający się od „Exec =”. Prawdopodobnie czyta

Exec=<application-name> %F

(W twoim przypadku Exec = pymol% F). Zmień tę linię na

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

Zapisz ten plik na pulpicie, a następnym razem, gdy klikniesz plik .pdb, twoim katalogiem roboczym powinien być ten, w którym znajduje się ten plik .pdb, aby pymol mógł tam zobaczyć wszystkie twoje pliki.

Oczywiście możesz również uruchomić pymol z wiersza poleceń po pierwszym przejściu do katalogu, w którym znajdują się twoje pliki, ale myślę, że chciałeś rozwiązania GUI, więc musisz trochę edytować :-)

użytkownik147058
źródło