Saya telah membaca dokumentasi tentang cara membuat panggilan interaktif dari dalam Elisp, tetapi saya masih tidak tahu bagaimana cara melewati argumen universal ketika menggunakan call-interactively
pada perintah yang mengenali argumen universal.
Lebih khusus lagi, saya ingin mengimplementasikan fungsi yang, dalam kondisi tertentu, harus memanggil shell
perintah secara interaktif dengan argumen universal , sehingga, sebagai hasilnya, prompt
Shell buffer (default *shell*):
akan terlihat di minibuffer, dan, begitu prompt ini mendapat respons, buffer yang ditentukan akan dibuat (jika belum ada), dan menjadikan buffer saat ini.
FWIW, saya mencoba yang berikut:
(universal-argument)
(call-interactively 'shell)
dan
(setq prefix-arg (list 4))
(call-interactively 'shell)
... tapi saya tidak pernah melihat prompt Shell buffer (default *shell*):
; alih-alih, dalam semua kasus, shell
perintah berjalan persis seolah-olah dipanggil tanpa argumen universal. (Saya benar-benar tidak tahu apa yang saya lakukan di sini, jadi upaya buta saya di atas dilakukan dengan mengabaikan nasihat nasehat dokumentasi .)
(let ((current-prefix-arg 4)) (call-interactively 'shell))
Jawaban:
Menurut
shell
bentuk interaktif, asalkancurrent-prefix-arg
bukan-nol,shell
akan meminta pengguna untuk menggunakan buffer, sehingga Anda dapat mengaturcurrent-prefix-arg
ke non-nil (4 digunakan sebagai berikut sebagai contoh):atau mensimulasikan eksekusi
shell
dengan awalan 4 ( M-4 M-x shell):sumber
t
, seharusnya tidak(list 4)
(atau'(4)
jika Anda suka)? Saya menyadari bahwa versi saatshell
ini tidak peduli tentang perbedaan antara4
dan(list 4)
(hanya peduli bahwa nilainya adalah non-nil
), tetapi versi mendatang mungkin.4
mensimulasikanM-4 M-x shell
,'(4)
mensimulasikanC-u M-x shell