본문 바로가기

tab-width가 8이 아니라는 Emacs의 불평불만

기술적인 이야기/이맥스 2024. 2. 20.
반응형

에러가 난 당시의 스샷 (가린 게 아니고 컬러테마가 깨져서 이상하게 보임)

어느 날 개인적으로 만들어 쓰던 Org to GitHub Pages의 출력 스크립트가 또 에러가 나기 시작했다. 위 스크린숏의 마지막 메시지에서도 보이지만 정확한 에러 메시지는 아래와 같다.

custom-initialize-reset: Tab width in Org files must be 8, not 4.  Please adjust your ‘tab-width’ settings for Org mode.

이 글의 제목은 약간 왜곡되었는데, 정확히 말하자면 Emacs가 아니라 Emacs에서 구동되는 Org Mode의 한 스크립트의 Assertion 구문의 불평불만이었다.

어쨌거나 이 에러의 원인이 뭔지 찾아보기 위해 --debug-init을 줘서 실행시켜 봤는데 별로 도움은 안 되었다.

Debugger entered--Lisp error: (error "Tab width in Org files must be 8, not 4.  Please a...")
  signal(error ("Tab width in Org files must be 8, not 4.  Please a..."))
  error("Tab width in Org files must be 8, not %d.  Please ..." 4)
  org-element--list-struct(517)
  ...

예전에는 잘 돌아가던 출력 스크립트에서 실행시키는 함수의 Org Mode 모듈이 최근 업데이트가 있었던 모양이다. 거기서 tab-width의 크기가 8이 아니면 제대로 동작하지 않고 멈추는 루틴이 들어있는 모양이다. 따라서 원칙적으로 말하자면 정상 동작을 보증하기 위한 안전장치에 가깝지만 이 글을 쓰는 작자 개인에게는 재난과도 같은 오류일 뿐이니 말이다.

이 문제를 해결하기

결론부터 적자면 아래 한 줄을 ~/.emacs.d/init.el 같은 시동 혹은 설정 스크립트에 넣으니 해결되었다.

(setq-default tab-width 8)

삽질 내역부터 적을까 했지만 일단은 결론부터 적는 게 답을 원하는 이들에겐 더 나은 것 같아서 이제부터 삽질기 겸 하소연이 이어진다.

삽질기 및 하소연

살짝 삽질한 것을 하소연해 보자.

이 문제가 난감했던 것은 잘 돌아가던 스크립트에서 발생했다는 점도 있겠지만, Doom Emacs에서 SPC h v(value 확인 단축키)로 확인해 보니 tab-width가 이미 8로 지정되어 있었다는 점이었다. 아니 이미 지정되어 있는데 왜 문제가 생기느냐 하면서 화가 났다.

어쨌든 강제로(?) 이 문제를 해결하기 위해 setqtab-width를 8로 지정해도 안 되었다. 정말 이상하고 수상하다 싶었다. 아예 Doom Emacs 식인 add-hook!을 써보기도 했고 setq-hook!을 써보기도 했는데도 안 되었다. 이쯤 되면 뭔가 답이 없나 싶었다. 구글링에서도 직접적인 단서는 보이지도 않고 말이다.

해결법은 어이없게도 setq-default로 지정하는 거였다. tab-width는 각 메이저 모드에서 별도로 관리되는 변수다 보니 상속되는 기본 값이 있는데 이 값은 setq-default로 지정할 수 있는 것이기 때문에 결국 Org Mode에서 쓰는 tab-width의 기본값으로도 사용될 수 있는 것이었다.

이 문제로 며칠을 속 썩였는데 참 어이없는 나날이 흘러가고 있었다. 물론 내 지식이 부족해서 발생한 참상이었긴 하지만, 그래도 잘 돌아가던 게 한 순간에 무너지는 것처럼 보였으니 기분이 좋을 리도 없고 말이다.

어쨌든 해결되었으니 다행이지만, 만약 해결이 안 되었으면 아예 문서 포맷을 Markdown으로 바꾸고 외부 스크립트 들로 교체하려는 원대한 계획을 세우고 있었다. 큰일이 될 뻔했으니 정말 해결되어서 다행인 것 같다. 어쨌든 Emacs든 패키지들이든 업그레이드만 하면 내 스크립트가 깨지는 게 연례행사인 게 참 불만족스러운데 기회와 시간이 되면 바꾸는 것도 생각은 해봐야겠다.

728x90
반응형

댓글