Emacs에서 AVIF 이미지가 안 보일 때
이맥스는 오픈소스이기 때문에 개발 속도가 빠르... 빨라야 할 텐데 좀 보수적인 컨트리뷰터들이 많아서 그런지 최신 트렌드 반영에는 좀 느린 느낌을 받는다. 그 중 하나가 AVIF 이미지 포맷의 지원이다. 30.2 버전을 기준으로 일반 바닐라 이맥스에서 AVIF는 아직 지원되지 않는 파일 포맷이다.
그렇다면 이맥스에서 AVIF 이미지를 보길 원한다면 어떻게 해야할까?
별도의 빌드 없이 이 문제를 해결하기 원한다면 안타깝지만 좀 기다려야 할 지도 모르겠다. 다른 말로 말해서 이 문제를 당장 해결하기 원한다면 imagemagick 라는 외부 도구를 이용해야 하기 때문에 이맥스가 imagemagick 지원이 추가된 상태로 빌드되어 있어야 한다는 말이다.
우선 imagemagick가 없다면 설치해주자. 이 글을 쓰는 작자는 맥에서 Homebrew 패키지 매니저를 사용하기 때문에 이렇게 간단히 설치할 수 있었다.
brew install imagemagick
이제 이맥스에서 imagemagick 지원이 적용되어 있는지 확인할 차례다. Homebrew로 emacs-plus를 설치한 상황이라면 아래 커맨드로 빌드 옵션 확인이 가능하다.
brew info emacs-plus
여기서 options에서 imagemagick 항목에 X가 표시되어 있으면 지원이 빠져있는 상태다. 이 옵션은 기본적으로 꺼져있기 때문에 아래와 같이 with-imagemagick 빌드 옵션을 추가해서 설치해야만 지원이 적용된다.
brew install emacs-plus --with-imagemagick
여담이지만 이 짓 덕분에 Doom Emacs를 새로 설치하다 퍼포먼스 똥망 사태를 겪고 좀 좌절하는 사태를 겪었다나 뭐라나.
어쨌든, 나머지 패키지 매니저나 다른 OS라면 안타깝지만 알아서 확인하고 빌드해야 할 것 같다. 어쩌면 지원을 추가한 바이너리를 어디선가 배포하고 있을 수도 있고 말이다.
이맥스에서 imagemagick 지원이 적용되어 있다면 이제 아래 코드를 시작 스크립트에 추가하자.
(setq image-use-external-converter t)
(add-to-list 'image-file-name-extensions "avif")
보다시피 이미지를 표시할 때 외부 컨버터를 사용하고, avif 확장자의 파일을 이미지 형식이라고 미리 알려주는 코드다.
이렇게 설정하면 Emacs에서 이미지 미리보기를 수행할 때 imagemagick을 이용해 비트맵을 얻어낸 후 Emacs에 표시하는 방식으로 동작할 것이다.
시험해보자
find-file이든 dired든 뭐든 이용해 아무 AVIF 이미지 파일을 열어보자.
아무 AVIF 이미지 파일을 이맥스로 열었더니 이상하게 보인다
앞서 이야기했다시피 다른 유명한 이미지 포맷과 다르게 AVIF는 바닐라 이맥스에서 지원되지 않고 있다. 그래서 이렇게 그냥 파일의 바이너리가 문자로 치환되어서 그대로 보이게 된다.
이 상태에서 image-mode를 켜보자.
M-x image-mode
이제 이미지가 보이면 제대로 된 것이다.
image-mode로 메이저모드를 바꾼 상태에선 AVIF 이미지가 보인다
개인적으로는 마크다운 파일 편집 중 미리보기를 켰을 때 보이길 원했는데 여기서도 별 추가 설정 없이 잘 보였다.
마크다운 모드에서 이미지 미리보기를 켠 상황에서도 AVIF 이미지가 잘 보인다
참고로 마크다운 모드에서 이미지 미리보기를 켜거나 끄려면 markdown-toggle-inline-images 함수를 이용하면 된다. Doom Emacs에선 SPC m t i에 바인딩 되어있다.
여담
안타까운 점은 이맥스 외부의 도구를 이용해서야 이미지를 표시할 수 있다는 점이다. 다른 말로 이미지를 로딩해서 표시하기까지 시간이 좀 더 걸린다는 말이다. 결국 이맥스가 아예 자체적으로 지원하는게 가장 좋은 해결책일 지도 모르겠다.
거기다 이 방법은 이맥스를 새로 설치해야 할 때 매번 imagemagick 지원을 추가해서 빌드해야 한다는 조건이 있다. 그래서 더더욱 이맥스가 자체적으로 AVIF 포맷을 비롯한 다양한 최신 미디어 포맷을 지원해주길 바랄 뿐이다.