是否可以使用ido-mode完成来查找TAGS文件中的定义?我怀疑ido-completed-read是答案的一部分。这是我的非工作代码,它显示了一个未填充的ido模式迷你缓冲区:
(defun ido-choose-from-tags ()
"Use ido to select tags "
(interactive)
(etags-tags-apropos
(ido-completing-read "Tags: " nil t)))
答案 0 :(得分:3)
有点低效,但是如何:
(defun my-ido-find-tag ()
"Find a tag using ido"
(interactive)
(tags-completion-table)
(let (tag-names)
(mapc (lambda (x)
(unless (integerp x)
(push (prin1-to-string x t) tag-names)))
tags-completion-table)
(find-tag (ido-completing-read "Tag: " tag-names))))
答案 1 :(得分:1)
为了找到定义,我使用了CEDET的命令semantic-ia-fast-jump,它与来自GNU Global的gtags一起提供了适当且快速的源文件导航。
答案 2 :(得分:0)
当然有可能,这是EMACS。非工作代码告诉你什么不起作用?
我的第一个怀疑是,如果您使用tags-apropos
(请参阅etags.el中的第1885行),可能会更好,因为etags-tags-apropos
未定义且全部都是。
答案 3 :(得分:0)
答案 4 :(得分:0)
扩展scottfrazer的解决方案:
(defun my-ido-find-tag ()
"Find a tag using ido"
(interactive)
(tags-completion-table)
(let* ((initial-input
(funcall (or find-tag-default-function
(get major-mode 'find-tag-default-function)
'find-tag-default)))
(initial-input-regex (concat "\\(^\\|::\\)" initial-input "$")))
(find-tag (ido-completing-read
"Tag: "
(sort
(remove nil
(mapcar (lambda (tag) (unless (integerp tag)
(prin1-to-string tag 'noescape)))
tags-completion-table))
;; put those matching initial-input first:
(lambda (a b) (string-match initial-input-regex a)))
nil
'require-match
initial-input))))
这会将匹配标记的标记放在列表的开头。如果两个标签匹配,我猜你可以通过buffer-file-name进行二次排序,但这可能并不总是你想要的。对于真正巨大的标签表,使用https://github.com/magnars/s.el#s-ends-with-suffix-s-optional-ignore-case比使用字符串匹配更快。