Emacs 와 JDEE 와 Maven 과의 결합의 마지막을 해결했습니다. 그 전의 세팅을 보시고 싶으시면 


    2 번까지 끝을 내고 나니 Emacs 내에서 maven 컴파일과 빌드를 하고 싶더군요. (당장은 mvn install 만 되게) 딱히 다른 사람들이 만든 것은 내 필요에 부합하지 않은 것 같기도 하고 지원도 더 이상 하지 않는 것 같기에 직접 만들게 됐습니다. jdee 프로젝트 안에 있는 jde-make 를 변경했습니다. 간단하게 되더군요. 적당한 곳 (~/.emacs.d 안에)에 jde-mvn.el 을 복사하시고 .emacs 안에서 

(require 'jde-mvn)


 을 해주시면 됩니다. 그리고 세부 설정을 위해서 


(custom-set-variables

 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(ecb-options-version "2.40")
 '(jde-build-function (quote jde-mvn))
 '(jde-global-classpath (quote 
     ("/Users//work/android/\
      sdk/platforms/android-17/android.jar" 
      "/Users//.emacs.d/\
      jdee/build/classes")))
 '(jde-mvn-enable-find t)
 '(js2-auto-indent-p t)
 '(js2-cleanup-whitespace t)
 '(js2-enter-indents-newline t)
 '(js2-global-externs (quote ("$" "Ext")))
 '(js2-mirror-mode nil)
 '(slime-complete-symbol-function 
   (quote slime-fuzzy-complete-symbol))
 '(tab-width 2))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )


 와 같이 jde 설정을 해주시면 완료입니다. 

 필요한 파일은 https://github.com/crazia/jdee-mvn 에 올려두었습니다.
   저번에 올린 Emacs 와 JDEE 를 가지고 안드로이드를 개발하는 방법에 대해서 글을 올렸습니다. 그런데 최근 화두는 어떻게 하면 Mavenpom.xml 을 이용해서 JDEE 의 개발환경에 접목을 시킬까 하는 것이였습니다. 아.. 진짜 힘들었습니다. 그래도 몇가지 테스트와 노력을 끝으로 드디어 성공했습니다. 

참고한 사이트입니다. 


여기에서 근본적인 pom-parser.el 을 다운 받을 수 있었습니다. 그런데 제대로 동작을 하지 않더군요. 이유는 maven 의 실행 옵션들이 변해서 그렇답니다. 


위 사이트를 참조하시면 어떻게 변경해야 하는지 알 수가 있습니다. 위 까지만 적용하면 다 될 줄 알았는데 제가 기본적으로 jde-global-classpath 에 넣어둔 것이 사라지면서 에러가 발생하더군요. 그래서 기존에 있는 클래스 패스를 포함하는 버젼으로 수정했습니다. 
    올려둔 파일을 다운 받으시고 ~/.emacs.d/ 에 복사하시고 maven 프로젝트가 있는 곳 (정확히는 pom.xml 파일이 있는 곳)에 다음과 같은 파일 prj.el 을 만들어 주시면 됩니다. 


