Làm cách nào để áp dụng `gọi tương tác 'cho một lệnh tương tác chấp nhận đối số phổ quát?


8

Tôi đã đọc tài liệu về cách thực hiện các cuộc gọi tương tác từ bên trong Elisp, nhưng tôi vẫn không thể tìm ra cách vượt qua đối số phổ quát khi sử dụng call-interactivelytrên một lệnh nhận ra đối số phổ quát.

Cụ thể hơn, tôi muốn thực hiện một hàm, trong một số điều kiện nhất định, nên gọi shelllệnh tương tác với đối số phổ quát , do đó, kết quả là, nhắc nhở

Shell buffer (default *shell*): 

sẽ hiển thị trong bộ thu nhỏ và, khi lời nhắc này nhận được phản hồi, bộ đệm đã chỉ định sẽ được tạo (nếu nó chưa tồn tại) và tạo bộ đệm hiện tại.


FWIW, tôi đã thử như sau:

(universal-argument)
(call-interactively 'shell)

(setq prefix-arg (list 4))
(call-interactively 'shell)

... nhưng tôi chưa bao giờ thấy dấu nhắc Shell buffer (default *shell*):; thay vào đó, trong mọi trường hợp, shelllệnh chạy chính xác như thể nó được gọi mà không có đối số phổ quát. (Tôi thực sự không biết những gì tôi đang làm ở đây, vì vậy những nỗ lực mù quáng của tôi ở trên được thực hiện với sự coi thường ý thức về lời khuyên trước đó của tài liệu .)


2
Hãy thử(let ((current-prefix-arg 4)) (call-interactively 'shell))
xuchunyang

Cảm ơn bạn! Tôi sẵn sàng chấp nhận đây là câu trả lời nếu bạn quan tâm để đăng nó như vậy.
kjo

Câu trả lời:


8

Theo shellhình thức tương tác, miễn current-prefix-arglà không phải là con số không, shellsẽ yêu cầu người dùng sử dụng bộ đệm, vì vậy bạn có thể đặt current-prefix-argthành không phải con số không (4 được sử dụng như một ví dụ):

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

hoặc mô phỏng thực thi shellvới tiền tố 4 ( M-4 M-x shell):

(execute-extended-command 4 "shell")

Chỉ là một lời ngụy biện nhỏ: nếu người ta sẽ sử dụng một giá trị trung thực khác với cũ t, thì không nên (list 4)(hoặc '(4)nếu bạn thích)? Tôi nhận ra rằng phiên bản hiện tại shellkhông quan tâm đến sự khác biệt giữa 4(list 4)(chỉ quan tâm rằng giá trị là không nil), nhưng các phiên bản trong tương lai có thể.
kjo

4mô phỏng M-4 M-x shell, '(4)mô phỏngC-u M-x shell
npostavs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.