[Emacs] autopair 사용 시 term-mode 문제
Emacs에서 term-mode(
이 문제는 autopair를 사용할 때만 발생하는 것으로 생각된다. 혹은 그 외에 RET(엔터키)를 별도의 기능으로 바인딩 하는 모든 모드에 대해서도 발생할 수도 있다. autopair일 경우의 해결 방법은 가장 마지막에 제시하고 있다.
아래 삽질기를 정리해 본다.
term-mode 시 RET가 동작하지 않는다. 미니버퍼에 invalid characterp, return 이런 식의 오류메시지가 찍힌다. RET 혹은 여기에 바인드 된 무언가가 nil 상태일거 같다는 느낌이 들었다.
다행히도
term-mode에서
결과적으로 autopair가 범인임을 확신할 수 있었다.
term-mode에서
결론적으로 RET키에 term-send-raw를 바인딩 시키면 문제가 해결되리라 믿고 define-key함수를 이용해 term-mode-map에 RET키를 term-send-raw 를 바인딩 하려 시도했다.
하지만 코드에서 오류가 발생하였다. 뭔가 허용되지 않은 듯한 짓을 하는 기분이 들었다.
아래 코드 한... 아니 두 줄로 해결할 수 있었다.
출처: http://emacs-fu.blogspot.com/2010_06_01_archive.html
M-x term
) 혹은 multi-term-mode를 사용 할 때 엔터키를 누르면 미니버퍼에 오류가 찍히면서 엔터키가 먹히지 않는 경우가 발생했다.이 문제는 autopair를 사용할 때만 발생하는 것으로 생각된다. 혹은 그 외에 RET(엔터키)를 별도의 기능으로 바인딩 하는 모든 모드에 대해서도 발생할 수도 있다. autopair일 경우의 해결 방법은 가장 마지막에 제시하고 있다.
아래 삽질기를 정리해 본다.
문제점
term-mode 시 RET가 동작하지 않는다. 미니버퍼에 invalid characterp, return 이런 식의 오류메시지가 찍힌다. RET 혹은 여기에 바인드 된 무언가가 nil 상태일거 같다는 느낌이 들었다.
대안
다행히도
C-j
키를 이용하면 RET키를 대체할 수 있었다. 임시방편으로 활용 가능하긴 하다.원인 분석
term-mode에서
C-h k
를 이용해 RET키에 바인딩 된 함수를 확인: autopair의 특정 함수가 바인드 되어 있는 것을 확인하였다.결과적으로 autopair가 범인임을 확신할 수 있었다.
문제 해결 시도
term-mode에서
C-h k
를 이용해 C-j
에 바인딩 된 함수를 확인: term-send-raw가 바인딩 되어 있다.결론적으로 RET키에 term-send-raw를 바인딩 시키면 문제가 해결되리라 믿고 define-key함수를 이용해 term-mode-map에 RET키를 term-send-raw 를 바인딩 하려 시도했다.
하지만 코드에서 오류가 발생하였다. 뭔가 허용되지 않은 듯한 짓을 하는 기분이 들었다.
문제 해결
아래 코드 한... 아니 두 줄로 해결할 수 있었다.
(add-hook 'term-mode-hook #'(lambda () (setq autopair-dont-activate t)))
출처: http://emacs-fu.blogspot.com/2010_06_01_archive.html
댓글