Могу ли я получить завершение в стиле ido для поиска тегов в Emacs? - PullRequest
6 голосов
/ 25 января 2009

Можно ли использовать завершение в режиме ido для поиска определений в файле TAGS? Я подозреваю, что идо-завершение-чтение является частью ответа. Вот мой нерабочий код, который показывает незаселенный минибуфер режима ido:

(defun ido-choose-from-tags ()
  "Use ido to select tags "
  (interactive)
    (etags-tags-apropos
     (ido-completing-read "Tags: "  nil t)))

Ответы [ 5 ]

3 голосов
/ 25 января 2009

Вид неэффективно, но как насчет:

(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 голос
/ 25 января 2009

Чтобы найти определения, я использую команду CEDET semantic-ia-fast-jump, которая вместе с gtags из GNU Global обеспечивает правильную и быструю навигацию по исходным файлам.

0 голосов
/ 04 февраля 2013

Расширение решения Скоттфразера:

(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))))

Это помещает тэги, совпадающие с тэгом в начале списка. Я полагаю, что вы можете выполнить вторичную сортировку по имени файла буфера, если два тега совпадают, но это не всегда может быть тем, что вы хотите. Может быть быстрее использовать https://github.com/magnars/s.el#s-ends-with-suffix-s-optional-ignore-case, чем сопоставление строк для действительно огромных таблиц тегов.

0 голосов
/ 05 сентября 2011

См. Также, в качестве альтернативы: http://www.emacswiki.org/emacs/Icicles_-_Emacs_Tags_Enhancements

0 голосов
/ 25 января 2009

Конечно, это возможно, это EMACS. Что делает нерабочий код, который говорит вам, что он не работает?

Мое первое подозрение состоит в том, что он может работать лучше, если вы используете tags-apropos (см. Строку 1885 в etags.el), поскольку etags-tags-apropos не определено и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...