В emacs, каков наилучший способ запустить внешнюю программу в другом окне, которое может быть закрыто одной ключевой командой после выполнения программы?
У меня есть некоторые elisp, который запускает внешнюю команду 'npm'.
(defun npm-mode-npm-run ()
"Run the 'npm run' command on a project script."
(interactive)
(let ((command
(completing-read
"Run command: " (npm-mode--get-project-scripts))))
(message "Running npm script: %s" command)
(switch-to-buffer npm-mode--buffer-name command)
(erase-buffer)
(ansi-term (getenv "SHELL") "npm-mode-npm-run")
(comint-send-string "*npm-mode-npm-run*" (format "npm run-script %s\n" command))))
В то время как это делает работу, когда выполнение завершается, пользователь остается в буфере, который должен быть уничтожен, и это требует дополнительного подтверждения для завершения процесса.
Что бы мне хотелось, чтобы после выхода из программы я мог нажать клавишу "q", чтобы сделать все это, оставив пользователя в исходном буфере.
Является ли это хорошим примером того, как сделать это лучше всего для современных emacs, на которые я мог бы сослаться, или для любых других конкретных документов, которые могут быть полезны?
Спасибо заранее!
1 ответ
Как сказал @jpkotta, компиляция - хороший вариант. Вы можете легко закопать буфер, отправить сигнал TERM базовому процессу и т. Д. Кроме того, вы получаете бесплатный анализ ошибок (раскраска синтаксиса + возможность перехода к ошибочной строке) для многих языков.
Вот пример того, как я его использую (в этом случае для быстрого запуска любого редактируемого мной скрипта):
(defun juanleon/execute-buffer ()
(interactive)
(let ((compile-command nil))
(compile buffer-file-name)))
Легко изменить, чтобы приспособиться к вашему коду. let
для того, чтобы не добавлять вещи в compile
история (так как я часто использую компиляцию для регулярной компиляции, а история полезна).