Jak zmieniać spacje w plikach .desktop Linia wykonania

15

Chcę utworzyć .desktopplik opisany tutaj .

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=/home/user/opt/sublime/Sublime Text 2/sublime_text %U

Jednak uruchomienie tego z menu kontekstowego Nautilusa za pomocą Open z tym daje mi

Nie można znaleźć „/ home / user / opt / sublime / Sublime”

Więc próbowałem

Exec="/home/user/opt/sublime/Sublime Text 2/sublime_text" %U

i dostał

Tekst zakończył się, zanim znaleziono pasujący cytat dla „. (Tekst był„ ”/ home / user / opt / sublime / Sublime”)

Jaki jest właściwy sposób na ucieczkę spacji w Execlinii .desktopplików?

nh2
źródło

Odpowiedzi:

5

Poprzedź każdą spację ukośnikiem odwrotnym:

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=/home/user/opt/sublime/Sublime\ Text\ 2/sublime_text %U
styczeń
źródło
4
To nie działa:Text ended just after a '\' character. (The text was '/home/user/opt/sublime/Sublime\')
nh2
Zabawne, działa dla mnie.
stycznia
Czy korzystamy z tych samych wersji? GNOME nautilus 3.4.212.04.
nh2
Nawiasem mówiąc, działa dla mnie na Ubuntu 16.04, a także podwójne cytaty. NIE WOLNO wybierać spacji ani podawać wartości Ścieżki i Ikony, może to spowodować, że aplikacja nie będzie działać (na moim komputerze ikona myślnika miga, ale nic nie robi, nawet nie otwiera terminalu, nawet jeśli Terminal = true). Ten sam problem, jeśli nie uciekasz od Exec, więc możesz sobie wyobrazić, że zajęło mi trochę czasu, aby znaleźć, co zrobić z każdą linią .desktop!
hsandt
Dziwne ... Działa, jeśli uruchamiam program uruchamiający ręcznie, ale nie działa przy autostartie. Ta funkcja jest bardzo uszkodzona.
Adrian Lopez
3

Miałem dokładnie ten sam problem! Po wypróbowaniu różnych wzorców ucieczki / cytowania, zdecydowałem, że najprostszym rozwiązaniem jest posiadanie dowiązania symbolicznego do sublime_textmojego $ PATH (lub możesz użyć aliasu wiersza poleceń).

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[C]=/usr/share/Sublime Text 2/Icon/256x256/sublime_text.png
Name[C]=Sublime Text 2
Exec=Sublime-Text-2 %U
Comment[C]=Text Editor
Name=Sublime Text 2
Comment=Text Editor
Icon=/usr/share/Sublime Text 2/Icon/256x256/sublime_text.png
X-Desktop-File-Install-Version=0.21
c24w
źródło
4
Jest to sensowne obejście, ale nadal nie wiem, jak mamy na myśli , aby używać spacji w .desktopplikach.
nh2
2
Zgadzam się, chociaż dla mnie wydaje się, że jest po prostu Execbłędny w analizie, a nie my nieprawidłowo wdrażamy. Interpretuje spację jako koniec wartości, co jest nieparzyste, ponieważ można używać spacji bez ciągów / ciągów bez cudzysłowu dla ścieżek w innych właściwościach!
c24w
3

Czy próbowałeś używać cudzysłowów zamiast „”? Mam dostosowany plik .desktop ze spacjami w wierszu Exec, a mój działa z cudzysłowami.

Henry Gibson
źródło
3

Mam ten sam problem, postępując zgodnie z instrukcjami instalacji ze strony ( http://monkeyhacks.com/post/how-to-install-sublime-text-2-on-ubuntu-14-04 ). Więc moim rozwiązaniem było :

  1. Usuń / usuń miękki link o nazwie „sublime” z /usr/bin

  2. Usuń wszystkie białe znaki z folderu „Sublime Text 2”, zmieniając jego nazwę na „SublimeText2”

  3. Re Utwórz miękki link w /usr/bin/:

    sudo ln -s /opt/SublimeText2/sublime_text /usr/bin/sublime
    
  4. Utwórz plik .desktop, w tym:

    Exec=/opt/SublimeText2/sublime_text %U
    Icon=/opt/SublimeText2/Icon/48x48/sublime_text.png
    
SantyVillagomez
źródło
3

Zgodnie ze specyfikacją wpisu na pulpicie przestrzeń ASCII może być reprezentowana przez \ssekwencję zmiany znaczenia (dla stringi localestringwartości).

moon.musick
źródło
0

Ten sam problem napotkałem przy użyciu GNOME nautilus 3.4.2 w Ubuntu 12.04. Znalazłem to alternatywne obejście w raporcie o błędzie dotyczącym tego samego problemu w Moblin UI Framework, który wolę od wspomnianego, w którym musisz dodać każdy folder do $ PATH.

Obejście to po prostu:
„Utwórz łącze symboliczne na ścieżce, która nie ma spacji, i wskaż pole EXEC na to łącze”.

Björn
źródło
-1

Pliki .desktop nie obsługują cudzysłowów, spacji i znaków zmiany znaczenia w taki sam sposób, jak powłoki. Prawdopodobnie najlepszą opcją byłoby wywołanie powłoki w linii exec, aby uzyskać oczekiwane zachowanie, na przykład:

[Desktop Entry]
Name=Sublime Text 2
GenericName=Sublime Text 2
Comment=Edit text files
Exec=sh -c "/home/user/opt/sublime/Sublime Text 2/sublime_text" %U

Aby uzyskać więcej informacji, zobacz man sh. Pozwala to również uniknąć tworzenia i utrzymywania dowiązań symbolicznych, podobnie jak w przypadku innych odpowiedzi.

KDØBPV
źródło
To rozwiązanie nie przekazuje argumentów, np. Ścieżek plików, do ostatecznie wywołanej komendy. -1
David Foerster,
Huh Najwyraźniej nie jest to również wiarygodne. Przetestowałem to rozwiązanie przed opublikowaniem i działało. Ale potem zmodyfikowałem mój test, aby sprawdzić, czy masz rację, a teraz NIE działa, nawet po przywróceniu go do prawidłowego działania. Dziwne.
KDØBPV