< 백탭 > 키는 어떻게 정의됩니까? 그것을 없애는 방법; 처음부터 새 것을 만드는 방법은 무엇입니까?

로고
기본적으로 나 ” 지난 몇 주 동안 한 번에 한 모드 씩 키 바인딩을 사용자 지정하려고했기 때문에 각 모드를 하나씩 살펴보고 키맵을 개별적으로 완전히 지 웠습니다. 그런 다음 유용하다고 생각되는 기능을 바인딩합니다.
또한 키맵의 내부 작동, 연관성, 조작 방법 등에 대해 자세히 알아보기 위해 교육 목적으로이 작업을 수행합니다.

하지만 제가 막힌 것은 (또는 functions / macros)입니다. 무엇을 호출해야하는지)가 정의되어 있는지 확인하십시오. 예 : <backtab>, <C-return>, <C-tab>, <C-iso-lefttab>

다음 명령을 사용하여 function-key-maplocal-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 

댓글

  • 그것은 ' 나에게 미스테리입니다. 🙁 거기에 '도 x-alternatives-mapkey-translation-mapinput-decode-map 그러나 저는 ' 어디 백탭이 있는지 파악할 수 없습니다. '의 정의는 …
  • 정의 된 위치를 알아 낸 것 같습니다. keyboard.c 소스 파일 . 따라서 완전히 삭제할 수있는 방법은 없습니다.

답변

질문의 일부에 답변 해 드릴 수 있습니다. 다른 사람들이 여기에서 더 많은 도움을받을 수 있습니다.

<backtab>는 “기능 키”라고하지만 모든 키맵의 명령에 바인딩 될 수 있습니다. (이 문맥에서 function-key-map는 잊어 버려)

Vanilla Emacs (emacs -Q, init 파일 없음) 다양한 키맵에서 일부 기능 키를 바인딩합니다. 그리고로드하는 라이브러리도 그렇게 할 수 있습니다.

정말로 함수 키 바인딩을 제거하고 싶다면 주어진 상황에서 주어진 시간에 현재의 모드에서 작업하는 것이 좋습니다. C-h k를 사용하여 이러한 키가 바인딩 된 것을 확인합니다. 바인딩 된 키맵 (일반적으로 모드 키맵)을 결정한 다음 해당 맵에서 바인딩을 해제합니다 (init 파일에서 , 예를 들어 모드 후크에서) 헹구고 반복합니다.

C-h M-k (describe-keymap) 뒤에 키맵에 바인딩 된 변수 (또는 변수가없는 경우 실제 키맵이 이어짐)가 뒤 따릅니다.describe-keymap를 사용하려면 help-fns+.el 라이브러리가 필요합니다.

일부 기능 키 (예 : backtabf1 또는 오히려 <backtab><f1> ( 나는 네이 키드 표기법을 선호합니다 )는 꽤 표준입니다. 다른 것들은 Emacs에만 해당됩니다. 기능 키는 물리적 구현이 다를 수있는 항목의 논리적 이름이라고 생각하면됩니다. 예를 들어 backtab는 일반적으로 기본적으로 S-TAB입니다. C-h k의 경우 *Help*에서 가끔 볼 수있는 번역표시 뒤에있는 것입니다.


( 하지만 키와 키맵에 대해 배우는 것 외에 키 바인딩을 제거하는이 연습을 수행하는 이유가 궁금합니다.보다 일반적인 것은 단순히 바인딩하지 않는 명령에 다른 키를 바인딩하는 것입니다. 이자형. 어쨌든 이유를 이해할 필요는 없습니다.)

댓글

  • 정의 된 위치를 알아 낸 것 같습니다. keyboard.c 소스 파일 에 하드 코딩되어 있으므로 완전히 삭제할 수있는 방법이 없습니다.

li>

  • 지금까지받은 질문을 업데이트했습니다. unknown-unknown 누락 된 키맵
  • 을 찾고있는 것 같습니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다