2012-05-24 3 views
4

mac os에서 emacs를 사용하고 있습니다. 수정 자 (Meta, Control, ...)를 간단한 키에 매핑하고 싶습니다. 기본적으로 이것은 내가 필요로하는 것입니다 : (global-set-key (kbd "a") 'hyper) 여기 a는 단지 하나의 키이거나 Control-a 또는 무엇이든, 단지 "a"혼자만의 변경자입니다. 예를 들어 "a"가 하이퍼가되기를 원하지만 해결책을 찾을 수 없습니다.emacs 키 수정 자 생성

실마리가 있습니까?

+0

? 내가 본 것에서 하이퍼 및 수퍼 키 설정은 OS에 따라 다릅니다. – Peter

+0

내 이맥스 버전이 23.4 이고 Mac OS 10.7에서 실행 중입니다. – itsu

답변

7

이 방법은 수정자를 누른 상태에서 다른 키를 누르는 의미에서 수정 자 키를 만들지는 않지만 그럼에도 불구하고 하이퍼 바인딩을 사용할 수 있습니다.

기본적으로 당신은 C-X@ 접두사를 통해 추가 수정 자 키를 활용할 수 있습니다. 전체 목록은 C-x@C-h을 참조하십시오.

이러한 바인딩은 function-key-map이며, 동일한 방법으로 자신의 OS 독립적 바인딩을 얻을 수 있습니다. 예컨대 :

(define-key function-key-map (kbd "C-c H") 'event-apply-hyper-modifier) 

function-key-map 모든 local-function-key-map 인스턴스의 부모입니다. 주의 깊게주의하십시오 :

`local-function-key-map '의 항목은 부 모드, 로컬 또는 전역 키맵으로 만든 바인딩과 충돌하는 경우 무시됩니다. 나는. 원래의 키 시퀀스가 ​​다른 바인딩을 가지고 있지 않은 경우에만 재 매핑이 적용됩니다.

C-H내가g(elisp) Translation KeymapsRET

이없는 기존의 바인딩 키 시퀀스를 사용하도록 보장합니다. (이론적으로 매우 제한하지만, 사용자들은 YMMV.)

편집 :이 당신에게 당신이 하이퍼 수정 자 키없이 시스템을 사용하는 기존의 '하이퍼'바인딩에 액세스 할 수있는 방법을 제공, 명확하게,하지만하지 않습니다하려면 실제로 새로운 수정 자 키를 만듭니다. 액세스 할 기존 바인딩이없는 경우이 기술은 일반 접두사 바인딩에 비해 장점이 없습니다.

피터가 언급 한 것처럼 정품 수정 자 키를 만드는 것은 OS 수준의 작업입니다. AFAIK 단독으로 수식 키를 누르면 이맥스는 아무런 입력도받지 못하며 수식어로 수정자를 누르지 않으면 이맥스는 (수정 된) 입력을받습니다. 반대로 수정자가 아닌 키를 누르고 있으면 Emacs는 즉시 입력을 받고 그 입력을 다른 입력과 결합하여 모두 단일 (수정 된) 이벤트로 취급 할 방법이 없습니다.

IIRC, xmodmap은 Unix 시스템에서이를 달성하기위한 일반적인 메커니즘이므로 OSX의 경우도 마찬가지 일 수 있습니다.다음 링크는 도움이 될 수 있습니다 : 실행중인 어떤 OS와 이맥스 버전

+0

이 해결 방법을 이미 시도했지만 불행히도 정상 수정 자처럼 완전히 작동하지 않습니다. 예를 들어 delete-char에 H-d가 매핑되어있는 경우 a-d를 입력하면 처음에는 작동하지만 d를 다시 입력하면 다른 문자를 삭제하는 대신 "d"가 삽입됩니다. 이 함수는 불행히도 실제 수정 자로 사용할 수 없도록 단일 '이벤트'만 보냅니다. : – itsu

+1

phils에 감사드립니다. xmodmap이 Mac OS에서 존재한다는 것을 알지 못했지만,이 작업을 수행해야합니다 ;-) – itsu

+0

"기존 바인딩이없는 키 시퀀스를 사용해야합니다"또는 다른 키 바인딩보다 우선 순위가 높은 key-translation-map을 사용할 수 있습니다 (적어도 내 테스트에 따르면). –