Elisp: вызовите start-process с путем, включающим пробел - PullRequest
3 голосов
/ 23 марта 2012

Я пишу режим, который вызывает низший процесс. Строка, которая запускает процесс:

(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
                           (concat  (file-name-as-directory 
                                    (cdr grass-location)) 
                           grass-mapset)))

grass-location и grass-mapset - это строки, содержащие путь к каталогу верхнего уровня и к одному из вложенных каталогов, соответственно, которые необходимо объединить в качестве аргумента set-process.

Это прекрасно работает, когда grass-location и grass-mapset содержат нормальные каталоги без пробелов. Однако, когда в имени каталога есть пробел, он пропускается при передаче в start-process, вызывая следующую ошибку:

grass-location
=> ("geobase Canada" . "/home/tws/grassdata/geobase Canada")
grass-mapset
=> "PERMANENT"

;; Calling start-process as above, the following error is produced
;; in the *grass* buffer:


Cleaning up temporary files ...
Starting GRASS ...
/home/tws/grassdata/geobaseCanada/PERMANENT: Not a valid GRASS location

Process grass exited abnormally with code 1

Обратите внимание, что geobase Canada уменьшено до geobaseCanada. Я попытался добавить кавычки в выражение concat, чтобы защитить эту строку, но это приводит к еще более странным ошибкам, когда к аргументу добавляется домашний каталог.

Как передать имя пути с пробелами в нем для start-process?

1 Ответ

2 голосов
/ 25 марта 2012

[В соответствии с предложением @event_jr, Я отправил здесь свой комментарий в качестве ответа, так как похоже, что это было источником проблемы]

Вашвызов start-process кажется правильным;Вы уверены, что проблема не в самой программе grass?(например, второй аргумент, кажется, связан с первым; возможно, пробелы теряются во время этого процесса ...)

...