2011년 4월 20일 수요일

[Emacs] 윈도우 관련 커맨드

Emacs에서 윈도우 생성/닫기/크기조절/포커스 이동에 대한 커맨드와 관련 정보를 소개한다. 아래는 기본적으로 제공되는 단축키 및 기능 중 자주 쓸 만한 것 들이다.
  • C-x 1: 다른 창 모두 닫기 (즉 현재창을 최대화)
  • C-x 2: 현재창을 세로로 나누기
  • C-x 3: 현재창을 가로로 나누기
  • C-x o: 다른 창으로 이동(other-window)
  • 정보표시줄 좌클릭 후 드래그: 해당 창의 세로 크기 조절
  • 정보표시줄 우클릭: 해당 창을 닫는다.

창을 닫거나 나누는 것은 자주 쓰이지 않기 때문에 귀찮지는 않지만, 창을 이동하는 키는 자주 쓰일 수 있어서 단축키가 좀 귀찮은 편이다. 이럴 때는 좀 더 단순한 단축키에 바인드 시키는 것이 편할 수도 있다.

C-x o 키로 실행되는 other-window 함수는 한쪽 방향으로만 포커스를 이동하기 때문에 윈도우가 많은 상태에서 잘못 지나쳐 오면 굉장히 귀찮다. 따라서 반대 방향으로 이동하는 방법도 만들어 보자.
(defun other-window-reverse ()
  (interactive)
  (other-window -1))

(global-set-key (kbd "C->") 'other-window)
(global-set-key (kbd "C-<") 'other-window-reverse)
C->는 기존 C-x o와 동일하게 좌에서 우로, 위에서 아래 창으로 이동한다. 반대로 C-<는 우에서 좌로, 아래에서 위 방향의 창으로 이동한다.

other-window-reverse 함수 정의 내용에서도 볼 수 있지만 other-window 에 인자로 -1을 줘서 방향을 반대로 할 수 있다는 점을 응용한 코드다.



더 단순히 창이동을 할 수 있는 방법이 있다. 다음 설정을 추가해서 실행시켜 보자.
(windmove-default-keybindings 'meta)
이 후 Meta(Alt)키를 누른 채 방향키를 누르면 해당 방향의 윈도우로 이동할 수 있다.

이 설정을 수동으로 정의할 수도 있는데 windmove-로 시작하는 함수들을 활용하면 가능하다.
  • windmove-up
  • windmove-down
  • windmove-left
  • windmove-right
이름만 보면 알 수 있겠지만, 각 방향의 창으로 포커스를 이동시킬 수 있는 함수들이다. 원하는 단축키에 바인딩 시키면 될 것이다.

참고로 windmove- 류 함수들은 해당 방향에 창이 없으면 진행되지 않는다. 즉, 순환기능이 없다는 점. other-window 를 이용하는 경우는 끝의 창에서 한번 더 실행하면 다시 처음으로 순환된다는 점이 다르다는 의미다.

댓글 없음 :