[Emacs] 확장 관리 시스템 ELPA/MELPA/Marmalade

이전에 적었던 ELPA 관련 글들이 약간 부실하다는 느낌이 들었고 거기다 Marmalade 라는 또다른 패키지 저장소가 있기 때문에 추가로 정리글을 적어본다.


ELPA - Emacs Lisp Package Archive

이름만 봐도 알 수 있을 것 같지만, 간략하게 정리하자면 여기저기 산재해 있는 Emacs용 확장 모듈을 한 곳에서 관리하며 이를 손쉽게 설치하거나 업그레이드 하거나 삭제 할 수 있는 기능 제공을 목표로 하는 서비스이자 확장(Extension)이다.

Emacs 24 버전부터는 package.el 로 통합되었기 때문에 별도의 설치나 설정이 필요하지 않고 바로 이용이 가능하다. 하지만 등록된 패키지가 좀 적다는 것이 문제였기 때문에 개인적으론 별로 사용하지 않았다.


MELPA - Milkypostman's ELPA

홈페이지에서 표기하기를 Experimental 한 패키지 들을 관리한다고 한다. 결국 ELPA에서 제공하지 않는 확장을 제공하겠다는 의미로 이해가 된다.

MELPA는 아래 저장소 주소를 ELPA에 추가해 주면 사용이 가능하다.
http://melpa.milkbox.net/packages/


Marmalade

Marmalade 역시 ELPA에 호환되는 패키지 저장소이다. 아래 저장소 주소를 ELPA에 등록해 주면 사용 할 수 있다.
http://marmalade-repo.org/packages/


사용법

MELPA와 Marmalade는 ELPA에 호환되도록 만들어 졌고 특별한 확장을 제공하기 보단 패키지 목록 을 제공하는데 목적이 있다. 즉, Emacs24를 사용 중이라면 저장소 주소를 추가해 주는 것으로 준비는 끝이다. 만약 Emacs 23 이하의 버전을 사용한다면 ELPA를 설치하면 되지만 가급적 24 버전을 사용하는 것을 추천한다.

위 저장소들을 이용하기 위해선 Emacs 설정(초기화 스크립트)에 아래 몇 줄의 코드가 필요하다.
(require 'package)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)

위 코드가 실행되고 나면 M-x package-list-packages 명령으로 ELPA를 기동시킬 수 있다. 이 명령을 입력하면 등록된 저장소 모두에서 패키지 리스트를 다운로드 받고 *Packages* 버퍼가 나타나면서 패키지 목록이 표시된다.

*Packages* 버퍼에서는 아래의 단축키를 사용 할 수 있다.
  • n 혹은 p: 커서를 아래 혹은 위로 이동(C-n 및 C-p 와 동일)
  • ?: 패키지 상세 설명 표시
  • i: 설치할 패키지로 선택
  • d: 삭제할 패키지로 선택
  • u: 선택된 패키지를 선택 해제
  • U: 설치된 확장 중 업그레이드 된 패키지 전부 선택(대문자 U 주의)
  • r: 리스트를 최신으로 갱신
  • x: 설택된 패키지를 설치하거나 업그레이드
참고) 대문자 U로 사용하는 업그레이드 기능은 처음에는 좀 헷갈릴 수도 있다. 업그레이드 되는 패키지 앞에 D라고 삭제예정이라고 표기되기 때문이다. 하지만 업그레이드 시에 표기되는 D 마크는 '업그레이드 하고 구버전은 삭제할 예정'이라는 표기이므로 오해하지 말고 x키를 눌러서 실행시켜 보자. 더구나 업그레이드 후 구버전을 삭제 할 때는 진짜 삭제 할 것인지 물어본다.


사족

유명한 패키지 저장소는 ELPA 공식을 포함해서 이 3가지이다. 왜 이렇게 분리되어서 관리되느냐 하는 점이 의아하기도 한데, 각 저장소 프로젝트는 성격이 조금씩 다르리라 생각된다. 어차피 ELPA를 통해 하나로 집중관리 되기 때문에 분리되어 있어도 마치 하나인 것 처럼 느껴진다.

패키지 소스의 경우도 경로가 다양하다. 예를 들어 github에서 긁어 온다거나 혹은 wiki에서 다운로드 한다거나 등등 말이다. 소스 서비스가 틀려도 한 곳에서 관리가 가능하다니 당연히 좋은 세상이다.

위의 추가2곳의 저장소를 등록해 두면 별도로 확장을 다운로드 받아서 설치하는 번거로운 과정이 필요없다. load-path 등록도 필요없다. 그냥 *Packages*에서 설치해 두고 쓰고 싶을 때 require 혹은 load-library를 써서 사용하면 된다. 항상 새로운 확장을 시험해 볼 때 설치하는 과정이 제일 번거로웠던 나에겐 축복과도 같다.

이제 Vim의 Vundle 같은 뛰어난 패키지 관리 시스템을 부러워 하지 않아도 된다. 오히려 더 좋고 편하다. :-)

댓글

이 블로그의 인기 게시물

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

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