저는 GNU Emacs 23.3.50.1 배포판인 Aquamacs를 사용하고 있습니다.
나는 그리스어로 주석을 달고 작성된 소스 파일을 보고 있는데 CP1253으로 인코딩되어 있습니다.
그리고 적절한 인코딩으로 되돌리거나 파일 로컬 변수를 추가할 수 있습니다.
/* -*- mode: c-mode; tab-width: 4; coding: cp1253-unix; -*- */
따라서 파일을 제대로 열 수 있고 각 파일에 파일 변수를 추가할 수 있습니다.
하지만 전체 디렉토리에 대한 코딩을 설정하고 싶습니다. .dir-locals.el을 직접 편집하는 대신 간단히 다음과 같이 생각했습니다.
M-x copy-file-locals-to-dir-locals
올바르게 열린 파일에서. 그러면 다음이 생성됩니다.
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((c-mode
(tab-width . 4)
(coding . cp1253-unix)))
주사위가 없습니다. 그러나 새로운 탭 너비를 명확하게 인식하므로 파일을 읽고 있습니다.
이유가 무엇인가요? 그리고 emacs가 a-list를 처리하는 동안 로그가 있습니까?
답변1
불행하게도 코딩 헤더는 설계상 Emacs dir-locals에서 전파되지 않는 것 같습니다. 귀하의 설정에 어려움을 겪고 문제도 재현했습니다.
나중에 나는 당신이 찾은 것을 검증하는 것으로 보이는 다음 소스를 발견했습니다. http://www.emacsmirror.org/package/dir-locals.html
a-list를 처리하기 위한 로그가 있는지는 확실하지 않지만 이 변수에 익숙하지 않은 경우 다음을 사용하여 파일을 방문한 후 인코딩을 확인할 수 있습니다.
C-h v buffer-file-coding-system RET
또는
M-x describe-variable RET buffer-file-coding-system RET
개인적으로 가장 좋은 방법은 이미 작업 중인 파일 로컬 변수라고 생각합니다.
내가 생각할 수 있는 대안(처음에는 테스트되지 않음)은 elisp 기능 중 일부를 살펴보는 것입니다.
(coding-system-priority-list)
(set-coding-system-priority &rest coding-systems)
또는 두 번째: (디렉토리 구조가 /something/blah/greekcode/file.c라고 가정)
(add-to-list 'auto-coding-alist
'("/greekcode/[^/]+.c\\'" . cp1253-unix))
이는 파일 로컬 변수보다 우선합니다. 필요에 따라 정규식을 수정하고 다음을 평가하여 실험해 보세요.
(find-auto-coding "/home/brian/greekcode/garbage.c" 1) <= C-x C-e
보고:
(cp1253-unix . auto-coding-alist)
이것이 도움이 되기를 바랍니다! 다른 emacs 사용자가 솔루션으로 제안하는 것을 듣고 싶습니다.