2010-03-12 4 views
7

Emacs를 처음 수정하려고합니다. 내가 이맥스의 결과로 elisp을 뱉어 작은 키보드 매크로를 기록했다 : 이맥스 참조를 검색키보드를 기존 Emacs 모드에 바인딩 추가

(setq add-docstring 
    "\C-rdef\C-n\C-a\C-m\C-p\C-i\C-u6\"\C-u3\C-b") 
(global-set-key "\C-c\C-d" 'add-docstring)

하지만, C-C의 C-D가 이미 DIFF 모드에서 바인딩 것으로 나타났다. diff 모드 사용에 대해서는 계획이 아니지만 미래는 알 수 없으므로 나 자신을 위해 함정을 드러내지 않으려합니다. 그래서이 키 바인딩을 파이썬 모드에서만 작동시키고 싶습니다. 여기서는 문서 문자열을 추가하는 데 도움이됩니다.

/usr/share/emacs/23.whatever/list/progmodes에는 python.elcpython.el.gz이 있습니다. python.el.gz의 압축을 풀었으며 읽을 수있는 버전의 elisp 파일을 가지고 있습니다. 그러나 이제 설명서가 나에게 불투명 해집니다.

전역으로 키 바인딩을 파이썬 모드에 추가하려면 어떻게합니까?

이맥스를 다시 시작하거나 열린 파일을 닫지 않고도 파이썬 모드에 변경 사항을 적용 할 수 있습니까? 그것은 자기 수정 에디터입니다, 나는 그것이 가능한 좋은 기회라고 생각합니다.

+0

필연적 인 후속 조치 : 당연히 diff/ediff를 사용하기 시작 했으므로 응답자가 올바른 방향으로 나를 가리키게되어 기쁩니다. –

답변

15

그것은 밝혀, C-C의 C-D은 이미 python-mode ('python-pdbtrack-toggle-stack-tracking에)에 바인딩됩니다.

참고 : 솔루션을 잘라내거나 붙여 넣기 만하려는 경우 답변의 끝으로 이동하십시오. 거기에 도착하는 방법에 대한 설명을 읽으십시오. 다시 할 수 있기를 바랍니다.

매크로는 좋은 시작이지만, 가지고있는 것은 잘 작동하지 않습니다. 당신이 키에 바인딩 할 수있는 무언가를 얻으려면, 그 매크로MX가 삽입-KBD-매크로 시도, 당신은 얻을 것이다 :

(fset 'add-docstring 
    (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("def ...unprintable characters...6\"3" 0 "%d")) arg))) 