(jde-project-file-version "1.0")
(jde-set-variables
'(jde-compile-option-command-line-args
(quote ("-Xlint:all" "-Xlint:-serial"))))
(require 'pom-parser)
  (with-pom ()
  (pom-set-jde-variables *pom-node*))


제가 최근에 읽었던 프로그래머들의 특징에 관한 글중에서 공감이 갔던 구절이 하나 있습니다. 

"프로그래머는 UX (User eXperience)를 개발한다고 해도 자신이 좋아하는 환경은 CLI (Command Line Interface)다" 


 다시금 진행하기전에 다짐하듯이 말씀드리는 사항은 안드로이드 (Android) 개발하기에 최적의 환경은 Google 에서 제공하는 ADT (http://developer.android.com/intl/ko/sdk/index.html) 환경에서 개발하는 것입니다. 이 포스트는 ADT 에서 개발을 진행하더라도 자꾸 자꾸 눈이 CLI 환경에서 떠나지 않는 중독자(?!!)들을 위한 것입니다. 

 이 포스트는
Emacs Version 24로 업글후 Clojure 와 Common Lisp 개발 환경 갖추기 의 연장선상에 있으며 (Version 24 로 올라간 후 정말 많은 것이 바꼈습니다), Snow Leopard 에서 Emacs 를 Android 개발환경 IDE 로 세팅의 연장선상 이기도 합니다. 그 시절과는 정말 많은 것이 달라졌더군요. 


Android SDK 다운로드 
     
http://developer.android.com/intl/ko/sdk/index.html 에서 'USE AN EXISTING IDE' 라고 되어 있는 부분을 누르시면 SDK 만 받는 부분이 있습니다. 받아서 적당한 곳에 풀어주시면 됩니다. 저는 "~/work/android" 에 풀어줬습니다.
 
     
.profile 에 PATH 추가 

export ANDROID_SDK_HOME=/Users/<자신의 아이디>/work/android/sdk
export PATH=$ANDROID_SDK_HOME/platform-tools:$ANDROID_SDK_HOME/tools:$PATH

     
이 내용을 추가해 줍니다. 이제 어디서건 android 명령과 adb 명령을 사용할 수가 있게 됩니다. 
 
     
android-mode 설치해주기 

$ git clone git://github.com/remvee/android-mode.git


 로 적당한 곳에 받아줍니다. 제 경우에는 "~/.emacs.d/android-mode" 입니다. 그리고 "$ANDROID_SDK_HOME/tools/lib" 에 있는 android.el 을 "~/.emacs.d/android-mode" 에 복사해줍니다. 
 

.emacs 파일에 android-mode 관련 내용 추가 



(add-to-list 'load-path "~/.emacs.d/android-mode") 
(require 'android-mode)
(require 'android)
(setq android-mode-sdk-dir "~/work/android/sdk")


를 추가해줍니다. 각각의 디렉토리는 제 것을 기준으로 했으니 자신의 디렉토리로 바꾸어 주는 작업이 필요할 것입니다. 
 

JDEE (Java Development Environment for Emacs) 설치하기 

JDEE Project Page 에서 받을 수도 있지만 저는 편하게 미러에서 받는 것을 선택했습니다. 
     

$ cd ~/.emacs.d 
$ git clone git://github.com/emacsmirror/jdee.git


 라는 식으로 적당한 곳에 jdee 를 받아줍니다. 그리고 이것을 컴파일 해줘야 하는데 아마 그냥 안 될것입니다. 
 Ant-Contrib 이라는 것이 필요합니다. "여기" 에서 다운 받을 수 있습니다. ant-contrib-1.0b3-bin.tar.gz 를 다운받고 압축을 풀어서 (ant-contrib-1.0b3.jar 파일이 나옴) 위의 디렉토리인 "~/.emacs.d/jdee" 로 복사해줍니다.  

$ emacs ~/.emacs.d/jdee/build.xml 


로 간단한 조작을 해줍니다. 기존 부분을 아래와 같이 변경해 줍니다. (금방 찾을 수 있습니다 !!)

<!-- add in the contribs (add ant-contrib-VERSION.jar) to CLASSPATH -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
  <classpath>
    <pathelement location="/Users/&lt;자신의 아이디&gt;/.emacs.d/jdee/ant-contrib-1.0b3.jar">
  </pathelement></classpath>
</taskdef>


$ cd ~/.emacs.d/jdee
$ ant build 

해 주면 모든것이 컴파일 됩니다. 
 

Elib-1.0 설치하기 

 예전에 링크로 걸어둔 곳에 가봤더니 이제 받는 곳을 찾기가 어려워 졌습니다. 아마 기본적으로 Emacs 에 포함된 것이 아닐까 생각도 해보지만 혹시 모르니 제 디렉토리에 있는 것을 올려둡니다. 

 
첨부파일을 다운 받으시고 
     

$ tar xvzf elib-1.0.tgz 


로 적당한 곳에 풀어주시면 됩니다. 참고로 저는 "~/.emacs.d/elib-1.0" 에 풀어줬습니다. 


JDEE 세팅하기 

 저는 보통 세팅을 나눠서 하는 것을 좋아합니다. 주력하고 있는 프로젝트에 따라서 .emacs 파일을 조금씩 조절하는 것을 즐겨하기 때문에 이번에도 그런식으로 했습니다. 

$ emacs ~/.emacs 

     
로 열어서 맨 아래쪽에 


(require 'cr-jdee)


를 추가해줍니다. 그리고 

$ emacs ~/.emacs.d/cr-jdee.el


로 열어서 다음과 같은 내용을 채워줍니다. 


;;;
;;; jdeee settings 
;;;


(add-to-list 'load-path "~/.emacs.d/elib-1.0")
(add-to-list 'load-path "~/.emacs.d/jdee/build/lisp")

(setq jde-help-remote-file-exists-function '("beanshell"))

(require 'jde)

;;
;; 저장할 때마다 자동으로 import 정리해주기 
;;
(defun java-my-hook ()
  (progn
    (define-key jde-mode-map [(control return)] 'jde-complete)
    (add-hook 'before-save-hook
              (lambda ()
                (jde-import-kill-extra-imports)
                (jde-import-all)
                (jde-import-organize))
              nil t)
    ))

(add-hook 'jde-mode-hook 'java-my-hook)


(custom-set-variables
 `(jde-global-classpath (quote 
    ("/Users/<자신의 아이디>/work/android/sdk/platforms/\
      <자신의 주력 타겟:예로 android-16>/android.jar" 
     "/Users/<자신의 아이디>/.emacs.d/jdee/build/classes"))))

(provide 'cr-jdee)



이렇게 저장해 주면 기본적인 세팅은 끝입니다. 중간에 java-my-hook 함수로 하는건 몇 가지가 있지만 그중에 제일 편리한 기능이 파일 저장할 때 알아서 import 문을 추가해 주는 기능입니다. Eclipse 의 Cmd + Shift + O 누르면 해주는 기능과 비슷합니다. 처음 실행할 때 beanshell 실행하느라 좀 느리긴 하지만 일일이 찾아주는 것보다 얼마나 편합니까? ㅎㅎ 
     

테스트 하기 

프로젝트 만들고 간단하게 빌드 + 테스트는 
예전 포스트 와 Command Line 에서 프로젝트 관리하기 를 참조하시면 됩니다. 이 부분은 추후에 조금 더 보강해서 정리하겠습니다. 

저번 포스트 에서 Emacs 버젼을 24 로 업그레이드 한 후에 가장 큰 문제가 생겼습니다. ClojureCommon Lisp 개발환경이 동시에 안되는 문제가 발생했습니다. 

몇번의 노력끝에 결국 Emacs 에서도 편하게 설치하는 쪽을 받아들이게 됐습니다. 기존에는 "이맥스 유저는 이래야 해!!" 라는 말도 안되는 자존심으로 수동으로 이거 저거 설치하는 쪽이였으나 이제 대세를 받아들이기로 했습니다. 

클로져 (Clojure) 개발 환경 설정 


예전 포스트 에서 쉽게 설치하는 방법을 소개한 적이 있었습니다.  그러나 swank-js 를 만들었던 당사자가 더 훌륭한 솔루션이 나왔다고 GG 를 쳐버렸습니다. -0- (당신을 믿고 포스팅을 했었다고!!! ㅜ.ㅜ ) 

nRepl 을 설치해줍니다.  

nrepl.el is an Emacs client for nREPL, the Clojure networked REPL server. It's a great alternative to the now deprecated combination of SLIME + swank-clojure.


설치법은 간단합니다. Emacs 24 버젼부터는 Package 관리가 기본으로 포함되어 버렸습니다. 대세는 게을러지기 아니겠습니까? 
.emacs 파일에 다음과 같은 내용을 추가합니다. 


(require 'package)
(add-to-list 'package-archives
    '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)


그리고 재 시작후 , M-x list-packages 로 출력해서 nrepl 을 찾아서 설치해 주거나 , 설명 페이지에서 추천하는 대로 

M-x package-install [RET] nrepl [RET]



로 설치해주시면 됩니다. 추가로 편리하게 사용하기 위해서 세팅 몇가지만 해주시면 됩니다. 

(add-hook 'nrepl-mode-hook
     (defun clojure-mode-slime-font-lock ()
         (let (font-lock-mode)
             (clojure-mode-font-lock-setup))))


이제 클로져 관련 파일을 열고나서 M-x nrepl-jack-in  를 입력하시면 익숙한 REPL 버퍼가 보일 것입니다. (속도도 Swank-js 보다 빨라졌습니다)


Common Lisp 개발 환경 설정 (SLIME 설정)
 
이제 이것 설치도 쉽게 하는 방법이 있습니다. SBCL 은 이미 설치되어 있다고 가정합니다. (참조사이트 : http://www.mohiji.org/2011/01/modern-common-lisp-on-linux/

일단 quicklisp 파일을 다운 받아야 합니다. http://beta.quicklisp.org/quicklisp.lisp 에서 받아줍니다. 적당한 곳에 옮겨주시고요. 

$ sbcl


sbcl 을 실행시켜줍니다.

user> (load "/path/to/quicklisp.lisp")


sbcl 상에서 위와 같이 quicklisp 파일이 받아진 것을 읽어들입니다.  

user> (quicklisp-quickstart:install)
user> (ql:add-to-init-file)
user> (ql:quickload "quicklisp-slime-helper") 


그리고 위와 같이 연속으로 실행시켜줍니다.  이러면 자연스럽게 SLIME 까지 설치가 됩니다. 이제 Emacs 에게 위치를 알려주는 일만 해주면 됩니다. 

(setq inferior-lisp-program "sbcl")
(load (expand-file-name "~/quicklisp/slime-helper.el"))

이제 M-x slime 을 입력하면 자연스럽게 SLIME REPL 이 뜨게 됩니다.  

May The Source Be With You !!!
 
최근 업무 관계로 바빴습니다. (뭔 웹 사이트를 한달안에 5개를 만들라고 하시는지..) 

기존에 사용하고 있던 Emacs 버젼이 낮은 관계로 업그레이드를 하긴 해야지.. 하다가 지금 릴리즈 되어 있는 버젼이 Shift+SPC 가 안먹는다는 이야기를 접했습니다. 커미터가 서양분인 관계로 Shift+SPC 의 필요성을 모르셨나 봅니다. (이런!!!) 그러다 CJK 언어를 쓰는 동북아 삼국의 맹공 (주로 중국과 일본)을 받고 끝내, 왜 필요한지는 모르겠지만 이라는 사족을 단 채로 Shift+SPC 를 잡아채게 바꿨다고 합니다 ㅎㅎ

그래서 일단 Emacs 소스를 받아옵니다. 여러 레파지토리가 존재하지만 손에 익은 github.com 것을 가져오기로 합니다.

https://github.com/emacsmirror/emacs

적당한 곳에 가서

$ git clone git://github.com/emacsmirror/emacs.git 



합니다. 내려 받는데 시간이 좀 걸립니다. 소스 전체 크기가 무려 900메가가 넘기 때문입니다. (소스 자체 크기라기 보다는 변경내역들의 내용이 많을것이라 봅니다)

이대로 컴파일을 하면 라이브러리가 두개 없다고 나옵니다. libgif 와 libtiff 입니다. 따라서 이를 설치해 줘야 합니다.
애플에서 이런 오픈소스 라이브러리에 관련된 페이지가 있습니다.
http://www.apple.com/opensource/ 이 곳인데요. 이곳에서 gif 와 tiff 라이브러리를 찾아서 설치해 줍니다. 

http://sourceforge.net/projects/giflib/?source=dlp
이게 libgif 고 

http://www.remotesensing.org/libtiff/
이게 libtiff 입니다. 

두 소스 다 받아서 압축을 푸시고, 

 EDITED: 2015-04-06

brew 를 이용해서도 설치할 수가 있습니다. 

$ brew install libtiff

$ brew install giflib


$ configure 
$ make -j4 
$ sudo make install


 
해 주면 설치됩니다. make -j4 는 다들 알다시피 잡 갯수입니다. core 갯수 * 2 정도를 해주면 적당합니다. 이제 Emacs 를 컴파일 해줄 차례입니다. 

Emacs 에서 imagemagick 을 이용하면 org-mode 에서 이미지를 다룰 수가 있게 됩니다. imagemagick 을 연동해서 컴파일 설정을 해줍니다. 

$ cd ~/work/emacs

$ brew install pkgconfig

$ brew install imagemagick

$ ./autogen.sh

$ configure --with-ns
$ make -j4
$ make install



해주면 ~/work/emacs/nextstep 안에 컴파일된 Emacs.app 가 존재합니다. 이것을 /Applications 에 복사하시면 설치는 완료입니다. 뭔가 그래픽쪽이 강화가 됐는지 (libgif 와 libtiff 때문인가? ) 뽀샤시한 느낌이 나는게 아주 흡족합니다. 물론 Shift+SPC 도 잘 동작합니다.

 



Emacs 에 Yasnippet 을 설치하면 기본적으로 Text-mode snippet 중에 time 이라는 단축어가 있습니다. 
Text-Mode 상에서 time 을 입력하고 TAB 키를 누르시면

Thu Mar 21 18:36:06 2013

위와 같은 내용이 출력됩니다. 일단 영어이기도 하고 , 제가 필요하 것은 오늘 날짜와 뭐 더 필요하다면 요일정도? 출력이 되면 좋겠다고 생각이 들어서 간단한 함수를 제작했습니다.

(defun current-day-string ()
  (let ((datetime (decode-time))
        (dow '(일 월 화 수 목 금 토)))
    (format "%s-%s-%s %s요일" 
            (nth 5 datetime) 
            (nth 4 datetime) 
            (nth 3 datetime) 
            (nth (nth 6 datetime) dow))))


이제 이 함수를 .emacs 에 넣어둡니다. (전 다른 방법을 쓰지만 쉽게 쉽게 설명합니다 ㅎㅎ) 

그리고 Snippet 을 만들어줄 차례입니다. 

yasnippet 이 설치된 디렉토리로 이동합니다. (제 경우에는  ~/.emacs.d/plugins/yasnippet 에 저장이 되어 있습니다) 

$ cd snippets
$ cd text-mode



(만약 이 디렉토리들이 존재하지 않는다면, 예전 제 포스트 를 참조하셔야 합니다. yasnippet 부분만 따라하시면 됩니다. ) 
 

$ emacs day



(day 라는 이름의 snippet 을 만들어 주라는 것입니다)

# name: (current day)

# key: day
# --
`(current-day-string)`



자 이제 모든 준비가 끝났습니다. text-mode 상태에서 day 라고 누르고 TAB 키를 눌러주면

2013-3-21 목요일

라고 출력되는 것을 확인하실 수 있습니다.  
 
 node.js 를 이용해서 개발한지가 몇개월 지났습니다. 그동안 언어 배우느라 (자바스크립트를 할 줄 몰랐음) - 사실 언어 자체는 어려울게 하나도 없더군요. - 개발 환경에 익숙해 져야 해서 좀 더 나에게 맞는 편리한 환경을 만들 여력이 없었으나 이제는 어느정도 익숙해 져서 개발 환경쪽에 신경이 쓰이더군요. (사실은 웹일을 하기 싫어서 딴 짓을 하고 있..)

제가 설명드리는 기준은 OSX 입니다. (우분투를 사랑하지만 제 개발 환경은 OSX 라..)

avascript 개발하는데 있어서는 완전 필수입니다. 문법 체크까지 해서 이상한 거는 빨간 밑줄을 그어주더군요. (빨간펜 선생님?!!) 

설치법 입니다. 

$ svn checkout http://js2-mode.googlecode.com/svn/trunk/ js2-mode
$ cd js2-mode
$ emacs --batch -f batch-byte-compile js2-mode.el
$ cp js2-mode.elc ~/.emacs.d/


이러면 설치 끝입니다. 일단 설치만 하고 나중에 설정을 하기로 합니다. 

yasnippet 

TextMate 의 함수 템플릿 기능을 보고 만든 Minor 모드 입니다. 이런 것이 이맥스의 가장 큰 장점입니다. 필요하면 만들면 된다!! 
이것의 사용법은 쉽습니다. 예를 들면 자바스크립트 코딩할 때 함수 선언할 일이 필요하다면 

fun 입력하고 TAB 을 누르면 함수의 템플릿이 자동으로 생성됩니다. 

/**  */
function my_function( args ){
  
}


이런식으로 그러면 함수 설명과 my_function 과 args 부분을 적어주기만 하면 됩니다. 
https://github.com/capitaomorte/yasnippet 여기에 잘 정리가 되어 있습니다. 설치법도 있지만 퍼 와서 보자면 

$ cd ~/.emacs.d/plugins
$ git clone https://github.com/capitaomorte/yasnippet



.emacs 파일의 한 구석에 

(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
;; (yas-global-mode 1)    


(yas-global-mode 1) 는 필요할 때만 쓰게 일단은 커멘트 처리 해 둡니다. 


js2-mode 인덴테이션(indentation) 수정 

js2-mode 를 쓰거나 아니면 이클립스에서 개발을 하거나, 가장 문제가 되는 것이 바로 이 인덴테이션이더군요. 정말 그지 같은 인덴테이션 아닌가요? 탭 (tab) 한번 누르면 화면의 1/3 정도 지나쳐서 커서가 위치하는 것을 보면 한숨이 나오더군요. 그런데 역시 세상에는 같은 고민을 가지고 있으면 해결할려고 하는 사람도 있는 법입니다. 


바로 여기 입니다. 여기에 보면 수정하는 방법이 잘 정리가 되어 있습니다. js2-mode 는 이미 설치를 했기 때문에 중간에서 설명하고 있는 에스프레소(espresso) 를 설치해줍니다. (java 가 커피라 그런지 에스프레소 등등의 네이밍들이 요즘 눈에 띄는군요 ㅎㅎ) 


여기서 받아주면 됩니다. 이 모드를 설치해 주는 이유는 인덴테이션이 좋기 때문이라고 글쓴이가 설명하고 있더군요. 참고로 저는 저 파일을 ~/.emacs.d/ 밑에 복사해 뒀습니다. 역시 설치만 하고 설정은 나중에 하는 걸로 합니다. 여기까지 설치가 됐으면 이제 글쓴이가 만든 함수 부분이 기니까 한꺼번에 설정하겠습니다. 

~/.emacs.d/ 에 파일 한개를 만들어 줍니다. (제 경우에는 cr-js.el 이였습니다) 
그러면 cr-js.el 이라고 가정을 하고 다음 과 같은 내용을 추가 해 줍니다. 그리고 다음과 같이 파일은 만들어 줍니다. 



그리고 .emacs 파일에 

(require 'cr-js)


한줄만 추가해 주면 됩니다. 
내친김에 다른 것도 손을 좀 볼까요? 
node.js 에서 웹을 개발할 때 쓰는 view 엔진이 여러개가 있습니다. (정확히는 express) 기본적으로 jade 가 쓰이고요. 디자이너들과 공동 작업을 할 때는 ejs 가 많이 쓰인다고 합니다. ejs 를 쓸때 마땅한 모드가 없더군요. 그런데 ruby on rails 에서 사용하는 rhtml 이 문법이 거의 비슷하더군요. 그래서 rhtml-mode 를 설치해 주기로 합니다. 


요게 다른 모드랑 연계해서 동작하지 않고 독자적으로 rhtml 을 처리하더군요. 맘에 들어서 설치해줬습니다. 

$ cd ~/.emacs.d
$ git clone git://github.com/eschulte/rhtml.git 


그리고 .emacs 에 

(add-to-list 'load-path "~/.emacs.d/rhtml")
(require 'rhtml-mode)

(add-to-list 'auto-mode-alist '("\\.ejs$" . rhtml-mode))
(add-hook 'rhtml-mode-hook
          (lambda ()
            (yas-global-mode 1)))


이렇게 추가해 주면 됩니다. 한가지 이상한 점이 있지요? rhtml 도 yas 모드가 있는지 궁금하실 것입니다. (설정에 보면 있는 것처럼 하는데) 그래서 설치해 주기로 합니다. 


rails 용 snippet 을 모아둔 것들입니다. 당장은 rails 개발을 안할꺼기 때문에 rhtml 용만 떼어 오기로 합니다. 

$ cd ~/
$ mkdir temp
$ cd temp
$ git clone git://github.com/eschulte/yasnippets-rails.git
$ cd yasnippet-rails 
$ cd rails-snippets
$ cp -r rhtml-mode ~/.emacs.d/plugins/yasnippet/snippets/


이렇게 해주면 snippet 이 설치가 됩니다. 이제 편하게 코딩을 하시면 됩니다. 

ps.

js2-mode 용 snippet 도 설치를 하셨다면 node.js 에서 자주 쓰이는 prototype method 선언하는 템플릿을 만들어 두면 편합니다. 제가 만들어 쓰는 것을 공개합니다. 

# -*- mode: snippet -*-
# name: protf
# contributor: Wolfgang crazia <crazia@gmail.com>
# --
/** $1 */
${2:my_class}.prototype.${3:method_name} = function ( ${4:args} ){
    $0
}


이 파일 이름을 (확장자 없이) protf 로 만들고 

~/.emacs.d/plugins/yasnippet/snippets/js2-mode/protf 


로 저장하면 나중에 자바스크립트 파일 편집중에 protf 라고 입력하고 탭 (tab)키를 누르시면 자동으로 템플릿이 완성됩니다. 

OSX 에서 GNU Emacs 를 사용중입니다. 귀찮고도 짜증나는 것중의 한가지가 왠만한 것들에 PATH 가 전혀 안 잡혀 있다는 것입니다. 심지어 $HOME/.bash_profile 에 내용을 넣어준다고 해도 Emacs 는 그 Path 의 영향을 받지 않더군요. 현재 Emacs 가 가지고 있는 PATH 정보를 확인하고자 한다면 

M-x shell 


로 들어가서 Prompt 가 뜨면 

bash-3.2$ env | grep PATH
EMACSPATH=/Applications/Emacs.app/Contents/MacOS/bin
PATH=/usr/bin:/bin:/usr/sbin:/sbin


이렇게 빈약하게 걸려 있는 것 뿐입니다. 귀찮더라도 추가해 주고 싶은 PATH 가 있다면 .emacs 파일에 

(setenv "PATH"
  (concat
   "/usr/local/bin" ":"
   "/opt/local/bin" ":"
   (getenv "PATH")
  )
)


이렇게 추가해 주면 완성입니다. 더 추가해 주고 싶은 PATH 를 쭈욱 써주시면 됩니다. 
저번에 살짝 언급했던 일을 처리중입니다. ( 요기에서 언급함 ) 뭐 우리가 무슨 힘이 있겠습니까? 해달라면 해줄 뿐이지 ㅎㅎ 

바꾸면서 나도 무슨 테이블인지, 무슨 컬럼인지 자세히 봐야지만 알 수가 있는 네이밍 컨벤션이더군요.. 투덜 투덜..

아 이제 그만 투덜되고!! 그렇다고 많지도 않지만 또 어찌보면 많은 부분을 다 찾아주기가 귀찮더군요. 그래서 어떻게 하면 편하게 바꿀 수 있을까를 고민했습니다. 

'훌륭한 해커는 게을러 지기 위해서 프로그래밍을 한다!!' 라는 멋진 사상과 부합되간다면 저도 훌륭하지는 않지만 해커의 길로 나선 것이라고 볼 수가 있습니다.  더구나 제가 쓰는 텍스트 에디터가 바로 이맥스 아닙니까? 바로 개발 들어갔습니다. 



바껴야 될 쿼리 부분을 리젼으로 지전하고 change-table 함수를 호출해 주면 변환은 끝입니다.

 
Slime 이 무엇인지 Emacs 를 사용하시는 분들은 대충 아시리라 봅니다. REPL (Read Eval Print Loop)형태를 지원하는 언어에 대한 최적의 개발 환경이라고 보시면 됩니다. (물론 부정하는 분들도 많습니다) 

저는 Common Lisp , Clojure 등을 Slime 을 이용해서 개발환경을 구축해 두었습니다. 이번에 프로젝트를 Node.js 로 진행하게 되어서 (Node.js 또한 REPL 을 지원합니다) Emacs + Slime 으로 환경을 구축할려고 알아보았습니다. 

역시나 괜찮은 솔루션이 하나 등장하더군요. https://github.com/swank-js/swank-js

Slime 은 Swank 라는 방식으로 각기 언어별로 소켓 접속이 가능한 방식으로 서버를 띄우면 Emacs 에서 slime-connect 를 이용하여 서버에 붙어서 정보를 가져오고 전달하는 방식으로 구동됩니다. 이러한 점 때문에 원격에 swank 서버를 띄워도 마치 local 에 붙는 것처럼 붙어서 동작할 수가 있습니다. 

설치하는 방법 (OSX - Mountain Lion 기준 입니다)

1. Node.JS 와 npm 을 설치합니다. (Ubuntu 설치는 예전 포스트 참조 )

     

 $ sudo port install nodejs 
 $ sudo port install npm 


2. swank-js 설치 합니다. 
       

 $ sudo npm install -g swank-js 


swank-js 는 node.js 로 만들어진 swank 모듈입니다. 위에서 잠깐 언급한 slime 이 접속할 수 있는 서버를 띄워주는 모듈입니다. npm install 시에 -g 옵션을 주면 전역으로 설치하라는  명령입니다. 이제 어디서나 swank-js 명령으로 swank 서버를 띄워줄 수가 있습니다. 

3. SLIME 을 설치해야 할 시간입니다.

$ cd ~/.emacs.d/
$ cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co slime


위와 같은 방식으로 다운 받는 것이 속도가 가장 빠르더군요. git 사이트는 생각보다 많이 느립니다. 


4. js2-mode 를 받아야 합니다. 

http://code.google.com/p/js2-mode/ 에서 js2-20090723b.el 을 다운 받아서 js2-mode.el 로 이름 변경해서 적당한 곳 (저는  ~/.emacs.d/ 밑에다 가져다 뒀습니다) 에 옮겨두고 byte-compile-file 을 해줍니다. 

Emacs 를 실행하고 
       

M-x byte-compile-file 


로 js2-mode.el 을 지정하면 됩니다. 이때 꼭 명심해야 할 사항은 절대 js2-mode.el 을 버퍼에 올려둔 상태로 컴파일 진행하면 안된다는 것입니다. (올려둔 상태로 컴파일 하면 에러가 발생함)

.emacs 파일을 열고 다음과 같은 내용을 추가해 줍니다. 

       (autoload 'js2-mode "js2-mode" nil t)
       (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))



5. 적당한 곳에 swank-js 프로젝트를 다운 받습니다. 
       
     

 $ cd ~/work
 $ git clone git://github.com/swank-js/swank-js.git



6. slime-js.el 의 심볼릭-링크 를 만들어 줍니다. 

$ cd ~/.emacs.d/slime/contrib
$ ln -s ~/work/swank-js/slime-js.el slime-js.el
$ cd ~/.emacs.d/
$ ln -s ~/work/swank-js/slime-js.el slime-js.el


7. .emacs 에 slime-js.el 을 require 해주고, 몇가지 추가 설정을 더 해줍니다. 

       (require 'slime-js)
       
       (add-hook 'js2-mode-hook
          (lambda ()
            (slime-js-minor-mode 1)))
       
       (add-hook 'css-mode-hook
          (lambda ()
            (define-key css-mode-map "\M-\C-x" 'slime-js-refresh-css)
            (define-key css-mode-map "\C-c\C-r" 'slime-js-embed-css)))



8. Emacs 를 다시 띄우고 Terminal.app 를 실행하시고 node.js 프로젝트 만들려고 마음 먹은 곳 위치에서 

$ cd ~/work
$ mkdir node-projects
$ cd node-projects
$ swank-js


이렇게 해주면 swank-js 서버가 구동됩니다. swank-js 명령만 쳐도 되는 것은 'sudo npm install -g swank-js' 해 줬기 때문입니다. 

Emacs 에서 

M-x slime-connect


해 주고 기본적으로 127.0.0.1 과 4005 번 포트로 접속 하는 것을 선택해 주시면 됩니다. (Enter x 2 번)

추가로 어떤 기능이 되는지는 https://github.com/swank-js/swank-js 사이트 참조하시면 됩니다.  

+ Recent posts