TL; DR : 실제 상황에 대한 제어 권한find-file-noselect
이 없으므로 사용자가에서 활성화 한 내용에 따라 버퍼에서 임의의 마이너 모드가 활성화 될 수 init.el
있습니다. 또한 정리가 어렵습니다.
사용 with-temp-buffer
하고 insert-file-contents
대신. 버퍼에 특정 주요 또는 부 모드가 필요한 경우 명시 적으로 활성화하십시오 . 파일을 쓰려면 with-temp-file
대신 이름을 사용하더라도 임의의 파일에 쓸 수 있습니다.
부작용
find-file-noselect
다음을 포함 하여 많은 부작용이 있습니다
- 대화식으로 질문하기 (비 대화식 사용에서는 그 자체만으로는 불가능합니다),
- 읽기 전용 파일에 대한보기 모드 자동 활성화
- 그렇지 않으면 일반 모드로 들어가고
- 그리고 달리기
find-file-hook
.
일반 모드 자체
- 현재 버퍼에 적합한 메이저 모드를 자동으로 선택합니다.
- 해당하는 모든 주 모드 및 부 모드 후크를 실행합니다.
- 현재 버퍼에 대한 모든 로컬 변수, 즉 파일 변수 및 디렉토리 변수를 읽습니다.이 변수는 안전하지 않은 로컬 변수에 대한 대화식 질문을 다시 요청할 수 있습니다.
모든 후크가 실행되기 때문에, 당신은 얻을 모든 사소한 모드와 후크 기능 은 사용자가 자신의 활성화 init.el
사용자가 기대를 후크 기능을 추가 한 경우 (주요 혼란에 약간의 불편 (바람직하지 않은 사소한 모드가 활성화 된 경우)에서 모두 발생할 수 있습니다, 대화 형 컨텍스트에서 호출됩니다.
예제는 https://github.com/flycheck/flycheck/issues/366 을 참조 하십시오 . 의 사용 find-file-noselect
인한 데이터 파일 구문 확인 Flycheck가 될 수 있습니다, 그것은 이맥스에서 무슨 일이 벌어지고 있기 때문에 셧다운 제대로 뒤에 임시 파일을 떠나, 다시 정리 할 시간이 없었다.
대청소
으로 find-file-noselect
당신이 추가주의해야 다시 버퍼를 죽일. find-file-noselect
당신을 위해 그렇게하지 않습니다.
어떤 위치에서 버퍼를 기억해야하며, unwind-protect
로컬이 아닌 종료의 경우에도 버퍼가 종료되도록 신중하게 사용해야 합니다.
대안
파일 사용을 읽으려면 with-temp-buffer
및 insert-file-contents
전용 예를 들어, 시스템 변환 코딩 가장 기본적인 일을, 않지만, 후크, 또는 설치 지역 변수를 활성화 질문을하지 않는 :
(with-temp-buffer
(insert-file-contents (locate-user-emacs-file "foo.el"))
;; Enter the major mode explicitly
(emacs-lisp-mode)
;; …
)
with-temp-buffer
본문 끝에서 임시 버퍼를 올바르게 종료하도록주의합니다.
파일을 쓰려면을 사용 with-temp-file
하여 임시 버퍼를 만들고 본문 끝의 지정된 파일 이름에 내용을 씁니다.
(with-temp-file (locate-user-emacs-file "foo.el")
(prin1 (list 'my 'data) (current-buffer)))
good-practices
이전에 태그 가 없었습니다 . 그것을 사용하는 것이 좋습니다?