ユニバーサル引数を受け入れるインタラクティブコマンドに「call-interactively」を適用する方法は?


8

Elisp内からインタラクティブな呼び出しを行う方法に関するドキュメントを読みましたが、ユニバーサル引数call-interactivelyを認識するコマンドで使用するときにユニバーサル引数を渡す方法がわかりません。

より具体的には、特定の条件下で、ユニバーサル引数を使用してshellインタラクティブにコマンドを呼び出す必要がある関数を実装したいので、結果として、プロンプト

Shell buffer (default *shell*): 

ミニバッファーに表示され、このプロンプトが応答を受け取ると、指定されたバッファーが作成され(まだ存在しない場合)、現在のバッファーになります。


FWIW、私は以下を試しました:

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

そして

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

...しかし、私はプロンプトを見たことがありませんShell buffer (default *shell*):。代わりに、すべての場合において、shellコマンドは普遍的な引数なしで呼び出された場合とまったく同じように実行されました。(私がここで何をしているのか本当にわからないので、上記の私の盲目的な試みは、ドキュメントの先見的なアドバイスを意識的に無視して行われました。)


2
試してみる(let ((current-prefix-arg 4)) (call-interactively 'shell))
xuchunyang

ありがとうございました!あなたがそのように投稿したいのであれば、私はこれを答えとして喜んで受け入れます。
kjo

回答:


8

shellのインタラクティブフォームによると、current-prefix-arg非nilである限り、shellユーザーに使用するバッファを要求するため、current-prefix-arg非nilに設定できます(次の例では4を使用しています)。

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

またはshell、接頭辞4(M-4 M-x shell)を使用して実行をシミュレートします。

(execute-extended-command 4 "shell")

ほんの小さな問題です。普通のold以外の真の値を使用する場合、それはそうtではありませんか(list 4)(または'(4)希望する場合)?私は、現在のバージョンは、ということを理解shellの違いを気にしない4(list 4)(それは値が非であることだけ気nil)が、将来のバージョンがあります。
kjo

4シミュレートM-4 M-x shell'(4)シミュレートC-u M-x shell
npostavs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.