GNUEmacsManual:32

From 흡혈양파의 번역工房
Jump to: navigation, search
Emacs Lisp 패키지(Emacs Lisp Packages)

Emacs Lisp 패키지(Emacs Lisp Packages)

Emacs 에는 추가 기능을 구현하는 패키지를 쉽게 다운로드하고 설치하도록 해주는 기능이 포함되어 있다. 각 패키지는 구분된 Emacs Lisp 프로그램으로, 때로는 Info 매뉴얼과 같은 요소를 포함하기도 한다.


M-x list-packages 는 모든 패키지 목록이 있는
*Packages*
라는 버퍼를 가져온다. 사용자는 이 버퍼를 통해 패키지를 설치하거나 삭제할 수 있다. 408 페이지의 32.1절 [패키지 메뉴(Package Menu)]를 참고한다.


C-h P (
describe-package
) 명령어는 패키지명의 입력을 요하고, 패키지의 속성과 그것이 구현하는 기능을 설명하는 도움말 버퍼를 표시한다.


기본적으로 Emacs 는 Emacs 개발자가 관리하고 GNU 프로젝트가 호스팅하는 패키지 아카이브(package archive)에서 패키지를 다운로드한다. 선택적으로는 제 3자가 관리하는 아카이브로부터 패키지를 다운로드할 수도 있다. 409 페이지의 32.2절 [패키지 설치(Package Installation)]를 참고한다.


Emacs Lisp 프로그램을 설치 가능한 패키지로 바꾸는 것과 관련된 정보는 The Emacs Lisp Reference Manual의 "Packaging"절을 참고한다. 제3자 패키지와 그 외 Emacs Lisp 확장에 관한 정보는 GNU Emacs FAQ의 "Packages that do not come with Emacs"절을 참고한다.


패키지 메뉴 버퍼

