在Emacs中模拟微缓冲区输入

在Emacs中模拟微缓冲区输入,emacs,minibuffer,Emacs,Minibuffer,我正在寻找一种模拟微型缓冲区输入的方法。因此,some func从minibuffer中获取一些输入并对其进行处理。问题是,我必须从另一个函数调用某个func,我需要以交互方式这样做,所以我不能只传递一个参数 (defun some-func (arg) (interactive "*sEnter something: ") ;; Do something with arg ) (defun calling-func () (call-interactively 'some-f

我正在寻找一种模拟微型缓冲区输入的方法。因此,some func从minibuffer中获取一些输入并对其进行处理。问题是,我必须从另一个函数调用某个func,我需要以交互方式这样做,所以我不能只传递一个参数

(defun some-func (arg)
  (interactive "*sEnter something: ")
  ;; Do something with arg
  )

(defun calling-func ()
  (call-interactively 'some-func)
  ;; Type to minibuffer
  )
有什么想法吗


谢谢

探索为什么需要交互调用另一个函数可能会很有趣。。。但那不是你要的

下面是一个以交互方式“调用”函数并将文本发送到微型缓冲区的示例。您只需使用Emacs键盘宏:

(defun my-call-find-file (something)
  "An example of how to have emacs 'interact' with the minibuffer
use a kbd macro"
  (interactive "sEnter something:")
  (let ((base-vector [?\M-x ?f ?i ?n ?d ?- ?f ?i ?l ?e return]))
    ;; create new macro of the form
    ;; M-x find-file RET <userinput> RET
    (execute-kbd-macro (vconcat base-vector 
                                (string-to-vector something) 
                                (vector 'return)))))
(取消调用我的查找文件(某物)
“如何让emacs与微型缓冲区“交互”的示例
使用kbd宏“
(交互式“sEnter something:”)
(let((基向量[?\M-x?f?i?n?d?-?f?i?l?e返回])
创建窗体的新宏
;M-x查找文件RET RET
(执行kbd宏(vconcat基向量)
(字符串表示某物的向量)
(向量“返回(()())))

相关文档包括和。

以下内容如何:

(defun calling-func ()
  (interactive)
  (call-interactively 'some-func)
  ;; Type to minibuffer
  )
也就是说,使用空的
交互式
规范,并通过
交互式调用
获取可传递的规范


如果这确实是你所要求的,那么答案几乎是一样的。

我一直在和宏的东西混在一起。考虑这些不同的情况:

1) 当整个向量都在一起时,它就工作了

(defun a ()
  (interactive)
  (execute-kbd-macro [?\M-x ?l ?i ?n ?u ?m ?- ?m ?o ?d ?e return]))
2) 但当我把它分开的时候,它没有

(defun a ()
  (interactive)
  (b)
  (c)
  (d))

(defun b ()
  (execute-kbd-macro [?\M-x]))

(defun c ()
  (execute-kbd-macro [?l ?i ?n ?u ?m ?- ?m ?o ?d ?e]))

(defun d ()
  (execute-kbd-macro (vector 'return)))
3) 将其作为字符串运行也不起作用

(defun a ()
  (interactive)
  (execute-kbd-macro (string-to-vector "M-x linum-mode RET")))

(defun a ()
  (interactive)
  (execute-kbd-macro "M-x linum-mode RET"))

我真的需要把这些事件连在一起。那么,我需要在向量上使用vconcat吗?

我想我可以使用类似的东西。我要试一下。你会问我为什么需要交互调用它。我不需要。但是这样更好。我正在做一些测试。所以我想模拟一个用户。我可以直接调用这个函数,但这不是用户与它交互的方式。好吧,kbd宏本质上是用户与它交互的方式。这只是一个发送到Emacs的按键流。你对Emacs了解得越多,你就越意识到它是多么的精彩。有时你怀疑某件事是否可能,结果总是这样。我不认为这对我有帮助,因为我仍然需要输入一些东西,我不能这样做。我必须模拟一下。查看对Trey Jackson的评论以了解原因。啊,我以为您希望
调用func
使用与
某些func
完全相同的交互界面,而无需再次指定其交互界面。是的,要获得您想要的,您可以这样做。这就是为什么我的解决方案有“vconcat”调用。