(흠 .... 인쇄 할 수없는 문자를, 내가 할 수있는 ' t를 잘라내어 붙여 넣기 만하면되지만 옳은 것을 얻기 위해 직접 할 수 있습니다.) 약간의 munging, 당신은 무엇을 얻을이 동일합니다 : 첫 번째 단계입니다

(fset 'add-docstring 
     (lambda (&optional arg) 
     "Keyboard macro." 
     (interactive "p") 
     (kmacro-exec-ring-item `(,(kbd "C-r def C-n C-a C-m C-p C-i C-u 6 \" C-u 3 C-b") 0 "%d") 
           arg))) 

. 위의 경우 M-x add-docstring을 수행하고 원하는 동작을 얻을 수 있습니다.

다음 단계는 키에 로컬로 바인딩하는 방법입니다.하고 관심 keybindings begins here에 대한 문서에 이르게의 Local Keymaps section 않습니다 :이 python-mode가 켜져있을 때 호출되는 익명 함수를 설정하고 그 기능을 하나의 일을

(add-hook 'python-mode-hook 
      (lambda() (define-key python-mode-map (kbd "C-c C-d") 'add-docstring))) 

- 그것은 특별히 파이썬 모드의 키맵에 원하는 키 바인딩을 설정합니다.

당신이 밀접하게 Keymaps section를 읽는다면, 당신은 이맥스 사용자 만 어떤 낮거나 대문자 문자 참조, (예를 들어 참조 d를에 commads을 결합한다 규칙을 따른다고 볼 수 있습니다 참조 T참조 피)이 모두 사용할 수 있으며, 패키지 퍼센트가 구두점 문자 또는 제어 키입니다 참조 %의에 모드 별 바인딩을 제한 (예 : 참조 참조C-c [C-c C-z].

바인딩을 C-c d으로 변경하면 패키지와 충돌하지 않을 것입니다. Emacs에 포함 된 python.el은 대부분의 (모든?) 패키지가 이맥스와 함께 제공되는 것처럼이 규칙을 따른다.

kbd을 사용하면 키 시퀀스를 읽을 수 있습니다. 이식성이 뛰어나고 읽기가 훨씬 쉽습니다.

(이 질문을 참조) 대신 후크의 named function
  • rewrite the macro in elisp
  • 사용 eval-after-load에서 사용자 지정을 넣어 :

    이를 정리하는 당신이 할 수있는 더 가지가있다

    다음은 # 1에서 할 수있는 일입니다. 다른 맞춤 설정을 할 수있는 편리한 장소를 제공합니다.

    (add-hook 'python-mode-hook 'my-python-customizations) 
    (defun my-python-customizations() 
        "set up my personal customizations for python mode" 
        ;; put other customizations in here 
        (define-key python-mode-map (kbd "C-c C-d") 'add-docstring)) 
    (defun add-docstring (&optional arg) 
        "Keyboard macro." 
        (interactive "p") 
        (kmacro-exec-ring-item `(,(kbd "C-r def C-n C-a C-m C-p C-i C-u 6 \" C-u 3 C-b") 0 "%d") 
             arg)) 
    

    원하는 경우 나중에 (remove-hook 'python-mode-hook 'my-python-customizations)을 수행 할 수 있다는 점에서 명명 된 함수를 사용하는 것이 조금 깔끔합니다. 또한 후크 값 (C-h v 파이썬 모드 후크 RET)을 살펴보면 무엇이 불려지는지 알 수 있습니다 (익명 함수가 길어지고 읽기가 더 어렵습니다). 보너스 포인트

    , 당신은이 지역에서 코드를 평가하는 이맥스 말할 것이다 .emacsM-X 평가 - 지역,에 코드를 붙여 넣은 후. 기존 파이썬 버퍼의 변경 사항을 보려면 새 파이썬 파일/버퍼를 열면 키 바인딩 변경이 트리거됩니다. 이는 모든 파이썬 버퍼에 공통적입니다.

    해피 해킹.

  • +0

    내가 실제로 묻는 질문 대신에 묻는 질문에 답하는 것이 낫다. 이것은 내 생각에 올바른 방향으로 나를 가리 킵니다. –

    4

    첫째, python.el을 사용하지 마십시오. 당신이하고 싶은 것은 파이썬 모드를위한 사용자 정의 바인딩을 만드는 것입니다. 이것은 일반적으로 홈 디렉토리의 .emacs 파일에서 수행됩니다. 이 후크 메커니즘을 사용

    (add-hook 'python-mode-hook 
        '(lambda() (define-key python-mode-map "\C-c\C-d" 'add-doc-string))) 
    

    - (그래서이 구문에 약간의 오류가있을 수 있습니다 나는 나 자신을 파이썬 사용하지 않는 나는이 테스트를하지 않은 경우) 해당 파일에서

    은 다음과 같은 것을 추가 할 수 있습니다. 파이썬 모드를 호출 할 때마다 호출되는 함수입니다. 이 함수는 add-doc-string 함수에만 C-c C-d을 바인드합니다.

    이 답변은 매우 간단합니다. 이맥스 문서에서 .emacs 파일, 커스터마이징 및 후크에 대해 읽어보십시오. 당신은 키 바인딩의 선택을 다시 방문 할 수 있도록

    +0

    나는 이미 문서를 grepping 해보려고했기 때문에 나는 내 질문에 그렇게했다. –