2009-01-24 10 views

Répondre

3

Type d'inefficacité, mais que diriez-vous:

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

Merci, Scott. Un bogue: lorsqu'une balise contient un point, elle insère une barre oblique inverse devant elle, empêchant emacs de trouver la balise. –

+0

Remplacement de la dernière ligne par "(find-tag (remplacer-regexp-in-string" \\\\ "" " \t (ido-complétant-lire" Tag: "tags-noms)))))" semble travail. –

+0

Bonne prise. prin1-to-string peut également prendre un second argument facultatif qui n'échappe pas aux caractères, donc peut-être (prin1-to-string x t) le corrigerait aussi. – scottfrazer

0

Bien sûr, il est possible, cela est emacs. Que fait le code non fonctionnel qui vous dit que ça ne fonctionne pas?

Mon premier soupçon est que cela pourrait fonctionner mieux si vous avez utilisé tags-apropos (voir à propos de la ligne 1885 dans etags.el), vu que etags-tags-apropos n'est pas défini et tous.

1

Pour trouver des définitions i utiliser la commande CEDET sémantique-ia-rapide saut, qui, avec gtags de GNU mondial donne la navigation correcte et rapide grâce à des fichiers source.

+0

En effet, mais l'achèvement de 'ido-mode' pour' semantic-complete-jump' et 'sémantique-complete-jump-local' serait aussi pratique. – Jed

0

Une expansion de la solution de 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)))) 

Cela met à la tête de la liste de tags-à-point tags correspondants. Je suppose que vous pourriez trier secondairement par buffer-file-name si deux balises correspondent, mais ce n'est pas toujours ce que vous voulez. Peut être plus rapide à utiliser https://github.com/magnars/s.el#s-ends-with-suffix-s-optional-ignore-case que la chaîne de correspondance pour les tables de tags vraiment énormes.

Questions connexes