Bagaimana cara menerapkan `panggilan-interaktif` pada perintah interaktif yang menerima argumen universal?

8

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-interactivelypada perintah yang mengenali argumen universal.

Lebih khusus lagi, saya ingin mengimplementasikan fungsi yang, dalam kondisi tertentu, harus memanggil shellperintah 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, shellperintah 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 .)

kjo
sumber
2
Coba(let ((current-prefix-arg 4)) (call-interactively 'shell))
xuchunyang
Terima kasih! Saya akan dengan senang hati menerima ini sebagai jawaban jika Anda ingin mempostingnya.
kjo

Jawaban:

8

Menurut shellbentuk interaktif, asalkan current-prefix-argbukan-nol, shellakan meminta pengguna untuk menggunakan buffer, sehingga Anda dapat mengatur current-prefix-argke non-nil (4 digunakan sebagai berikut sebagai contoh):

(let ((current-prefix-arg 4))
  (call-interactively 'shell))

atau mensimulasikan eksekusi shelldengan awalan 4 ( M-4 M-x shell):

(execute-extended-command 4 "shell")
xuchunyang
sumber
Hanya berdalih kecil: jika seseorang akan menggunakan nilai yang benar selain tua t, seharusnya tidak (list 4)(atau '(4)jika Anda suka)? Saya menyadari bahwa versi saat shellini tidak peduli tentang perbedaan antara 4dan (list 4)(hanya peduli bahwa nilainya adalah non- nil), tetapi versi mendatang mungkin.
kjo
4mensimulasikan M-4 M-x shell, '(4)mensimulasikanC-u M-x shell
npostavs