В 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 история (так как я часто использую компиляцию для регулярной компиляции, а история полезна).

Другие вопросы по тегам