Jak wysłać cytowany argument do call-process
Chcę użyć convertpolecenia imagemagick, aby narysować plik obrazu. Mam dane obrazu jako nieprzetworzony tekst w buforze i teraz chciałbym na nim uruchomić convert - -draw 'rectangle 0,0,100,100' -(myślniki mówią konwertować, aby użyć stdin do wprowadzania i wydrukować dane na standardowe wyjście). Jeśli pominę, -draw 'rectangle 0,0,100,100'to mogę po prostu użyć (call-process-region (point-min) (point-max) "convert" t t nil "-" "-")do przekazania zawartości bufora jako stdin do programu konwertującego i wstawić ze convertzwróconych danych obrazu do bufora (to nic nie robi, ale działa, np.Mógłbym zastąpić ostatni -z nazwą pliku aby zapisać wynikowe dane obrazu do pliku). Jednak teraz chcę dodać -draw 'rectangle 0,0,100,100'jako dodatkowy argument, call-process-regionale naprawdę nie mogę dowiedzieć się, jak to zrobić poprawnie. Na przykład próbowałem, (call-process-region (point-min) (point-max) "convert" t t nil "-" "-draw" "'rectangle 0,0,50,50'" "-")ale potem dostaję wiadomośćconvert: non-conforming drawing primitive definition prostokąt 0,0,50,50 "@ error / draw.c / RenderMVGContent / 4473."
Próbowałem uruchomić go jako polecenie powłoki (tj. Używając /bin/bash -c)? Ale wtedy nie wiem, jak przekazać zawartość bufora jako dane wejściowe.
Chciałbym więc wiedzieć, jak poprawnie przekazać ciąg znaków w apostrofach 'rectangle 0,0,100,100'do polecenia.
(Do Twojej wiadomości chciałbym rozszerzyć djvu.el o wyświetlanie adnotacji)
Odpowiedzi
Chciałbym biegać
convert - -draw 'rectangle 0,0,100,100' -
Zauważ, że cytujesz tam powłokę, aby nie rozbiła tego argumentu na dwie części ze względu na spację.
Na przykład próbowałem
(call-process-region (point-min) (point-max) "convert" t t nil "-" "-draw" "'rectangle 0,0,50,50'" "-")
Zwróć uwagę, że w wywołaniu, które nie jest przetwarzane przez powłokę, umieściłeś cudzysłowy dotyczące powłoki, co oznacza, że convertproces otrzymuje argument zawierający te 'otaczające znaki.
To jest jak uruchomienie tego polecenia powłoki:
convert - -draw "'rectangle 0,0,100,100'" -
Próbować:
(call-process-region (point-min) (point-max) "convert" t t nil
"-" "-draw" "rectangle 0,0,50,50" "-")