히스토리
- 여기 모으는게 좋겠다. 키바인딩 변경하는 것
- EGLOT
관련노트
BIBLIOGRAPHY
JunghanKim. (2024) 2024. “Junghan0611/Doomemacs.” https://github.com/junghan0611/doomemacs.
2025 vterm-mode-map 키바인딩 삭제
메타키가 연결된 것들 추가로 삭제했다. 워크스페이스 변경
(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 패키지 로딩 순서 반영 - 키바인딩
(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 메뉴에서 키 입력 문제가 발생하는 이유는 다음과 같은 가능성이 있습니다:
-
표기법 차이: 코드에서는
:key "M+"
형식으로 정의되어 있지만, transient는 내부적으로 이를 다르게 해석할 수 있습니다. -
키보드 입력 문제: 일부 키보드나 터미널 설정에서 Meta와 + 조합이 제대로 인식되지 않을 수 있습니다.
-
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 메뉴에서 ?를 눌러 사용 가능한 키 목록을 확인할 수도 있습니다.