2017-12-11 8 views
0

주위에 기본 ggtags 인터페이스가 없습니다. 나는 IDO로 ggtags-find-file을 사용할 수 있었지만, ggtags-find-definition은 훨씬 더 어려운 문제이다. 할 수있는 패키지가 있습니까? 그렇지 않다면 어떻게 만드나요?IDT 인터페이스를 사용하는 ggtags find 정의/참조

참고 : 전체 새 버퍼 (및 창)가 아닌 퍼지 미니 버퍼에서 발견 된 정의/참조를 탐색 할 수 있기를 원합니다.

답변

1

일반적으로 나는 ido-completing-read-plus (이전의 ido-ubiquitous)을 제안합니다. 그것은 거의 모든 명령을 completing-read을 사용하여 ido-completing-read 대신 사용합니다. 그러나, 그것이 잘 작동하지 않는 중요한 경우가 하나 있습니다 : 완성 후보가 함수에 의해 생성되는 경우. 이것은 ggtags-completion-table의 경우입니다. ggtags가 완료 후보를 생성하는 방법입니다.

solutionido-completing-read으로 전달하기 전에 후보자를 확장하는 사용자 고유의 ggtags-completing-read-function을 정의해야합니다. 참고 : ido-completing-read (그리고 차례로 ido-completing-read-plus)이 허용하지 않는 이유는 많은 양의 메모리와 CPU를 사용하고 UI가 정지 할 수 있기 때문입니다. 많은 수의 수료 후보자가 있다면 수락 할 수 있도록 조정해야 할 것입니다. 또한 대부분의 ggtags 명령은 점의 기호와 함께 작동합니다. 일반적으로 접두사 arg (C-u)를 주면 기호를 묻는 것처럼 보입니다.

(defun jpk/ggtags-completing-read (&rest args) 
    (apply #'ido-completing-read 
     (car args) 
     (all-completions "" ggtags-completion-table) 
     (cddr args))) 
(setq ggtags-completing-read-function #'jpk/ggtags-completing-read) 
+0

발견 정의에 도달했을 때 작동하지 않습니다. 발견 된 정의로 채워진 버퍼로 새 창이 생성되었습니다.이 동작을 원하지 않습니다. 정의/참조가 퍼지 일치로 미니 버퍼에 있어야합니다. – Seraph

+0

@Seraph는 애매한 메타 솔루션이 아닌 실제 솔루션으로 내 대답을 업데이트했습니다. – jpkotta

+0

예상대로 작동하지 않습니다. ggtags-find-definition은 IDO 미니 버퍼가 아닌 버퍼에 결과를 표시합니다. 죄송합니다, 아마도, 제 문제를 충분히 지정하지 않았을 수도 있습니다 ... – Seraph

1

당신이 ggtags-find-definition를 실행하고 결과를 발견하고 버퍼 *ggtags-global*에 넣어 가정하면, 파일 이름과 줄 번호를 추출하고 당신이 원하는 하나를 선택하는 IDO를 사용하게됩니다이 기능을 사용하지 않음.

(defun ido-goto-grep-results (grep-buffer prompt) 
    (interactive) 
    (let (candidates result filename dirname line) 
    (with-current-buffer grep-buffer 
     (setq dirname default-directory) 
     (save-excursion 
     (save-match-data 
      (goto-char (point-min)) 
      (forward-line 4) 
      (while (re-search-forward "^\\(.+\\):\\([0-9]+\\):" nil 'noerror) 
      (push (concat (match-string 1) ":" (match-string 2)) 
        candidates))))) 
    (setq result (split-string (ido-completing-read prompt candidates nil t) ":")) 
    (setq filename (car result)) 
    (setq line (string-to-number (cadr result))) 
    (find-file-other-window (expand-file-name filename dirname)) 
    (goto-char (point-min)) 
    (forward-line (1- line)))) 
(ido-goto-grep-results "*ggtags-global*" "Jump to definition: ") 

매우 거친 것입니다. 직접 ggtags-find-definitionido-goto-grep-results을 실행하는 자신의 find-definition 명령을 만들고 싶을 것입니다. 어떻게 든 실제 결과 만 얻고 "Global found N definitions ..."라인은 필요하지 않습니다 (더 나은 regexp, ggtags 버퍼를 좁히거나 다른 방법으로).

+0

끝내 주셔서 감사합니다. 예를 들고 놀고 최종 해결책을 게시하겠습니다. – Seraph