2012-08-13 2 views
4

최근에 Emacs 설정을 아주 많이 수정했지만 나에게 짜증나기 시작한 문제가 발생했습니다. 키와 같은 추가 수정자를 소개하고 싶습니다. 내가 뭘 하려는지, 더 명확하게하기 위해 내가 dired-mode (보통 문자가 리바운드 될 수있는 문자 입력을 허용하지 않음) 일 때 나는 문자를 s으로 누른 상태에서 j 또는 l 커서가 각각 다음 및 이전 디렉토리 행으로 이동합니다. 효과적으로 s 키가 수정 자처럼 작동합니다.emacs의 추가 수식 키?

s을 수정하려면 super 또는 hyper과 같은 수정자를 적용하는 것이 검토되었지만 모든 것이 글로벌 일에 사용됩니다. 이것이 가능한가? 그렇지 않다면 그것은 부끄러운 일입니다.

편집 :

난 후 무엇에 약간의 혼동이있는 것 같습니다. 나는 보통의 키 시퀀스를 정의하면

(define-key map (kbd "s j") 'dired-next-dirline)

같은

그럼 내가 다음 디렉토리 라인으로 이동 j를 누르기 전에 s마다을 눌러 계속합니다. 이것은 이 아니며을 찾고 있습니다 (화를 내지 않으려면 : P) ss 키를 계속 유지할 수 있습니다. 을 유지하고 회선을 계속 이동하려면 j을 계속 누릅니다.

나는 이것을 더 분명하게 만들었기를 바랍니다. 감사.

+1

내 이해는 이맥스에서 사용할 수정 자 키를 추가하는 것이 OS 레벨 프로세스라는 것입니다. 어떤 이맥스 문맥에서만 그렇게 행동하기를 원하기 때문에 그것은 당신에게 쓸모가 없습니다. AFAIK, 당신이 요구하는 것은 현재 할 수 없습니다. – phils

+1

명령에서 키맵을 임시로 변경할 수 있으므로 키 시퀀스에서 마지막 키만 반복하면됩니다. 'C-x e' (매크로 실행)는 매크로를 반복하기 위해'e'를 다시 누르십시오. 'kmacro-call-macro'의 소스 코드는 독서를 시작할 수있는 곳인 것 같습니다. – legoscia

+0

@legoscia 매크로를 사용하는 것이 일시적으로 바뀌는 생각은 마음에 들지만 매크로를 사용하는 것은 조금 불필요하다고 생각합니다. 아무도 더 좋은 생각이 떠오르지 않는다면 대답으로 게시하고 싶을 것입니다. 감사합니다 – rfcoder89

답변

3

코드에서 주위를 파고 이것을 생각해 냈습니다. s jmy-dired-next-dirline에 바인딩하지만, 완료 한 직후에는 다시 j이면 충분합니다. 다른 모든 키는 임시 바인딩을 재설정합니다.

이 글은 아직 공개되지 않았기 때문에 set-temporary-overlay-map 함수가 추가되었으므로 Emacs from git을 빌드해야합니다.

(defun my-dired-next-dirline() 
    (interactive) 
    (dired-next-dirline 1) 
    (set-temporary-overlay-map 
    (let ((map (make-sparse-keymap))) 
    (define-key map [?j] 'my-dired-next-dirline) 
    map) 
    nil)) 

(eval-after-load "dired" 
    '(progn 
    (let ((prefix-map (make-sparse-keymap))) 
     (define-key prefix-map "j" 'my-dired-next-dirline) 
     (define-key dired-mode-map "s" prefix-map)))) 
+0

감사합니다. 감사합니다. = D – rfcoder89

2

Key chords 당신이 찾고있는 것일 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다, 불행히도 내가 수정 자로 사용할 때마다's' 키를 계속 눌러야하기 때문에 내가 찾고있는 것이 아닙니다. – rfcoder89

+1

Shift 또는 다른 수식어를 수정 자로 사용할 때마다 누를 필요가 없습니까? – Tom

+0

미안하지만 나는 분명히 분명하지 않습니다. 키를 계속 눌러서 수정 자로 사용하기 위해 키를 계속 누를 필요가 없습니다. – rfcoder89

1

키 코드가 원하는 코드가 아닌 경우 (Tom's answer에 대한 의견에 제안했듯이) 키 시퀀스를 사용하는 간단한 define-key이 필요합니다. 즉

(define-key dired-mode-map (kbd "s j") 'dired-previous-line) 

이는 s 키의 원래 기능을 비활성화 단점이있다, 그러나 당신이 순서 s에 그를 리 바인드 할 수 있습니다 - s, 나는 가정한다.

+0

답변 주셔서 감사하지만 불행히도 이것은 다른 답변과 같은 종류입니다. 더 명확하게하기 위해 제 질문을 수정했습니다. 저를 도울 수 있기를 바랍니다. – rfcoder89

+0

알겠습니다. Tom의 대답에 대한 귀하의 의견을 오해했습니다. 나는 조금 파고 들었고 보통 키를 변경자 키로 취급하는 것이 매우 어렵거나 불가능한 것 같습니다. 사실, 원격 터미널 상황과 같은 특정 상황에서는 키가 여전히 눌러져 있는지를 기술적으로 확인할 수 없습니다. legoscia의 의견은 아마도 최선의 방법 일 것입니다. – vhallac

+0

어려운 것 같습니다. 임시 키맵 솔루션을 사용하려고 생각하고 있는데, 다른 영역에서도 유용 할 수 있습니다. 어쨌든 당신의 도움에 감사드립니다. – rfcoder89

1

이 질문은 사전에 발행되었지만 Hydra 패키지를 사용하면이 작업을 수행 할 수 있습니다.여기

https://github.com/abo-abo/hydra

참조 예 : https://github.com/abo-abo/hydra/blob/master/hydra-examples.el 여기 https://github.com/abo-abo/hydra/blob/master/hydra-test.el

위키 또한 더 유용한 예 https://github.com/abo-abo/hydra/wiki/Hydras-by-Topic있다

히드라는 원래 아니라 그것은 매우 어려운 시작하게 다소 불투명 은유 구문을했다

와.

  • 활동을하고 키에 남아 : 신화 이야기와 많은 머리와 몬스터 색상에서 은유의 이러한 기괴한 더블 레이어는 본질적 기능을 설명하는 데 사용했다 "정복"되는 이유는 확실하지 않다 -mode (당신을 요구하고 효과적으로 무엇.) (소위 blue 히드라는)
  • (A red 히드라)

등 키 모드를 작업을하고 종료합니다.

다행히 2015 년 2 월에 더 많은 문법적 구문이 추가되어 색상 및 리터럴 구문을 나란히 검사합니다. (이 커밋도 https://github.com/abo-abo/hydra/commit/0a3cc60f5856eb4a38204b9075d67d058ba56bef)

이 기사의 작성자가 참조하십시오. http://oremacs.com/2015/02/02/colorful-hydrae/