Обычно, если вы хотите запустить что-то после завершения компиляции, вы добавляете это в команду компиляции.Например, вместо
M-x compile RET make RET
вы можете набрать
M-x compile RET make && ./test RET
или добавить программу к какой-то подходящей цели в вашем make-файле, чтобы вы могли сделать
M-x compile RET make test RET
Возможно, если вы сможете объяснить, почему вы хотите запустить скомпилированную программу в eshell, я мог бы предложить вам лучший совет.
Однако, если вы настаиваете на использовании eshell, вы можете использоватьcompilation-finish-functions
:
Функции для вызова после завершения процесса компиляции.Каждая функция вызывается с двумя аргументами: буфером компиляции и строкой, описывающей, как завершился процесс.
Это не так хорошо задокументировано, но строка равна "finished\n"
, если процесс завершенуспешно.Таким образом, вы можете сделать что-то вроде этого:
(defun run-compilation-output-in-eshell (buf msg)
"If compilation finished successfully, switch to eshell and execute a command."
(when (string= msg "finished\n")
(eshell)
(goto-char (point-max))
(eshell-kill-input)
(insert "echo command goes here")
(eshell-send-input)))
(add-hook 'compilation-finish-functions #'run-compilation-output-in-eshell)
Это выглядит довольно грубо, хотя: если вам случается вводить в буфер eshell
по окончании компиляции, то это удаляет ваш ввод.Как я сказал выше, немного больше контекста может быть полезным.