考虑下面的例子:我想从迷你缓冲区使用ido读取文件,但合并在我经常使用的所有目录中。我不能只执行干净的方式来执行Emacs迷你缓冲区中的命令
(ido-find-file)
(ido-merge-work-directories)
因为第二个sexp将只在用户完成选择文件后执行。那么问题是:在minibuffer的命令循环中执行命令的最好/最干净的方式是什么?
我知道只有这样,才能做,这是我想要的命令绑定到一个键序列,并依次加入到读命令的事件所以关键的运行,一旦我们进入迷你缓冲区命令循环:
(setq unread-command-events (append (listify-key-sequence (kbd "M-s")) unread-command-events)) ; std key-binding for ido-merge-work-directories
(ido-find-file)
但这是非常hacky,我想知道是否有更好的解决方案。
谢谢!
编辑:只是为了澄清,这个问题是不是关于ido。让我解释。当你调用一个函数,如发现文件,或切换到缓冲,或任何需要小缓冲区的互动中,“递归编辑”创建 - 也就是说,一个命令循环的内部命令循环。
所以,代码:
(message "A")
(recursive-edit)
(message "B")
印刷品A,然后暂停功能的执行并重新进入命令循环。你可以四处移动,打开文件等,直到你离开递归编辑,然后打印“B”。
所以,让我改一下我的问题:如果你创建一个递归编辑,你怎么又在创建新的命令循环执行一个命令(在同一个函数)?如果我必须键入额外的键,它不会计算在内。对于ido示例,要合并目录,ido必须正在运行:在调用ido之前执行合并目录不在ido的命令循环中。如果你之后执行它,那么ido就会销毁它的命令循环。
你总是* *要合并的其他目录? – 2012-07-08 08:06:36
这只是一个例子,但对于我正在编写的应用程序(项目管理库),答案是肯定的。我主要对一般问题的答案感兴趣:如果我进入minibuffer命令循环,我该如何干净地执行该循环中的命令? – 2012-07-08 20:04:40