before save hook을 특정 버퍼에서만 끌 수 있을까?

less than 1 minute read

(add-hook 'before-save-hook 'delete-trailing-whitespace)

trailing whitspace를 남겨둘 이유가 없다. 모드에 따라 다르게 할 이유가 없어서 글로벌 세팅을 했다.

하지만 unity가 만든 파일이 문제다. 왜 trailing whitespace를 남겨두나. merge conflict가 나면 직접 편집해야 한다. 충돌을 해결하고 저장한다면? unity가 남겨둔 trailing whitespace를 모두 제거한다. 한 줄만 수정한 건데, trailing whitespace를 지운 탓에 수백 줄의 diff가 발생한다.

unity를 내가 수정할 순 없으니 충돌을 해결하려고 파일을 연 버퍼에서만 trailing whitespace를 지우는 훅을 끄고 싶다.

Here is how I save without triggering delete-trailing-whitespace: C-x C-q C-x C-s C-x C-q: read-only, save, revert read-only

In emacs, how do I save without running save hooks? - stackoverflow.com

쌈빡한 방법을 찾았다. 읽기 전용 모드를 사용하면 된다. 읽기 전용 모드로 바꾸기 전에 변경한 건 저장이 된다. 충돌을 해결하고 M-x read-only-mode 함수를 실행해 읽기 전용 모드로 바꾼다. M-x save-buffer 함수를 실행해 저장한다. 읽기 전용 모드이기 때문에 trailing whitespace를 지우는 save hook이 동작하지 않는다. 추가로 편집하려면 M-x read-only-mode 함수를 실행해 읽기 전용 모드를 해제한다.

C-x C-s C-x C-c