History

2025 태그 자동완성의 저주를 풀다

[2025-03-04 Tue 17:26]

해결 방법 아래가 끝.

;;;; overide completion-at-point-functions nil
 
;; Global Value (tags-completion-at-point-function)
(setq-default completion-at-point-functions nil)

보관 이게 문제다.

로그

2025-03-04 W09

@user 이맥스에서 complete-tag를 활용하는 방법은? completion-at-point에서 제외하는 방법?

@assistant 이맥스에서 =complete-tag=를 활용하는 방법에 대한 정보는 제공되지 않았지만, =completion-at-point=에서 특정 기능을 제외하는 방법에 대해 설명할 수 있습니다.

completion-at-point에서 기능 제외하기

completion-at-point=는 이맥스의 주요 모드에서 =C-M-i 또는 M-TAB 키로 호출되는 명령어로, 현재 커서 위치의 심볼을 완성합니다. 이 명령어는 =completion-at-point-functions=라는 훅 변수를 사용하여 완성 후보를 생성합니다. 특정 기능을 제외하려면 이 훅 변수에서 해당 기능을 제공하는 함수를 제거해야 합니다.

예시: 특정 함수 제거
;; completion-at-point-functions에서 특정 함수 제거
(defun remove-function-from-completion-at-point (func)
  (setq completion-at-point-functions
        (delq func completion-at-point-functions)))
 
;; 예를 들어, 특정 함수 'my-completion-function'을 제거하려면
(remove-function-from-completion-at-point 'my-completion-function)

이 코드는 completion-at-point-functions 리스트에서 특정 함수를 제거하여 해당 기능이 완성 후보에 포함되지 않도록 합니다.

completion-at-point-functions 사용법

이 훅 변수는 함수의 리스트로 구성되며, 각 함수는 completion-at-point 명령어가 호출될 때 순차적으로 실행됩니다. 첫 번째로 =nil=이 아닌 값을 반환하는 함수가 완성 후보를 제공합니다. 따라서 특정 기능을 제외하려면 해당 기능을 제공하는 함수가 =nil=을 반환하도록 하거나, 훅 변수에서 해당 함수를 제거해야 합니다[2][4].

Citations: [1] https://phrimm136.github.io/post/2020/05/emacs-conversion-guide-4/ [2] https://www.gnu.org/software/emacs/manual/html_node/elisp/Completion-in-Buffers.html [3] https://semadi.tistory.com/41 [4] https://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html [5] https://notmuchmail.org/emacstips/

@user etags 패키지에 대해서 알려줘.

@assistant *etags 패키지

etags는 이맥스에서 사용하는 태그 생성 도구로, 다양한 프로그래밍 언어의 소스 및 헤더 파일에서 심볼 정보를 추출하여 TAGS 파일을 생성합니다. 이 TAGS 파일은 이맥스에서 심볼을 찾아가거나 참조하는 데 사용됩니다.

주요 기능
  • TAGS 파일 생성: etags 명령어를 사용하여 C, C++, Java, Python 등 여러 언어의 소스 파일에서 심볼 정보를 추출하여 TAGS 파일을 만듭니다.
  • 심볼 탐색: 이맥스에서 M-. 키를 사용하여 TAGS 파일에 등록된 심볼로 이동할 수 있습니다.
  • 다양한 언어 지원: etags는 20개 이상의 프로그래밍 언어를 지원합니다.
사용법
  1. TAGS 파일 생성:

       find . -name "*.[ch]" -print | xargs etags -a

    또는 이맥스 내에서:

       M-x compile RET etags *.c *.h RET
  2. 심볼 탐색:

    • M-.: 심볼로 이동
    • M-*: 이전 위치로 돌아가기

etags는 코드 탐색 및 관리에 유용한 도구로, 특히 대규모 프로젝트에서 코드의 구조를 파악하는 데 도움을 줍니다.

Citations: [1] https://semadi.tistory.com/34 [2] https://en.wikipedia.org/wiki/Ctags [3] https://ftp.gnu.org/old-gnu/Manuals/emacs-lisp-intro/html_node/etags.html [4] https://jeongmin.github.io/2017/11/09/emacs/emacs-package/ [5] https://www.44bits.io/ko/post/managing-emacs-configuration-with-cask

@assistant xref와 etags를 연동하여 사용하는 이유는 이맥스에서 코드 탐색과 관리를 효율적으로 수행하기 위해서입니다. xref는 이맥스 25 이후 버전에서 도입된 코드 탐색 기능으로, 심볼의 정의나 참조를 쉽게 찾을 수 있도록 해줍니다. etags는 코드의 심볼을 색인화하여 빠르게 탐색할 수 있는 TAGS 파일을 생성하는 도구입니다.

@user xref와 etags를 연동하여 사용하는 이유는?

xref와 etags의 연동 이유
  1. 효율적인 코드 탐색:

    • xref: 이맥스 내에서 코드의 심볼을 쉽게 탐색하고, 정의나 참조를 찾을 수 있는 기능을 제공합니다. xref는 기본적으로 TAGS 파일을 사용하지 않지만, etags와 함께 사용하면 더 강력한 코드 탐색이 가능합니다.
    • etags: TAGS 파일을 생성하여 코드의 심볼을 색인화합니다. 이 파일을 xref와 함께 사용하면 코드의 구조를 빠르게 파악하고, 특정 심볼의 정의나 참조를 쉽게 찾을 수 있습니다.
  2. 대규모 프로젝트 관리:

    • 대규모 프로젝트에서는 코드의 복잡성이 높아지며, 특정 함수나 변수의 정의를 찾는 것이 어려울 수 있습니다. xref와 etags를 함께 사용하면 이러한 문제를 해결할 수 있습니다.
  3. 유연한 설정:

    • xref는 기본적으로 TAGS 파일을 사용하지 않지만, etags와 함께 사용하면 TAGS 파일을 기반으로 코드 탐색을 수행할 수 있습니다. 이는 사용자가 자신의 환경에 맞게 설정할 수 있는 유연성을 제공합니다.
사용 방법
  1. TAGS 파일 생성:

       find . -name "*.[ch]" -print | xargs etags -a

    또는 이맥스 내에서:

       M-x compile RET etags *.c *.h RET
  2. xref 사용:

    • M-.: 심볼로 이동
    • M-*: 이전 위치로 돌아가기
  3. xref와 etags 연동: xref는 기본적으로 TAGS 파일을 사용하지 않지만, etags가 생성한 TAGS 파일을 xref가 사용하도록 설정할 수 있습니다. 이를 위해서는 이맥스의 설정 파일에서 xref-backend-functions 변수를 조정하여 etags의 TAGS 파일을 사용하도록 할 수 있습니다.

       (setq xref-backend-functions '(xref-etags-backend))

이렇게 xref와 etags를 함께 사용하면 코드 탐색과 관리가 더 효율적으로 이루어질 수 있습니다.

Citations:

@user