call-process определенно не объединяет свои аргументы;он передает их напрямую в программу.Чтобы увидеть это, введите M-: и оцените следующее выражение:
(call-process "/bin/ls" nil "*scratch*" nil "avg ba")
, где «avg» и «ba» - файлы в текущем каталоге.Я получаю следующее сообщение, вставленное в мой scratch буфер:
/bin/ls: cannot access avg ba: No such file or directory
Если бы call-process повторно проанализировал аргументы, он разделил бы "avg ba" на два отдельных аргумента -- но сообщение об ошибке показывает, что это не так.
Вместо этого проблема в аргументе shell-quote-аргумент.Когда я оцениваю вызов, который вы упоминаете в буфере scratch , я получаю следующее:
(shell-quote-argument "prevdiff file.txt")
"prevdiff\\ file.txt"
Другими словами, команда p4v фактически получает то, что вы вводите в оболочкеas:
p4v -p port -u user -c client -cmd '"prevdiff file.txt"'
Вот почему p4v жалуется на "prevdiff.
Так что я думаю, что вы хотите вместо этого:
"-cmd" (concat cmd " " (shell-quote-argument (buffer-name))))
(но проверьте мои пареныконечно).