Comment envoyer l'argument cité au processus d'appel
Je souhaite utiliser la convertcommande imagemagick pour dessiner sur un fichier image. J'ai les données d'image sous forme de texte brut dans un tampon et maintenant je voudrais courir convert - -draw 'rectangle 0,0,100,100' -dessus (les tirets indiquent à convert d'utiliser stdin pour l'entrée et d'imprimer les données sur stdout). Si je laisse de côté, -draw 'rectangle 0,0,100,100'je peux simplement utiliser (call-process-region (point-min) (point-max) "convert" t t nil "-" "-")pour passer le contenu du tampon en tant que stdin au programme de conversion et insérer les convertdonnées d'image renvoyées dans le tampon (cela ne fait rien mais cela fonctionne, par exemple, je pourrais remplacer le dernier -par un nom de fichier pour écrire les données d'image résultantes dans un fichier). Cependant, maintenant, je veux ajouter le -draw 'rectangle 0,0,100,100'comme argument supplémentaire à call-process-regionmais je ne peux vraiment pas trouver comment faire cela correctement. Par exemple j'ai essayé (call-process-region (point-min) (point-max) "convert" t t nil "-" "-draw" "'rectangle 0,0,50,50'" "-")mais ensuite je reçois un messageconvert: non-conforming drawing primitive definition rectangle 0,0,50,50 '@ error / draw.c / RenderMVGContent / 4473.`
J'ai essayé de l'exécuter en tant que commande shell (c'est-à-dire en utilisant /bin/bash -c)? Mais alors je ne sais pas comment passer le contenu du tampon en entrée.
Je voudrais donc savoir comment passer correctement la chaîne de guillemets simples 'rectangle 0,0,100,100'à la commande.
(Pour info, je voudrais étendre djvu.el pour afficher les annotations)
Réponses
Je voudrais courir
convert - -draw 'rectangle 0,0,100,100' -
Notez que vous citez le shell ici, afin qu'il ne divise pas cet argument en deux, à cause de l'espace.
Par exemple j'ai essayé
(call-process-region (point-min) (point-max) "convert" t t nil "-" "-draw" "'rectangle 0,0,50,50'" "-")
Notez que vous avez inclus les guillemets qui sont pour le shell dans un appel qui n'est pas traité par un shell, ce qui signifie que le convertprocessus reçoit un argument contenant ces 'caractères environnants.
C'est comme exécuter cette commande shell:
convert - -draw "'rectangle 0,0,100,100'" -
Essayer:
(call-process-region (point-min) (point-max) "convert" t t nil
"-" "-draw" "rectangle 0,0,50,50" "-")