Я не знаю переменных w32-shell- *. Может быть, вы могли бы показать код, чтобы проиллюстрировать, что вы имеете в виду.
Я тоже не знаю SUA.
Я использую GNU emacs v22 в Windows и запускаю powershell как низкоуровневую оболочку. Сначала у меня были некоторые трудности, похожие на ваши, и я решил их с лучшим пониманием того, как запустить оболочку. Может быть, это поможет вам.
Я использую эти переменные:
(setq explicit-shell-file-name
"c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe")
(setq explicit-powershell.exe-args
'("-Command" "-" )) ;; interactive, but no command prompt
У меня были трудности, пока я не понял две вещи:
если вы не укажете аргументы командной строки для процесса оболочки, emacs по умолчанию использует -i
. В случае powershell этот аргумент либо не был поддержан, либо он делал что-то отличное от того, что я хотел (я забыл). Поэтому мне пришлось явно установить аргументы для вызова оболочки.
имя переменной для указания аргументов оболочки, зависит от имени программы, используемой для запуска оболочки. Насколько я знаю, это не документировано (если только вы не считаете исходный код документацией!). Если вы работаете в Linux и используете sh, тогда переменная explicit-sh-args
. Если bsh, то explicit-bsh-args
. Если вы работаете в Windows, вам нужно использовать правильное имя исполняемого файла, включая суффикс .exe. Это делает странно выглядящее имя переменной, но это работает.
Полный код для запуска powershell как нижней оболочки emacs выглядит так:
;; get a name for the buffer
(setq buffer (get-buffer-create "*PowerShell*"))
(let ((tmp-shellfile explicit-shell-file-name))
(setq explicit-shell-file-name
"c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe")
(setq explicit-powershell.exe-args
'("-Command" "-" )) ; interactive, but no command prompt
;; launch the shell
(shell buffer)
; restore the original shell
(if tmp-shellfile
(setq explicit-shell-file-name tmp-shellfile)))
Может быть, что-то подобное подойдет вам.