Saya ingin menjalankan perintah shell yang menanyakan beberapa pertanyaan interaktif sebelum melanjutkan, dari dalam Emacs. Fungsionalitas yang saya cari adalah seperti xterm -e <command>
, hanya dengan membuka jendela Emacs sebagai gantinya. Tidak perlu terlalu banyak kemampuan emulasi terminal (pada dasarnya menekan "y" beberapa kali), tetapi masih membutuhkan input keyboard. Apakah mungkin untuk melakukan ini?
Saya sudah mencoba menggunakan term
dan ansi-term
sudah; ketika diberi perintah yang berbeda dari / bin / bash, keduanya langsung tutup, tanpa menyisakan waktu untuk membaca apa masalahnya.
Jawaban:
Jawaban singkat:
terdengar persis seperti apa yang Anda minta.
Apa yang Anda butuhkan mungkin berbeda - jika Anda benar-benar hanya perlu memberikan serangkaian program
y
pada stdin, pertimbangkanyes | program
. Jika program benar-benar ingin stdin menjadi tty, pertimbangkan untuk menggunakannyaexpect
.sumber
Anda dapat membuat makro pengeditan emacs ("pengeditan makro" adalah asal nama "emacs") dan di keyboard makro put perintah yang menjalankan skrip Gnu Bash atau program shell lainnya dan membuat skrip yang meminta pengguna untuk Y atau N jawaban.
Jadi untuk membuat makro, Anda akan melakukan sesuatu seperti ini:
Simpan makro dan masukkan ke dalam program emacs lisp yang Anda muat untuk digunakan kembali.
Makro tentu saja dapat digunakan mulai saat itu di dalam emacs dan / atau Anda dapat menjalankan semuanya sebagai file batch, dari baris perintah, seperti program lainnya.
Alat dan saran lain: Lihatlah emacs pengeditan rekursif (yang berhenti dan memulai kembali makro dan memberikan waktu bagi pengguna akhir untuk menjawab pertanyaan atau bahkan mengedit hal-hal) dan emacs built-in fungsi pesan-atau-kotak atau hanya pesan fungsi. Anda dapat menggunakan tkquery (program Tcl / Tk yang mudah diatur yang meminta pengguna untuk memasukkan data) dan / atau menggunakan zenity untuk membuat kotak interaksi grafis sederhana yang mudah diprogram dan mudah digunakan oleh pengguna akhir.
Anda dapat membuat rutinitas tanya jawab di Gnu Make dan jalankan di dalam Gnu Emacs. Untuk melakukan ini dan berinteraksi dengan sesi Make yang sedang berjalan, Anda bisa menggunakan proses-send-string seperti kutipan ini dari salah satu makefile saya:
Maksud saya, Anda bisa menggunakan fungsi proses-send-string emacs untuk berkomunikasi dan menjawab pertanyaan Y-atau-N dengan program Gnu Make yang berjalan di dalam buffer Gnu Emacs.
Terakhir, kembali ke pertanyaan Anda dan bertanya-tanya mengapa Anda
xterm -e <your-program>
berhenti dengan cepat: Anda bisa melakukan hal-hal sepertiemacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disown
dan / atauxterm -e <your-program-which-queries-the-end-users> & disown
. Tetapi ini tergantung pada bagaimana Anda ingin menjalankan program, sebagai proses sinkron atau asinkron; Maksud saya, apakah Anda ingin memblokir program agar tidak berjalan sementara pengguna akhir menjawab pertanyaan atau tidak?Dengan alat ini di tangan saya pikir Anda bisa mendapatkan apa yang Anda inginkan dengan Gnu Emacs; dan, karena Gnu Emacs dapat dikembangkan, Anda tentu dapat melakukannya untuk melakukan apa pun yang Anda inginkan - jika Anda mengembangkannya dengan memprogramnya sendiri.
sumber