M-x list-packages 명령어는 패키지 메뉴를 가져온다. 이것은 Emacs 가 아는 패키지를 열거한 버퍼로서, 각 행마다 다음과 같은 정보를 표시한다:

  • 패키지 이름 (예: '
    auctex
    ').
  • 패키지의 버전 번호 (예: '
    11.86
    ').
  • 패키지의 상태, 주로 '
    available
    '(패키지 아카이브로부터 다운 가능), '
    installed
    ', '
    built-in
    '(기본적으로 Emacs에 포함) 중 하나이다.
    상태는 '
    new
    ' 가 될 수도 있다. 이는 '
    available
    ' 과 동일한데, 사용자가 마지막으로 M-x list-packages 를 호출한 이후 패키지 아카이브에서 패키지를 새로 이용할 수 있게 되었음을 의미한다는 점에서 차이가 있다. 다른 경우에서 패키지는 '
    held
    ', '
    disabled
    ', '
    obsolete
    ' 중 하나의 상태를 가질 수 있다. 409 페이지의 32.2절 [패키지 설치(Package Installation)]를 참고한다.
  • 패키지에 대한 간략한 설명.


list-packages
명령어는 네트워크로 접근하여 패키지 아카이브 서버로부터 이용할 수 있는 패키지의 목록을 검색한다. 네트워크를 이용할 수 없다면 가장 최근에 검색한 목록으로 돌아간다.


패키지 메뉴에서는 다음 명령어를 이용할 수 있다:


h
패키지 메뉴를 사용하는 방법을 요약한 간략한 메시지를 출력한다(
package-menu-quick-help
).


?
RET
C-h p 명령어가 표시하는 도움말 창과 유사하게 (408 페이지의 32장 [패키지(Packages)] 참고) 현재 행에 패키지에 대한 도움말 버퍼를 표시한다(
package-menu-describe-package
).


i
현재 행에 설치할 패키지를 마크한다(
package-menu-mark-install
). 패키지 상태가 '
available
' 일 경우 이는 행 시작에 '
I
' 문자를 추가하고, x (아래 참고)를 입력하면 패키지를 다운로드하여 설치할 것이다.


d
현재 행에 삭제할 패키지를 마크한다(
package-menu-mark-delete
). 패키지 상태가 '
installed
' 일 경우 이는 행 시작에 '
D
' 문자를 추가하고, x (아래 참고)를 입력하면 패키지를 삭제할 것이다. 패키지 삭제가 무엇을 수반하는지에 관한 정보는 411 페이지의 32.3절 [패키지 파일(Package Files)]을 참고한다.


u
i 또는 d 명령어에 의해 이전에 현재 라인으로 추가된 설치 또는 삭제 마크를 제거한다.


U
"업그레이드" 에 새로 이용할 수 있는 버전이 있는 모든 패키지를 마크한다(
package-menu-mark-upgrades
). 이는 새로 이용 가능한 버전에는 설치 마크를, 오래 전에 설치된 버전에는 삭제 마크를 놓는다.


x
i
로 마크된 모든 패키지와 그 의존성을 다운로드하여 설치하고, d (
package-menu-execute
) 로 마크된 모든 패키지를 삭제한다. 마크 역시 삭제한다.


r
패키지 목록을 새로 고침한다(
package-menu-refresh
). 이는 패키지 아카이브로부터 이용할 수 있는 패키지의 목록을 다시 검색하여 패키지 목록을 다시 계산한다.


f
패키지 목록을 필터링한다(
package-menu-filter
). 이는 키워드의 입력을 요한 후 (예: '
games
') 해당 키워드와 관련된 패키지만 표시한다. 전체 패키지 목록을 복구하려면
q
를 입력한다.


예를 들어 사용자는 패키지에서 i 를 입력한 후 x 를 입력하면 해당 패키지를 설치할 수 있다.


패키지 설치(Package Installation)

패키지는 패키지 메뉴를 이용해 가장 간편하게 설치되지만 (408 페이지의 32.1절 [패키지 메뉴(Package Menu)] 참고) M-x package-install 명령어를 이용할 수도 있다. 이는 '
available
' 상태로 된 패키지명의 입력을 요구한 다음 그것을 다운로드하여 설치한다.


패키지는 다른 패키지의 설치를 필요로 할 수도 있는데 그러한 패키지가 제공하는 기능에 의존하기 때문이다. Emacs가 그러한 패키지를 설치할 때는 이미 설치되지 않았지만 필요로 하는 패키지를 자동으로 다운로드하여 설치한다. (필요한 패키지를 어떤 이유로 이용할 수 없을 경우 Emacs는 오류를 보내고 설치를 중단한다.) 패키지의 요구 목록은 도움말 버퍼에 표시된다.


기본적으로 패키지는 Emacs 개발자들이 관리하는 단일 패키지 아카이브에서 다운로드된다. 이는 Emacs에 알려진 패키지 아카이브 목록을 값으로 가진
package-archives
변수에 의해 제어된다. 각 목록 요소는 (
id . location
) 형태를 가져야 하는데 id 는 패키지명이고 location 은 HTTP 주소 또는 패키지 아카이브의 디렉터리명이다. 제 3자의 패키지 아카이브를 사용하길 원할 경우 이 목록을 수정할 수 있지만 사용자에게 책임이 있으므로 자신이 신뢰하는 제 3자의 패키지 아카이브만 사용하도록 한다!


패키지 아카이브의 관리자(maintainer)는 아카이브에 서명(signing)을 통해 패키지에 대한 신뢰를 증가시킬 수 있다. 관리자들은 암호화 키의 private/public 쌍을 생성하고, private 키를 이용해 각 패키지에 대해 서명 파일을 생성한다. Public 키를 이용하면 패키지를 생성한 사람을 확인하고 그것이 수정되지 않았음을 확인하기 위해 서명 파일을 이용할 수 있다. 서명이 유효하다고 해서 악성 패키지가 아니라는 보증은 할 수 없으므로 여전히 주의를 기울여야 한다. 패키지 아카이브는 사용자가 public 키를 어떻게 얻는 지에 대해 지시를 제공한다. 한 가지 방법은
http://pgp.mit.edu/
와 같은 서버에서 키를 다운로드하는 방법이다. Emacs 는
package-user-dir
의 하위디렉터리인 gnupg 에 패키지 키를 보관한다. GNU 패키지 아카이브에 대한 public 키는 Emacs와 함께 배포되어
etc/package-keyring.gpg
에 위치한다. Emacs는 이를 자동으로 사용한다.


사용자 옵션
package-check-signature
nil
이 아닐 경우 Emacs 는 사용자가 패키지를 설치할 때 서명을 검증한다. 옵션이
allow-unsigned
값을 가지더라도 사용자는 서명되지 않은 패키지를 여전히 설치할 수 있다. 패키지를 서명하지 않는 아카이브를 사용할 경우 사용자가 직접
package-unsigned-archives
목록으로 추가할 수 있다.


암호화 키와 서명에 관한 추가 정보는 The GNU Privacy Guard Manual 을 참고한다. Emacs 에는 GNU Privacy Guard 에 대한 인터페이스가 포함되어 있는데, Emacs EasyPG Assistant Manual 의 "EasyPG" 절을 참고한다.


하나 이상의 패키지 아카이브를 활성화하였고 그 중 일부가 동일한 패키지의 다른 버전을 제시할 경우
package-pinned-packages
옵션이 유용하게 사용된다. 패키지/아카이브 쌍을 이 목록으로 추가하여 명시된 패키지가 명시된 아카이브로에서만 다운로드되도록 확보한다.


패키지가 다운로드되어 설치되고 나면 현재 Emacs 세션으로 로딩된다. 패키지의 설치는 Lisp 라이브러리의 로딩과 같지 않아서 (276 페이지의 24.8절 [Lisp 라이브러리(Lisp Libraries)] 참고) 효과가 패키지별로 다양하다. 대부분 패키지는 새로운 명령어를 몇 가지만 이용 가능하도록 만드는 반면 나머지 패키지들은 Emacs 세션에 걸쳐 폭넓은 효과를 미친다. 그와 관련된 정보는 패키지의 도움말 버퍼를 참조한다.


기본적으로 Emacs 는 잇따른 Emacs 세션에 설치된 모든 패키지를 자동으로 로딩한다. 이는 init 파일을 처리하고 나서 Emacs를 시작하면(at startup) 발생한다(437 페이지의 33.4절 [Init 파일(Init File)] 참고). 단, '
-q
' 또는 '
--no-init-file
' 옵션으로 Emacs 를 호출하면 시작할 때 패키지를 로딩하지 않는다(480 페이지의 C.2절 [초기 옵션(Initial Options)] 참고).


자동 패키지 로딩을 비활성화하기 위해서는
package-enable-at-startup
변수를
nil
로 변경한다.


패키지 자동 로딩이 init 파일의 로딩 이후 발생하는 이유는 사용자 옵션이 패키징 시스템에 영향을 미치는 사용자 옵션을 포함해 init 파일을 로딩한 이후 맞춤화된 값만 수신하기 때문이다. 어떤 경우에는 init 파일에 명시적으로 패키지를 로딩하길 원할 것이다(주로 init 파일 내에서 몇몇 다른 코드는 패키지에 의존하기 때문이다). 그런 경우 사용자의 init 파일은
package-initialize
함수를 호출해야 한다.
package-load-list
와 같은 (아래 참고) 관련된 사용자 옵션이
package-initialize
의 호출 이전에 설정되도록 확보하는 것은 사용자에게 달려 있다. init 파일을 처리한 이후에 다시 패키지가 로딩되는 것을 피하려면
package-enable-at-startup
역시
nil
로 설정해야 한다. 아니면 시작 시 패키지 로딩을 완전히 억제하고 M-x package-initialize 명령어를 호출하여 패키지를 수동으로 로딩하길 선택하는 방법도 있다.


패키지 로딩을 좀 더 정밀하게 관리하기 위해서는
package-load-list
변수를 사용할 수 있다. 이는 리스트를 값으로 가져야 한다. (
name version
) 형태의 리스트 요소는 Emacs 에게 name 이라는 패키지의 버전 version 을 로딩하라고 알린다. 여기서 version 은 버전 문자열(특정 패키지 버전에 해당하는),
t
(설치된 버전을 로딩함을 의미), 또는
nil
(어떤 버전도 아님을 의미; 이는 패키지를 "비활성화"하고 로딩을 방지) 중 하나여야 한다. 리스트 요소는 심볼
all
이 될 수도 있는데 이는 다른 리스트 요소들에 의해 명명되지 않은 패키지의 가장 최근 설치 버전을 로딩함을 의미한다. 기본값은
'(all)
이다.


예를 들어
package-load-list
'((muse "3.20")all)
로 설정하면 Emacs 는 '
muse
' 패키지의 3.20 버전만 로딩하고 '
muse
' 가 아닌 패키지가 설치된 버전을 함께 로딩한다. 그 외 설치된 '
muse
' 의 다른 버전은 무시될 것이다. '
muse
' 패키지는 '
held
' 상태로 패키지 메뉴에 열거될 것이다.


패키지 파일과 디렉터리 레이아웃(Packages Files and Directory Layout)

각 패키지는 단일 패키지 파일의 형태로 패키지 아카이브에서 다운로드되며 소스 파일, Emacs Lisp 소스 파일, 또는 다수의 Emacs Lisp 소스 파일 및 기타 파일을 포함하는 tar 파일 중 하나이다. 패키지 파일은 패키지를 설치하는 Emacs 명령어에 의해 자동으로 검색, 처리, 파기된다. 보통 사용자는 패키지를 만들 때가 아니고는 이러한 파일들을 직접 처리할 필요가 없다(The Emacs Lisp Reference Manual 의 "Packaging" 절 참고). 패키지 파일에서 패키지를 직접 설치해야 하는 경우가 생기면 M-x package-install-file 명령어를 사용한다.


패키지가 설치되면 그 내용은
~/.emacs.d/elpa/
의 하위디렉터리에 위치한다(
package-user-dir
변수를 변경하여 해당 디렉터리명을 변경할 수 있다). 패키지 하위디렉터리는
name-version
으로 명명되는데 name 은 패키지명이고 version 은 버전 문자열이다.


package-user-dir
외에 Emacs 는
package-directory-list
에 열거된 디렉터리에 설치된 패키지도 검색한다. 이러한 디렉터리는 Emacs 패키지를 시스템 전반적으로 (system-wide) 이용할 수 있게 만드는 시스템 운영자용으로 만들어졌으며, Emacs 자체는 그곳에 절대 패키지를 설치하지 않는다.
package-directory-list
에 대한 패키지 하위디렉터리는
package-user-dir
에서와 동일한 방식으로 배치된다.


패키지를 삭제하면 (408 페이지의 32.1절 [패키지 메뉴(Package Menu)] 참고) 해당하는 패키지 하위디렉터리의 삭제가 수반된다. 이는
package-user-dir
에 설치된 패키지에만 적용되며, 시스템 전반적인 패키지 디렉터리에 있는 패키지에 작업하라고 알릴 경우 삭제 명령어는 오류를 보낸다.


Notes