디렉토리의 파일에 대해 Emacs 문자 코딩을 어떻게 설정합니까?

디렉토리의 파일에 대해 Emacs 문자 코딩을 어떻게 설정합니까?

저는 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 사용자가 솔루션으로 제안하는 것을 듣고 싶습니다.

관련 정보