Emacs의 ndmacro와 시지프스의 뒷산 돌굴리기

Posted on May 14, 2024

이맥스를 사용하는 구조주의자 및 라캉주의자 여러분이라면, 하찮은 일의 자동화에 카타르시스를 느끼는 것이 보통이라고 생각된다. 아시다시피 초보적 부조리주의를 추구하는 사악한 VSCode 사용자들은 “One must imagine Sisyphus happy” 와 같은 논리로 무장한 채 무의미한 반복 작업의 신성함을 설파하지만, 정작 이를 주창한 알베르 카뮈 (그 자신은 부조리주의자로써 불리는 것을 선호하지 않았지만) 는 구토가 나오는 온갖 부조리에 저항하는 것을 그 가치로 내걸었다.

이를 보아, 끝없이 이어지는 반복 작업을 일반화하고 단순화시켜 효율적 노동을 추구하는 것이야말로 부조리에 대한 인간의 신성한 저항이라 할 수 있겠다. 또한 이러한 사상에 그다지 흥미를 보이지 않는 구조주의자 여러분도, 무의미한 반복 작업을 추상화시키는 것이 이 징글맞은 세계를 관통하는 법칙에 한 발짝 다가가는 데 도움이 된다는 것을 부정하지는 않을 것이라 생각한다.

그참에 소개하는 이맥스의 개쩌는 함수, ndmacro다.

ndmacro의 기원은 1993년에 작성된 dmacro다. 필자는 본디 이맥스가 기본적으로 제공하는 키 매크로 기능을 사용하여 지루한 반복 작업을 타파하고는 했다. 예를 들면, 100행짜리 텍스트에서 각 줄의 첫 번째 단어 뒤에 $ 기호를 넣는다고 가정하자. 상상만 해도 끔찍하다. 이러한 작업을 일일이 직접 수행하는 것에 미덕을 느끼는 인간은 아마도 노동재화의 가치를 제 입맛에 맞게 임의로 조작하려 드는 사기꾼일 것이다. 생각들을 하시라. 노동이 그리도 신성한 것이라면 좀 아껴 써야 하지 않겠는가?

이맥스의 기본 매크로 기능은 이러한 반복 작업을 기록하여, Programming By Example (PBD), 혹은 Programming by Demonstration (PBD) 의 진수를 보여준다. C-x ( 를 입력하고, 특정 키 입력과 같은 행동을 시연한 뒤, C-x ) 를 입력하여 시연을 종료한다. 그 뒤, C-x e 로 시연했던 행동을 몇 번이고 재현할 수 있다.

하지만 이건 아무래도 부족하다. 시연 개시 / 시연 종료 / 재연 과 같은 흐름은 분명 깔끔하지만, 아무래도 불필요한 동작이 있다. 이맥스가 시연의 시작과 끝을 우리의 신호 없이도 파악할 수 있게 하는 것은 어떨까? 이를 위해서는 Emacs Lisp를 사용한 패턴 찾기가 중요해진다.

<작업중>