Luncurkan perintah shell interaktif sebagai buffer emacs


1

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 termdan ansi-termsudah; ketika diberi perintah yang berbeda dari / bin / bash, keduanya langsung tutup, tanpa menyisakan waktu untuk membaca apa masalahnya.


1
Jika Anda tahu jawabannya adalah "y", maka Anda mungkin tidak perlu berinteraksi dengan apa yang terjadi. Dengan memberikan lebih spesifik, seseorang mungkin dapat menulis solusi yang meniadakan perlunya interaksi.
hukum

Jawaban:


1

Jawaban singkat:

M-x terminal-emulator

terdengar persis seperti apa yang Anda minta.

Apa yang Anda butuhkan mungkin berbeda - jika Anda benar-benar hanya perlu memberikan serangkaian program ypada stdin, pertimbangkan yes | program. Jika program benar-benar ingin stdin menjadi tty, pertimbangkan untuk menggunakannya expect.


0

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:

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 )

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:

echo "(process-send-string \"*compilation*\" \" \\n \") "

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 seperti emacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disowndan / atau xterm -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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.