Вы можете создать макрос редактирования emacs ("макросы редактирования" - это то, из чего происходит название "emacs"), и в макрос клавиатуры поместить команды, которые запускают скрипты Gnu Bash или другие программы оболочки, и создавать скрипты, которые запрашивают у пользователя Y или N ответы.
Итак, чтобы создать макрос, вы должны сделать что-то вроде этого:
Cx (
Mx new-frame return
Mx shell return (or just Mx eshell return--to use the emacs built-in shell)
bash <bash-program-that-queries-end-user-for-Y-or-N-answers> &
Mx delete-frame
Cx )
Сохраните макрос и поместите его в программу emacs lisp, которую вы загружаете для повторного использования.
Макрос, конечно, будет использоваться с тех пор в emacs, и / или вы можете запустить все это как командный файл из командной строки, как любая другая программа.
Другие инструменты и предложения: Изучите рекурсивное редактирование emacs (которое останавливает и перезапускает макросы и дает конечному пользователю время для ответа на вопросы или даже редактирует вещи) и встроенную функцию emacs «сообщение или ящик» или просто сообщение функция. Вы можете использовать tkquery (простую в настройке программу Tcl/Tk, которая запрашивает у пользователей входные данные) и / или использовать zenity для создания простых графических диалоговых окон, которые легко программировать и которыми могут пользоваться конечные пользователи.
Вы можете создать подпрограмму для вопросов и ответов в Gnu Make и запустить ее в Gnu Emacs. Чтобы сделать это и взаимодействовать с запущенным сеансом Make, вы могли бы использовать process-send-string, например, из одного из моих make-файлов:
echo "(process-send-string \"*compilation*\" \" \\n \") "
Я имею в виду, что вы можете использовать функцию emacs process-send-string, чтобы общаться и отвечать на вопросы Y-or-N с помощью работающей программы Gnu Make, которая работает внутри буфера Gnu Emacs.
И наконец, возвращаясь к вашему вопросу и удивляясь, почему xterm -e <your-program>
быстро завершается: вы можете просто сделать что-то вроде emacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disown
и / или xterm -e <your-program-which-queries-the-end-users> & disown
. Но это зависит от того, как вы хотите запустить программу, как синхронный или асинхронный процесс; Я имею в виду, вы хотите заблокировать запуск программы, пока конечный пользователь отвечает на вопрос (ы) или нет?
С этими инструментами я думаю, вы можете получить то, что вы хотите с Gnu Emacs; и, поскольку Gnu Emacs является расширяемым, вы, безусловно, можете заставить его делать то, что вы хотите каким-то образом - если вы расширяете его, программируя его самостоятельно.