在有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 也能被识别出来是从函数调用的。
一直用的是 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 个赞
感谢,的确可以解决。只是之前我一直想写一个更通用的命令。。。