키를 눌러 올바른`(kbd“…”)`를 삽입하는 기능이 있습니까?


20

kbd함수의 키 이름을 찾는 것이 지루 합니다. 키를 눌러 정확한 키 이름을 자동으로 삽입하는 방법이 있습니까?

예를 들어 무언가를 원합니다. 입력하고 있습니다.

(local-set-key |

나는 달리고 magical-insert-kbd-command, F6을 누르면

(local-set-key (kbd "<f6>") |

답변:


20

정확히 무엇을 요구하는지 잘 모르겠습니다. 그러나 C-h k키를 누르면 정확히 어떤 문자열을 전달해야하는지 보여줍니다 kbd. 예를 들어을 C-h k f6보여줍니다 <f6>.

다음은 원하는 것을 수행하는 명령입니다. 결과를 C-c c다음에 바인딩합니다 .

(defun foo (key)
  (interactive "kKey: ")
  (insert (format "(kbd %S)" (key-description key))))

(global-set-key (kbd "C-c c") 'foo)

그런 다음 다음을 입력하십시오.

(local-set-key C-c c

키를 사용하라는 메시지가 표시됩니다. 당신이 명중하면 F6키를 당신이 얻을 :

(local-set-key (kbd "<f6>") 

[@HaraldHancheOlsen에 의해 제안에 따라 업데이트 : 변경 "(kbd \"%s\")"".](kbd %S)"


고마워요!. 내가 누락 된 주요 key-description기능 은 기능 이 누락되었습니다 .
dshepherd 2016 년

그러나 OP는 키 링을 킬 링에 자동으로 배치하는 기능을 갖는 것이 유용 할 것입니다.
백열 자

1
@incandescentman : 응? OP는 킬 링 에 대해 어디에서 말 합니까? 그리고 그 문장에서 "키 바인딩"은 무엇을 의미합니까? 키 바인딩은 문자열이 아니며 kill-ring포함됩니다. 당신은 key-description문자열 을 의미 합니까? 또는 위의 formatsexp 의 반환 값 ? 어쨌든, 내가 준 명령을 수정하는 방법을 분명히해야합니다 kill-ring(그냥 사용하십시오 kill-new).
Drew

"자동 삽입" 올바르게 이해하면 위의 솔루션은 키 바인딩 만 표시 kbd <M-return>하지만 init 파일에 삽입하지는 않습니다. (추가 복사 / 붙여 넣기 단계를 수행해야합니다.) 어쩌면 오해했을 수도 있습니다. 내 자신의 개인 사용의 경우, 나는 (예를 들어,이 구문은 유용한 키 바인딩의 구문을 조회 할 수있는 방법을 찾을 것 M-RET또는 M-<return>그래서 내가 다음 수, 킬 링 / 판지에 해당 문자열을 배치 자동으로? 또는 무엇) 및 같은 줄을 쓸 때 키 바인딩을 init 파일에 붙여 넣으십시오 (define-key map (kbd "<M-return>") 'org-return).
백열 자

1
예, 당신은 오해했습니다. (그러나 키 바인딩 sexp에는 오타가 있습니다. sexp kbd에서 global-set-key수정 하는 것을 잊었습니다 . 지금 수정하십시오.) sexp가 바인딩 foo되는 Command 는 키 시퀀스를 읽은 다음 현재 버퍼 지점에 삽입합니다. 그것에 대한 적절한 sexp. 당신이 사용하는 경우 당신의 init 파일에서, 후 , 다음은 삽입 당신이 읽는 키에 필요한 sexp을. global-set-keyC-c ckbdC-c c(local-set-key kbd
Drew

7

M-x local-set-key키 바인딩을 대화식으로 수행 하는 데 사용 하는 경우 C-x ESC ESC( repeat-complex-command)를 사용 하여 구성에 붙여 넣을 수있는 Lisp 표현식을 얻을 수 있습니다. 그러나 친숙한 (kbd ...)스타일의 설명을 사용하지 않을 것입니다 .


산뜻한. define-key실제로 사용하는 경향이 있습니다 . 키를 정의하는 함수를 호출하는 후크를 설정하는 것보다 키를 바로 정의하는 것이 더 간단한 것 같습니다.
dshepherd 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.