주위에 기본 ggtags
인터페이스가 없습니다. 나는 IDO로 ggtags-find-file
을 사용할 수 있었지만, ggtags-find-definition
은 훨씬 더 어려운 문제이다. 할 수있는 패키지가 있습니까? 그렇지 않다면 어떻게 만드나요?IDT 인터페이스를 사용하는 ggtags find 정의/참조
참고 : 전체 새 버퍼 (및 창)가 아닌 퍼지 미니 버퍼에서 발견 된 정의/참조를 탐색 할 수 있기를 원합니다.
주위에 기본 ggtags
인터페이스가 없습니다. 나는 IDO로 ggtags-find-file
을 사용할 수 있었지만, ggtags-find-definition
은 훨씬 더 어려운 문제이다. 할 수있는 패키지가 있습니까? 그렇지 않다면 어떻게 만드나요?IDT 인터페이스를 사용하는 ggtags find 정의/참조
참고 : 전체 새 버퍼 (및 창)가 아닌 퍼지 미니 버퍼에서 발견 된 정의/참조를 탐색 할 수 있기를 원합니다.
일반적으로 나는 ido-completing-read-plus (이전의 ido-ubiquitous)을 제안합니다. 그것은 거의 모든 명령을 completing-read
을 사용하여 ido-completing-read
대신 사용합니다. 그러나, 그것이 잘 작동하지 않는 중요한 경우가 하나 있습니다 : 완성 후보가 함수에 의해 생성되는 경우. 이것은 ggtags-completion-table
의 경우입니다. ggtags가 완료 후보를 생성하는 방법입니다.
solution은 ido-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)
당신이 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-definition
및 ido-goto-grep-results
을 실행하는 자신의 find-definition
명령을 만들고 싶을 것입니다. 어떻게 든 실제 결과 만 얻고 "Global found N definitions ..."라인은 필요하지 않습니다 (더 나은 regexp, ggtags 버퍼를 좁히거나 다른 방법으로).
끝내 주셔서 감사합니다. 예를 들고 놀고 최종 해결책을 게시하겠습니다. – Seraph
발견 정의에 도달했을 때 작동하지 않습니다. 발견 된 정의로 채워진 버퍼로 새 창이 생성되었습니다.이 동작을 원하지 않습니다. 정의/참조가 퍼지 일치로 미니 버퍼에 있어야합니다. – Seraph
@Seraph는 애매한 메타 솔루션이 아닌 실제 솔루션으로 내 대답을 업데이트했습니다. – jpkotta
예상대로 작동하지 않습니다. ggtags-find-definition은 IDO 미니 버퍼가 아닌 버퍼에 결과를 표시합니다. 죄송합니다, 아마도, 제 문제를 충분히 지정하지 않았을 수도 있습니다 ... – Seraph