2009-01-24 3 views

Antwort

3

Art ineffizient, aber wie etwa:

(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

Danke, Scott. Ein Fehler: Wenn ein Tag einen Punkt enthält, wird davor ein umgekehrter Schrägstrich eingefügt, sodass Emacs das Tag nicht finden können. –

+0

Ersetze die letzte Zeile mit "(find-tag (ersetzen-regexp-in-string" \\\\ "" " \t (ido-completing-read" Tag: "Tag-Namen))))) scheint Arbeit. –

+0

Guter Fang. prin1-to-string kann auch ein optionales zweites Argument verwenden, das char nicht freigibt, also könnte es vielleicht (prin1-to-string x t) auch reparieren. – scottfrazer

0

Natürlich ist es möglich, das ist EMACS. Was macht der nicht funktionierende Code, der dir sagt, dass er nicht funktioniert?

Mein erster Verdacht ist, dass es besser funktionieren könnte, wenn Sie tags-apropos verwenden (siehe etwa Zeile 1885 in etags.el), da etags-tags-apropos nicht definiert ist und alle.

1

Definitionen zu finden i cedet Befehl semantisch-ia-schnell-Sprung, dass zusammen mit gtags von GNU Globale gibt richtige und schnelle Navigation durch Quelldateien verwenden.

+0

In der Tat, aber 'Ido-Modus' Komplettierung für 'semantic-complete-jump' und' semantic-complete-jump-local' wäre auch praktisch. – Jed

0

Eine Erweiterung der Lösung des 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)))) 

Dies bringt Tags timmendes Kennzeichen-at-Punkt an der Spitze der Liste. Ich denke, Sie könnten nach Puffer-Dateiname suchen, wenn zwei Tags übereinstimmen, aber das ist vielleicht nicht immer das, was Sie wollen. Könnte schneller sein als https://github.com/magnars/s.el#s-ends-with-suffix-s-optional-ignore-case als String-Match für wirklich große Tags Tabellen.

Verwandte Themen