Você pode fazer uma macro de edição do emacs ("editar macros" de onde o nome "emacs" é derivado) e nos comandos de macro put do teclado que executam scripts Gnu Bash ou outros programas shell e criar scripts que consultem o usuário. S ou N responde.
Para criar a macro, você faria algo assim:
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 )
Salve a macro e coloque-a em um programa de lisp do emacs que você carrega para reutilização.
A macro seria, naturalmente, utilizável a partir de então dentro do emacs e / ou você poderia rodar tudo como um arquivo de lote, a partir da linha de comando, como qualquer outro programa.
Outras ferramentas e sugestões: Examine a edição recursiva do emacs (que interrompe e reinicia macros e fornece ao usuário final tempo para responder a perguntas ou até mesmo editar coisas) e a mensagem ou caixa de funções interna do emacs ou apenas a função de mensagem. Você pode usar o tkquery (um programa Tcl / Tk fácil de configurar que consulta os usuários para dados de entrada) e / ou usar o zenity para criar caixas de interação gráficas simples, fáceis de programar e fáceis de usar pelos usuários finais.
Você poderia criar uma rotina de perguntas e respostas no Gnu Make e executá-la dentro do Gnu Emacs. Para fazer isso e interagir com uma sessão do Make em execução, você poderia usar a string de envio do processo, como esta excerto de um dos meus makefiles:
echo "(process-send-string \"*compilation*\" \" \n \") "
Quero dizer, você poderia usar a função process-send-string do emacs para se comunicar e responder perguntas do tipo Y-or-N com um programa Gnu Make rodando dentro de um buffer do Gnu Emacs.
Por fim, volte à sua pergunta e pergunte por que xterm -e <your-program>
está terminando rapidamente: você pode fazer coisas como emacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disown
e / ou xterm -e <your-program-which-queries-the-end-users> & disown
. Mas isso depende de como você deseja executar o programa, como um processo síncrono ou assíncrono; Quer dizer, você quer impedir que o programa seja executado enquanto o usuário final responde à (s) pergunta (s) ou não?
Com essas ferramentas em mãos, acho que você pode conseguir o que deseja com o Gnu Emacs; e, como o Gnu Emacs é extensível, você pode fazer com que ele faça o que você quer de alguma forma - se você o estender programando você mesmo.