[Emacs] 번역 기능을 추가해보자

현재 커서가 놓인 단어, 혹은 선택된 영역을 구글 번역기를 이용해 자동으로 한국어로 번역하는 기능을 만들어 보자. 여기서는 결과물을 브라우저로 본다는 것을 가정한다.

(defun open-google-translate ()
  "Translate current word using Google Translator"
  (interactive)
  (let (sel-word target-url)
    (setq sel-word
          (if (and transient-mark-mode mark-active)
              (buffer-substring-no-properties (region-beginning) (region-end))
            (thing-at-point 'symbol)))

    (setq sel-word (replace-regexp-in-string " " "%20" sel-word))
    (setq target-url (concat "http://translate.google.com/#auto|ko|" sel-word))

    (browse-url target-url)))
어디선가 비슷한 기능이 소개되길래 구조를 거의 베끼긴 했지만 -_- 완벽하게 돌아간다는 보장은 없다. 대상 URL에서 보이듯이 원본 언어는 자동감지 하는 식으로 설정해 놨다.

실제로 사용하기 위해 단축키 등록을 하는 편이 유용할 것 같다.
(global-set-key (kbd "C-S-T") 'open-google-translate)
이 코드를 실행시키고 Ctrl-Shift-T를 누르면 웹브라우저가 뜨면서 번역 사이트에 해당하는 내용이 표시될 것이다.

Google API를 잘 활용한다면 굳이 브라우저를 띄우지 않고 다른 버퍼를 띄워 거기다 결과를 표시하는 식으로 개선이 가능할지도 모르겠다.

이 코드를 응용해서 여러 용도로 사용이 가능하다. 예를 들어 코드의 특정 심볼을 레퍼런스 사이트에서 찾아본다던가, 특정 단어를 위키피디아에서 찾아본다던가 등등...

중요한 건 if 문 내부에 있는 영역 혹은 커서가 위치한 곳의 단어를 걸러내는 코드다. 이 부분은 잘 알아두면 여러가지 텍스트 프로세싱 영역에 사용할 수 있게 된다.


사족. Emacs를 잘 쓰려면 역시 Elisp을 잘 알아두는게 현명할 것 같다. -_-;;

댓글

이 블로그의 인기 게시물

버전(Version)을 제대로 이해하기

소수점 제거 함수 삼총사 ceil(), floor(), round()