로고
기본적으로 나 ” 지난 몇 주 동안 한 번에 한 모드 씩 키 바인딩을 사용자 지정하려고했기 때문에 각 모드를 하나씩 살펴보고 키맵을 개별적으로 완전히 지 웠습니다. 그런 다음 유용하다고 생각되는 기능을 바인딩합니다.
또한 키맵의 내부 작동, 연관성, 조작 방법 등에 대해 자세히 알아보기 위해 교육 목적으로이 작업을 수행합니다.
하지만 제가 막힌 것은 키 (또는 functions
/ macros
)입니다. 무엇을 호출해야하는지)가 정의되어 있는지 확인하십시오. 예 : <backtab>
, <C-return>
, <C-tab>
, <C-iso-lefttab>
등
다음 명령을 사용하여 function-key-map
및 local-function-map
의 모든 기능 키를 바인딩 해제했습니다. (setf (cdr <keymap>) nil)
그러나 이러한 키 는 여전히 존재하는 것 같습니다.
혼란 스러울 수도 있습니다. 동시에 여러 수준의 추상화에 대해 내 머리를 감싸려고합니다.
질문
그렇다면 첫 번째 원칙에서 시작하여 사용자 정의 이름과 기능을 사용하여 직접 만들 수 있도록 이러한 키를 완전히 제거하려면 어떻게해야합니까?
보너스 질문
(define-key input-decode-map [?\C-i] (kbd "<C-i>"))
가 C-i
및 <C-i>
다릅니 까?
Control + i == C-i
== ^I
== TAB
Control + i = = <C-i>
! = TAB
이것이 순서대로 일어나야하는 내 생각의 패러다임 전환과 관련이있을 수 있습니까? 키맵을 더 잘 이해하려면?
누군가 다음과 같은 형식으로 사소하고 복잡한 예제를 만들 수 있다면 미래에 저와 사람들에게 정말 도움이 될 것이라고 생각합니다 (현재 주요 모드가 text-mode
라고 가정).
키 누르기 Ctrl + 백 스페이스 ->
local-function-keymap Control + 백 스페이스 = <C-backspace>
->
텍스트 모드지도 <C-backspace>
= nil
->
글로벌지도 <C-backspace>
= backward-kill-word
업데이트
(종류) 함수를 지운 다음 해당 ASCII 키에 다음과 같이 다시 바인딩합니다.
(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127])
하지만 키를 다시 바인딩하지 않더라도 어떤 이유로 든 나도 모르게 mod 키의 ifiers는 여전히 작동합니다. 그럼 내가 알지 못하는 키맵이 있나요?
if <tab> = undefined C-<tab> = defined
댓글
답변
질문의 일부에 답변 해 드릴 수 있습니다. 다른 사람들이 여기에서 더 많은 도움을받을 수 있습니다.
<backtab>
는 “기능 키”라고하지만 모든 키맵의 명령에 바인딩 될 수 있습니다. (이 문맥에서 function-key-map
는 잊어 버려)
Vanilla Emacs (emacs -Q
, init 파일 없음) 다양한 키맵에서 일부 기능 키를 바인딩합니다. 그리고로드하는 라이브러리도 그렇게 할 수 있습니다.
정말로 함수 키 바인딩을 제거하고 싶다면 주어진 상황에서 주어진 시간에 현재의 모드에서 작업하는 것이 좋습니다. C-h k
를 사용하여 이러한 키가 바인딩 된 것을 확인합니다. 바인딩 된 키맵 (일반적으로 모드 키맵)을 결정한 다음 해당 맵에서 바인딩을 해제합니다 (init 파일에서 , 예를 들어 모드 후크에서) 헹구고 반복합니다.
C-h M-k
(describe-keymap
) 뒤에 키맵에 바인딩 된 변수 (또는 변수가없는 경우 실제 키맵이 이어짐)가 뒤 따릅니다.describe-keymap
를 사용하려면 help-fns+.el
라이브러리가 필요합니다.
일부 기능 키 (예 : backtab
및 f1
또는 오히려 <backtab>
및 <f1>
( 나는 네이 키드 표기법을 선호합니다 )는 꽤 표준입니다. 다른 것들은 Emacs에만 해당됩니다. 기능 키는 물리적 구현이 다를 수있는 항목의 논리적 이름이라고 생각하면됩니다. 예를 들어 backtab
는 일반적으로 기본적으로 S-TAB
입니다. C-h k
의 경우 *Help*
에서 가끔 볼 수있는 번역표시 뒤에있는 것입니다.
( 하지만 키와 키맵에 대해 배우는 것 외에 키 바인딩을 제거하는이 연습을 수행하는 이유가 궁금합니다.보다 일반적인 것은 단순히 바인딩하지 않는 명령에 다른 키를 바인딩하는 것입니다. 이자형. 어쨌든 이유를 이해할 필요는 없습니다.)
댓글
- 정의 된 위치를 알아 낸 것 같습니다.
keyboard.c
소스 파일 에 하드 코딩되어 있으므로 완전히 삭제할 수있는 방법이 없습니다.
li>
을 찾고있는 것 같습니다.
x-alternatives-map
및key-translation-map
및input-decode-map
그러나 저는 ' 어디 백탭이 있는지 파악할 수 없습니다. '의 정의는 …keyboard.c
소스 파일 . 따라서 완전히 삭제할 수있는 방법은 없습니다.