Chciałbym uruchomić polecenie powłoki, które zadaje kilka interaktywnych pytań przed kontynuowaniem, z poziomu Emacsa. Funkcjonalność, której szukam, jest jak xterm -e <command>
, tylko otwierając okno Emacsa. Nie wymagałoby to zbyt wielu możliwości emulacji terminala (w zasadzie naciśnięcie „y” kilka razy), ale nadal wymaga wprowadzania danych z klawiatury. Czy można to jakoś zrobić?
Próbowałem użyć term
i ansi-term
już; gdy otrzymasz polecenie inne niż / bin / bash, oba zamykają się natychmiast, nie pozostawiając czasu na odczytanie problemu.
Odpowiedzi:
Krótka odpowiedź:
brzmi dokładnie tak, jak prosisz.
Co ty potrzeba może być inny - jeśli naprawdę musisz dać programowi serię
y
linie na standardowe wejście, rozważyes | program
. Jeśli program naprawdę chce, aby stał się tty, rozważ użycieexpect
.źródło
Możesz zmontować makro edycji emacsa („edytowanie makr” to nazwa, z której pochodzi nazwa „emacs”) oraz polecenia umieszczania makr klawiatury, które uruchamiają skrypty Gnu Bash lub inne programy powłoki i tworzą skrypty, które wysyłają zapytanie do użytkownika o Y lub N odpowiedzi.
Aby utworzyć makro, zrobiłbyś coś takiego:
Zapisz makro i umieść je w programie lisp emacs, który ładujesz do ponownego użycia.
Makro byłoby oczywiście użyteczne od tego momentu w emacs i / lub można uruchomić całość jako plik wsadowy z wiersza poleceń, jak każdy inny program.
Inne narzędzia i sugestie: spójrz na edycję rekursywną emacsa (która zatrzymuje i ponownie uruchamia makra i daje czas użytkownikowi na odpowiedź lub nawet na edycję) i wbudowaną funkcję wiadomości lub skrzynki emacsa lub tylko wiadomość funkcjonować. Możesz użyć tkquery (łatwego w konfiguracji programu Tcl / Tk, który pyta użytkowników o dane wejściowe) i / lub używać zenity do tworzenia prostych graficznych pól interakcji, które są łatwe do zaprogramowania i łatwe w użyciu dla użytkowników końcowych.
Możesz stworzyć procedurę pytań i odpowiedzi w Gnu Make i uruchomić ją w Gnu Emacs. Aby to zrobić i wejść w interakcję z uruchomioną sesją Make możesz użyć procesu-ciąg-wysyłania, taki jak ten fragment z jednego z moich plików makefile:
To znaczy, możesz użyć funkcji emacs-string-string do komunikowania się i odpowiadania na pytania Y-or-N za pomocą uruchomionego programu Gnu Make, który działa w buforze Gnu Emacs.
Wreszcie, wracając do swojego pytania i zastanawiając się dlaczego
xterm -e <your-program>
szybko się kończy: możesz po prostu robić takie rzeczyemacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disown
i / lubxterm -e <your-program-which-queries-the-end-users> & disown
. Ale to zależy od tego, jak chcesz uruchomić program, jako proces synchroniczny lub asynchroniczny; Mam na myśli, czy chcesz zablokować uruchamianie programu, gdy użytkownik końcowy odpowiada na pytania, czy nie?Z tymi narzędziami w ręku myślę, że możesz dostać to, co chcesz z Gnu Emacsem; a ponieważ Gnu Emacs jest rozszerzalny, możesz go z pewnością zrobić tak, jak chcesz - jeśli go rozszerzysz, programując samemu.
źródło