문제 상황
rsync나 git으로 프로젝트를 다른 컴퓨터에 복사했을 때, .dir-locals.el 에 하드코딩된 절대 경로 때문에 에러 발생:
files--ensure-directory: Creating directory: Permission denied, /home/goqual원인: .dir-locals.el 에 다른 컴퓨터의 홈 디렉토리 경로가 포함됨.
해결: 상대 경로 사용
잘못된 예 (절대 경로)
(org-mode . (
(denote-directory . "/home/goqual/repos/work/project/docs/")
))올바른 예 (상대 경로)
(org-mode . (
(eval . (setq-local denote-directory
(expand-file-name "docs/"
(locate-dominating-file default-directory ".dir-locals.el"))))
))핵심 함수
locate-dominating-file: 현재 디렉토리에서 상위로 올라가며 특정 파일을 찾음expand-file-name: 상대 경로를 절대 경로로 확장setq-local: 버퍼 로컬 변수 설정
적용 사례
~/repos/work/sks-gateway-forked/.dir-locals.el 수정:
((nil . ())
(org-mode . (
(eval . (setq-local denote-directory
(expand-file-name "docs/"
(locate-dominating-file default-directory ".dir-locals.el"))))
(denote-known-keywords . ("solution" "test" "analysis"))
(eval . (eldoc-mode -1))
(eval . (org-indent-mode 1))
)))참고
.dir-locals.el은 프로젝트별 Emacs 설정 파일- 여러 컴퓨터에서 공유하는 프로젝트는 반드시 상대 경로 사용
- CMake 빌드 캐시(
build/)에도 절대 경로가 남지만, 빌드 시 재생성되므로 무관
Comments