Comment échapper aux espaces dans les fichiers .desktop Ligne Exec

15

Je veux créer un .desktopfichier comme décrit ici .

[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

Cependant, exécuter cela à partir du menu contextuel de Nautilus en utilisant Ouvrir avec cela me donne

Impossible de trouver '/ home / user / opt / sublime / Sublime'

J'ai donc essayé

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

et j'ai

Le texte s'est terminé avant que la citation correspondante n'ait été trouvée pour ". (Le texte était '" / home / user / opt / sublime / Sublime')

Quelle est la bonne façon d'échapper aux espaces dans la Execligne de .desktopfichiers?

nh2
la source

Réponses:

5

Faites précéder chaque espace d'une barre oblique inverse:

[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
janvier
la source
4
Cela ne fonctionne pas:Text ended just after a '\' character. (The text was '/home/user/opt/sublime/Sublime\')
nh2
Drôle, ça marche pour moi.
Janvier
Utilisons-nous les mêmes versions? GNOME nautilus 3.4.2le 12.04.
nh2
Fonctionne pour moi sur Ubuntu 16.04, ainsi que des guillemets doubles en passant. Cependant, n'échappez PAS aux espaces et ne citez pas les valeurs Path et Icon, cela peut empêcher l'application de s'exécuter (sur mon ordinateur, l'icône de tiret clignote mais ne fait rien, pas même d'ouvrir le terminal même si Terminal = true). Même problème si vous n'échappez pas à Exec, au fait, vous pouvez donc imaginer qu'il m'a fallu un certain temps pour trouver quoi faire avec chaque ligne du .desktop!
hsandt
Bizarre ... Cela fonctionne si j'exécute le lanceur manuellement, mais il ne démarre pas automatiquement. Cette fonctionnalité est super buggée.
Adrian Lopez
3

J'avais exactement le même problème! Après avoir essayé divers modèles d'échappement / guillemets, j'ai décidé que la solution la plus simple était d'avoir un lien symbolique vers sublime_textmon $ PATH (ou vous pourriez utiliser un alias de ligne de commande).

[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
la source
4
Il s'agit d'une solution de contournement raisonnable, mais nous ne savons toujours pas comment nous sommes censés utiliser les espaces dans les .desktopfichiers.
nh2
2
D'accord, même si pour moi, il semble juste que le Execbug soit analysé, plutôt que de l'implémenter incorrectement. Il interprète un espace comme la fin de la valeur, ce qui est étrange, car vous pouvez utiliser des espaces non échappés / des chaînes sans guillemets pour les chemins dans les autres propriétés!
c24w
3

Avez-vous essayé d'utiliser des guillemets "" au lieu de ""? J'ai un fichier .desktop personnalisé avec des espaces dans la ligne Exec, et le mien fonctionne avec des guillemets ''.

Henry Gibson
la source
3

J'ai le même problème en suivant les instructions d'installation du site ( http://monkeyhacks.com/post/how-to-install-sublime-text-2-on-ubuntu-14-04 ). Donc ma solution était :

  1. Supprimer / supprimer le lien logiciel appelé "sublime" de /usr/bin

  2. Supprimez tous les espaces du dossier "Sublime Text 2" en le renommant en "SublimeText2"

  3. Re Créer un lien logiciel dans /usr/bin/:

    sudo ln -s /opt/SublimeText2/sublime_text /usr/bin/sublime
    
  4. Créez le fichier .desktop comprenant:

    Exec=/opt/SublimeText2/sublime_text %U
    Icon=/opt/SublimeText2/Icon/48x48/sublime_text.png
    
SantyVillagomez
la source
0

J'ai rencontré le même problème en utilisant GNOME nautilus 3.4.2 dans Ubuntu 12.04. J'ai trouvé cette solution alternative dans un rapport de bogue pour le même problème dans Moblin UI Framework que je préfère à celui mentionné où vous devez ajouter chaque dossier au $ PATH.

La solution de contournement est simplement:
"Créez un lien symbolique dans un chemin qui n'a pas d'espaces et pointez le champ EXEC vers ce lien."

Björn
la source
-1

Les fichiers .desktop ne gèrent pas les guillemets, les espaces et les caractères d'échappement de la même manière que les shells. Probablement, la meilleure option serait d'appeler un shell dans votre ligne exec pour obtenir le comportement attendu, comme ceci:

[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

Pour plus d'informations, veuillez consulter man sh. Cela évite également d'avoir à créer et à maintenir des liens symboliques, comme vous le ferez avec les autres réponses.

KDØBPV
la source
Cette solution ne transmet pas d'arguments, par exemple des chemins de fichiers, à la commande finalement invoquée. -1
David Foerster
Huh. Apparemment, ce n'est pas non plus fiable. J'ai testé cette solution avant de la poster, et cela a fonctionné. Mais j'ai ensuite modifié mon test pour vérifier si vous aviez raison, et maintenant cela ne fonctionne PAS, même après l'avoir restauré comme il fonctionnait. Bizarre.
KDØBPV