Я пишу режим, который вызывает низший процесс. Строка, которая запускает процесс:
(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?