2011년 8월 18일 목요일

[Emacs] term-mode에서 붙여넣기(paste)

Emacs의 기본 설정 상태의 term-mode(M-x term)는 붙이기(yank)가 되지 않는다. 아주 정확하게(?) 터미널을 애뮬레이션 하고 있는 만큼 붙이기 키(C-y)도 가로채고 있기 때문일지도 모르겠다.

이번 글은 Emacs term-mode에 붙여넣기(paste)에 대한 내용이다.

term-paste


터미널에 붙여넣기 전용으로 `term-paste`라는 함수가 제공된다. 터미널에서 붙여넣기가 필요한 시점에 C-c M-x term-paste를 입력하자. 그러면 자동으로 커서가 있는 위치에 킬링(kill-ring)에 들어있는 내용이 붙여넣기가 된다.

터미널 환경에서는 C-c를 제외한 모든 키 입력을 term-mode가 가져가버리기 때문에 좀 귀찮지만 C-c로 단축키 입력을 시작해야 한다.

term-line-mode


C-c C-j를 누르면 이 스크린샷 처럼 모드라인에 Term: line이라고 term-line-mode임을 표시해준다. 이제 C-y를 누르면 붙여넣기가 동작한다.

원래대로 term-char-mode로 돌아가려면 C-c C-k를 누르거나 C-c M-x term-char-mode를 입력하면 된다.

기본 설정 상태의 term-mode는 term-char-mode, 즉 문자 단위 입출력으로 동작한다. 모든 키가 하나의 문자로 매칭되기 때문에 Emacs의 상당수 단축키를 제대로 이용할 수 없다. C-c키로 입력을 시작해서 이 후 단축키를 입력해야만 단축키를 인식한다. 대신, Emacs에 기본 바인딩 되어 있는 ESC 등의 키를 터미널에서 정상적으로 이용이 가능하기 때문에 완벽한 터미널 환경을 구현해준다.

term-line-mode에서는 모든 입출력을 라인 단위로 하기 때문에 RET가 입력되기 전 까지의 단축키를 이용하는데 무리가 없다. 하지만 간혹 표시되는 라인이 길 경우 이게 입력 라인으로 넘어가는 오동작도 간간히 발생하는 등 완벽한 터미널 환경과는 거리가 멀어진다.

기타 설정


특정 입력 모드를 term-mode의 기본 환경으로 설정하고 싶다면 훅으로 연결해 주면 된다.
(add-hook 'term-mode-hook 'term-line-mode)

사족


Mac OS X에서 Emacs를 사용중이라면, 터미널에 붙여넣기 할 때 CMD-V를 이용해 할 수도 있다. 그런데 이건 붙여넣어 보이는 것일 뿐 정확하게 터미널에 입력되지 않아서 정상 동작을 하지 않는다. 실제 터미널에는 CMD-V의 키 입력 코드가 입력되어 있을 것이다.

이렇게 귀찮게 할 필요 없이 Terminal.app이나 iTerm.app 등을 이용하는게 더 명쾌한 해답일지도 모르겠다...

댓글 없음 :