2012-03-04 3 views
2

현재 주요 모드를 설명하는 파일을 여는 emacs 명령이 있습니까? 구문 강조 및 들여 쓰기를 즉시 편집 할 수 있습니다.현재 이맥스 메이저 모드 편집

+1

'C-h m',하지만 그건 당신이 원하는대로하지 않습니다. – doublep

+1

개인 사용자 지정을 위해 고유 한 주 모드 후크를 만들어야합니다. 이맥스와 함께 제공되는 elisp 파일을 편집하는 것은 권장하지 않습니다. 왜냐하면 이맥스를 업그레이드 할 때 변경 사항이 손실 될 수 있기 때문입니다. – Tom

답변

6
(find-library (file-name-sans-extension (symbol-file major-mode))) 

는 현재 주요 모드를 정의하는 파일을 엽니 다. 그 말 그대로 당신의 질문에 대답합니다.

그러나이 파일을 "즉시"편집해서는 안됩니다. 이맥스의 커스터마이징은 라이브러리 소스를 직접 편집하지 않아도된다. 대신 코드는 메이저 모드 후크 또는 eval-after-load 블록에서 실행됩니다.

+0

'M- :'은 표현식 – kindahero

+0

@ N.N 위의 eval에 대한 키 바인딩입니다. 나는 완전히 동의한다, 그들은 그만한 가치가있다. - 무의미한'lang-'도 포함시켜야한다. 그렇지 않으면 모든 것이 무시된다. :( – sarnold

2

다른 사람이 당신이 원하는 것을 정확히 수행 할 수있는 미리 정의 된 기능을 제공 할 수도 있지만, 그 중 하나를 알지 못합니다. 도없이 자신 만의 빌드가 가능합니다.

  • major-mode
  • (symbol-file major-mode) 다음 그러나 그 기호

을 정의하는 파일의 경로를 반환합니다, 그것은 조금 더 복잡한보다의 현재 주요 모드를 정의하는 기호에 바인딩됩니다. 대부분의 주요 모드는 바이트로 컴파일 된 elisp 파일에서로드되므로 되돌릴 경로는 실제로 열지 않으려는 .elc 파일입니다. 이를 감지하고 마지막 문자를 잘라낼 수 있지만 gzipped 파일도 처리해야합니다. 다행히 Emacs는 gzip으로 압축 된 파일을 투명하게 열 수 있으므로 다음과 같은 내용이 기본적으로 작동해야합니다. 나는 그것을 타이핑하고 하나 또는 두 개의 모드로 체크했지만 근본적으로 테스트되지 않은 것으로 간주합니다.

(defun load-major-mode-file() 
    (interactive) 
    (let* ((loaded-file (symbol-file major-mode)) 
     (root-el-file (if (string-match "\\.elc$" loaded-file) (substring loaded-file 0 -1) loaded-file))) 
    (if (file-exists-p root-el-file) 
     (find-file root-el-file) 
     (if (file-exists-p (concat root-el-file ".gz")) 
     (find-file (concat root-el-file ".gz")) 
     (message "couldn't open major-mode file.")))))