히스토리

  • [2025-07-13 Sun 16:03] 여기 모으는게 좋겠다. 키바인딩 변경하는 것
  • [2024-07-04 Thu 17:04] EGLOT

관련노트

BIBLIOGRAPHY

JunghanKim. (2024) 2024. “Junghan0611/Doomemacs.” https://github.com/junghan0611/doomemacs.

2025 vterm-mode-map 키바인딩 삭제

[2025-07-13 Sun 16:17] 메타키가 연결된 것들 추가로 삭제했다. 워크스페이스 변경

(after! vterm
  (setq vterm-always-compile-module t) ; Compile Vterm without asking.
  (undefine-key! vterm-mode-map "M-1" "M-2" "M-3" "M-4" "M-5" "M-6" "M-7" "M-8" "M-9" "M-0")
  (map! :map vterm-mode-map "M-y" #'vterm-yank-pop))
 
(when (locate-library "vterm")
  (with-eval-after-load 'vterm
    (define-key vterm-mode-map (kbd "<f1>") nil)
    (define-key vterm-mode-map (kbd "<f2>") nil)
    (define-key vterm-mode-map (kbd "<f3>") nil)
    (define-key vterm-mode-map (kbd "<f4>") nil)
    (define-key vterm-mode-map (kbd "<f5>") nil)
    (define-key vterm-mode-map (kbd "<f6>") nil)
    (define-key vterm-mode-map (kbd "<f7>") nil)
    (define-key vterm-mode-map (kbd "<f8>") nil)
    (define-key vterm-mode-map (kbd "<f10>") nil)
    (define-key vterm-mode-map (kbd "<f10>") nil)
    (define-key vterm-mode-map (kbd "<f11>") nil)
    (define-key vterm-mode-map (kbd "<f12>") nil)
    )
  )

2025 GPTEL Transient 키바인딩 변경

아래 정보를 바탕으로 키바인딩 변경했다. 하여간 어려워서 살겄나

(after! gptel-transient
  (transient-suffix-put 'gptel-tools 'gptel--suffix-mcp-connect :key "a")
  (transient-suffix-put 'gptel-tools 'gptel--suffix-mcp-disconnect :key "d"))

2024 패키지 로딩 순서 반영 - 키바인딩

[2024-07-04 Thu 17:04]

(JunghanKim [2024] 2024)

“junghan0611/doomemacs” JunghanKim 2024 - An Emacs framework for the stubborn martian hacker

junghan0611/doomemacs/commit/d3d50474888195ab43db03c7607f356424b09d18-

키바인딩 이슈 문제 발생 consult-eglot 키 바인딩에서 문제를 다음과 같이 해결한다.

 
:init (define-key eglot-mode-map [remap xref-find-apropos] #'consult-eglot-symbols)
 
;; 수정
 
:init
(map! :after eglot
      :map eglot-mode-map
      [remap xref-find-apropos] #'consult-eglot-symbols))

로그

|2025-07-13 Sun 15:48| GPTEL 트렌지언트

@user 아래 gptel 코드를 보면, “M+“를 입력하라고 하는데

“M-+“과 무엇이 다른가?

(with-eval-after-load 'gptel-transient
  (transient-define-suffix gptel--suffix-mcp-connect ()
    "Register tools provided by MCP servers."
    :key "M+"
    :description "Add MCP server tools"
    :transient t
    (interactive)
    ;; gptel-tools stores its state in its scope slot.  Retain the scope but
    ;; update it with the newly selected tools.  Then set up gptel-tools.
    (condition-case err
        (gptel-mcp-connect
         nil (lambda () (when-let* ((transient--prefix)
                               ((eq (oref transient--prefix command)
                                    'gptel-tools)))
                     (let ((state (transient-scope 'gptel-tools)))
                       (plist-put state :tools
                                  (delete-dups
                                   (nconc (mapcar (lambda (tool)
                                                    (list (gptel-tool-category tool)
                                                          (gptel-tool-name tool)))
                                                  gptel-tools)
                                          (plist-get state :tools))))
                       (transient-setup 'gptel-tools nil nil :scope state))))
         t)
      (user-error (message "%s" (cadr err)))))
 
  (transient-define-suffix gptel--suffix-mcp-disconnect ()
    "Remove tools provided by MCP servers from gptel."
    :key "M-"
    :description (lambda () (if (cl-some (lambda (cat) (string-match-p "^mcp-" cat))
                                    (map-keys gptel--known-tools))
                           "Remove MCP server tools"
                         "Shut down MCP servers"))
    :transient t
    :inapt-if
    (lambda () (or (not (boundp 'mcp-hub-servers))
              (null mcp-hub-servers)
              (cl-loop
               for v being the hash-values of mcp-server-connections
               never v)))
    (interactive)
    (call-interactively #'gptel-mcp-disconnect)
    ;; gptel-tools stores its state in its scope slot.  Retain the scope but
    ;; remove tools from it that no longer exist, then set up gptel-tools
    (cl-loop with state = (transient-scope 'gptel-tools)
             with tools = (plist-get state :tools)
             for tool-spec in tools
             if (map-nested-elt gptel--known-tools tool-spec)
             collect tool-spec into valid-tools
             finally do (plist-put state :tools valid-tools)
             (transient-setup 'gptel-tools nil nil :scope state)))
 
  (transient-remove-suffix 'gptel-tools '(0 2))
  (transient-append-suffix 'gptel-tools '(0 -1)
    [""
     (gptel--suffix-mcp-connect)
     (gptel--suffix-mcp-disconnect)]))

@assistant Emacs의 키 표기법에서 “M+“와 “M-+“는 실제로 같은 키 조합을 의미합니다.

  • =M-=는 Emacs에서 일반적으로 사용되는 표기법으로, Meta 키(대부분의 키보드에서는 Alt 키)를 누른 상태에서 플러스() 키를 누르는 조합입니다.
  • =M+=는 동일한 조합을 표현하는 다른 방식의 표기법입니다. 특히 transient 패키지에서는 이 형식의 표기법을 사용하기도 합니다.

코드에서 보면 :key "M+" (MCP 연결 기능)와 :key "M-" (MCP 연결 해제 기능)은 각각 Meta+플러스, Meta+마이너스 키 조합을 정의합니다. 기능적으로 차이는 없고 표기법의 차이일 뿐입니다.

@user 실제로 gptel 패키지의 transient에서 저 키 조합이 입력이 안된다. 다른 키 바인딩으로 충돌이 나는 것 같은데 확인하고 해결하는 방법을 알려줘

@assistant 키 바인딩 충돌 문제를 해결하기 위한 방법은 다음과 같습니다:

1. 현재 키 바인딩 확인하기

(describe-key (kbd "M-+"))

이 명령어를 실행하면 현재 M-+ 키가 어디에 바인딩되어 있는지 볼 수 있습니다.

2. transient 메뉴 내 키 바인딩 변경하기

코드에서 키 바인딩을 다른 것으로 변경할 수 있습니다:

(with-eval-after-load 'gptel-transient
  ;; 키 바인딩 변경 예시 ("+M"이나 다른 사용하지 않는 키로 변경)
  (transient-define-suffix gptel--suffix-mcp-connect ()
    "Register tools provided by MCP servers."
    :key "+M"  ;; 다른 키로 변경
    :description "Add MCP server tools"
    ;; 나머지 코드는 동일
    ))

3. transient 디버깅 방법

transient 메뉴가 활성화된 상태에서 ? 키를 누르면 사용 가능한 모든 키 바인딩을 확인할 수 있습니다. 이를 통해 어떤 키가 이미 사용 중인지 확인할 수 있습니다.

4. 커스텀 설정으로 덮어쓰기

(use-package gptel
  :config
  (with-eval-after-load 'gptel-transient
    (transient-suffix-put 'gptel-tools "M+" :key "다른키")
    (transient-suffix-put 'gptel-tools "M-" :key "다른키")))

가장 간단한 방법은 충돌하지 않는 다른 키를 선택하는 것입니다. 예를 들어 +, T+, C-+ 등을 시도해 볼 수 있습니다.

@user 확인해 보니 다음과 같이 나오는데 이유가 무엇일까?

#(“M-+ is undefined” 0 3 (face help-key-binding font-lock-face help-key-binding))

@assistant “M-+ is undefined”라는 메시지가 나오는 것은 실제로 M-+ 키 조합이 현재 Emacs 전역에서 어떤 명령어에도 바인딩되어 있지 않다는 것을 의미합니다. 그러나 여전히 gptel-transient 메뉴에서 키 입력 문제가 발생하는 이유는 다음과 같은 가능성이 있습니다:

  1. 표기법 차이: 코드에서는 :key "M+" 형식으로 정의되어 있지만, transient는 내부적으로 이를 다르게 해석할 수 있습니다.

  2. 키보드 입력 문제: 일부 키보드나 터미널 설정에서 Meta와 + 조합이 제대로 인식되지 않을 수 있습니다.

  3. transient 패키지의 제한: transient 패키지는 일부 특수 키 조합에 제한이 있을 수 있습니다.

해결 방법:

;; gptel-transient이 로드된 후 키 바인딩을 명시적으로 변경
(with-eval-after-load 'gptel-transient
  (transient-suffix-put 'gptel-tools 'gptel--suffix-mcp-connect :key "+")
  (transient-suffix-put 'gptel-tools 'gptel--suffix-mcp-disconnect :key "-"))

더 단순한 키(, -)로 변경하거나 다른 키 조합(예: C-, T+ 등)을 시도해보세요. transient 메뉴에서 ?를 눌러 사용 가능한 키 목록을 확인할 수도 있습니다.