2013년 6월 4일 화요일

[Emacs] projectile을 이용한 아주 약간 스마트한(?) 파일 열기

helm-projectile을 이용해 Emacs로 프로젝트의 파일을 여는건 쉽게 된다. 하지만 약간의 귀찮음이 동반되어서 약간의 개선된 기능을 하나 만들어 봤다.

문제의 발단

helm-projectile의 단축키와 find-file의 단축키가 다르다 보니 프로젝트 안에서 파일을 열 때와 밖에서 파일을 열 때 간혹 혼란이 올 때가 있다. 특히 프로젝트 디렉토리가 아닌 곳에서 helm-projectile 단축키를 입력해 버리면 아무런 응답이 없고 메시지만 달랑 뜨니까 왜 안열리나 당황하기도 했다.

이런 경험이 자주 일어나다 보니 짜증으로 이어졌다. 그래서 좀 더 개선시키고 싶어졌다.

개선 방안

그냥 하나의 단축키를 이용해 프로젝트 디렉토리이면 helm-projectile이 동작하게 하고 이 외의 경우는 find-file 등 일반적으로 파일을 여는 기능을 동작하게 하면 어떨까.

생각대로라면 어떠한 경우에도 화면에 뭔가 변화가 발생하니 아마도 좀 더 편해지리라...

해결

projectile 소스를 보다보니 projectile-project-p를 이용해 프로젝트 내부인지를 판단 할 수 있게 되어 있었다. 그래서 이 함수를 이용해 아래와 같은 간단한 Elisp 코드를 만들었다.
(defun sr-open-file ()
  "Open file using projectile+Helm or ido"
  (interactive)
  (if (projectile-project-p)
      (helm-projectile)
    (ido-find-file)))

(global-set-key (kbd "M-o") 'sr-open-file)
이제 M-o 키를 누르면 알아서 helm-projectile 혹은 ido-find-file이 실행된다. 원하는 대로 동작한다. 쓸만 하다면 아예 기본 파일 열기 커맨드인 C-x C-f 로 단축키를 지정해 버릴 수도 있다.

만약 ido를 사용하지 않는다면 그냥 find-file 혹은 helm-for-files 등등 사용하는 확장의 함수로 대체하면 될 것이다.

참고로 M-o 키는 기본적으로 Enrich(리치텍스트-_-)한 편집 시 사용되는 커맨드 키의 Prefix인데 프로그래머라면 별로 쓸 일은 없을 것이다.

관련링크

[Emacs] Projectile 및 Helm 확장

댓글 없음 :