关于ivy是如何与org-tags-view耦合的

,

在有ivy或helm的spacemacs上,输入命令 =org-tags-view= ,就会发现会自动跳出一个补全。 我找了下代码,发现很是奇怪,ivy是如何影响到这个函数的?

我试图通过以下elisp来设置补全的初始值:

  (push '(org-tags-view . "^@") ivy-initial-inputs-alist)
  (org-tags-view t)

如果我通过命令调用org-tags-view,正常;如果我通过函数调用org-tags-view,则无效。

之后我又寻找模拟命令调用的办法,试了下 call-interactively和 funcall-interactively,都不行。

只好来着求助各位老哥们了。

advice?

一般能用一个函数called-interactively-p识别是否被 interactively called。即使是用 call-interactively 也能被识别出来是从函数调用的。

这。。很有可能啊 可是如何定位到相关的代码块呢

用 describe-function 看一下。

早看了,没有任何信息。

一直用的是 Helm,刚刚安装 Ivy 试了下

估计这里的 org-tags-view 就是作为一个命令(从 M-x 或按键使用),而不是一个函数,所以比如这样一个命令:

(defun your-org-tags-view ()
  (interactive)
  (call-interactively #'org-tags-view))

还想设置补全的初始值的话,还需要:

(push '(your-org-tags-view . "^@") ivy-initial-inputs-alist)

估计 Ivy 是通过判断 this-command 之类的实现的。

感谢回复。这意思是说,如果我想在代码里做到类似命令调用org-tags-view效果,是比较难的?

不清楚,或许跟你打算具体怎么用也有关系。从你的问题中,我看不出你想干什么(从用户的角度看)。

我想写一个函数,这个函数调用org-tag-view, 并且设置一些初始的输入值。 比如,GTD的情景模式是以@开头的tag,那么设置初始值为"^@"就是很有价值的做法。

我之前试过其它的思路,比如,得到所有的agenda里的tags自己补全。但是很遗憾没有这个函数,不知道是不是为了性能考虑,org-tag-view的实现好像也不是这样干的,我也没法抄代码。

这个函数是一个命令吗?如果是的话,把它也加入 ivy-initial-inputs-alist 可以解决问题吗?

1 个赞

感谢,的确可以解决。只是之前我一直想写一个更通用的命令。。。