Emacsパッケージ管理
Evil化したことによりエディタとしての力を取り戻したEmacsだが物足りない部分が多々あるので、これからVimに変わってやってもいいぜ。くらいに成長させようと思う。
ググってると、package.elとel-getを併用するのがいい感じな気がしたのでその方法でパッケージを管理します。
package.el
emacs24からはデフォルトでパッケージ管理ツールpackage.elが使える。
package.elから参照できるパッケージを増やすために以下のコードをinit.elの出来るだけはじめの方に書いておきます。
;; Package Manegement
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(opackage-initialize)
M-x list-packageで開かれるバッファから、’i’でパッケージを選択して’x’でインストールすることができます。
正直手動でやんの!?って感じなので、いい方法を探したところありました。
init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita [キータ]
init.elに以下のコードを追加します。
;; auto install
(require 'cl)
(defvar installing-package-list
'(
;; package list
evil
evil-leader
evil-numbers
evil-nerd-commenter
))
(let ((not-installed (loop for x in installing-package-list
when (not (package-installed-p x))
collect x)))
(when not-installed
(package-refresh-contents)
(dolist (pkg not-installed)
(package-install pkg))))
;; package list以下にパッケージ名をリストアップすれば起動時にインストールされていなかった場合、自動でインストールしてくれます。
el-get
el-getのインストールは*scratch*でelispを実行することで行う。
C-x b *scratch*を入力して表示されたバッファに以下をコピー
(url-retrieve
"https://raw.github.com/dimitri/el-get/master/el-get-install.el"
(lambda (s)
(goto-char (point-max))
(eval-print-last-sexp)))
最後の行でC-x C-eをすると実行されインストール。
emacsすげー。elisp処理系的に。
M-x el-get-list-packagesでrecipe一覧を表示できるので’i’で選択’x’でインストール。
mitri/el-get · GitHub によると以下の設定を書いておくといいらしい。
最新のパッケージに自動で更新してくれるとかそういうことだろうか?
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil 'noerror)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.github.com/dimitri/el-get/master/el-get-install.el")
(goto-char (point-max))
(eval-print-last-sexp)))
(el-get 'sync)
外部パッケージの追加
el-get-sourcesを書くとrecipeを追加できる。
;;; define el-get repository
(setq el-get-sources
'(
(:name open-github-from-here
:type github
:description "open github from here"
:pkgname "shibayu36/emacs-open-github-from-here"
:branch "development")
(:name anything-git-files
:type github
:pkgname "tarao/anything-git-files-el")
))
GitHubリポジトリの場合が多いので、基本的に2つ目の設定のように書いておけばいい気がする。
el-getリポジトリの自動更新
;; auto install el-get.el
(defvar my/el-get-packages
'(
open-github-from-here
anything-git-files
)
"A list of packages to install from el-get at launch.")
(el-get 'sync my/el-get-packages)
こんな感じのinit.elになった
;;
;; init.el
;;
;; Language.
(set-language-environment 'Japanese)
;; Coding system.
(set-default-coding-systems 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
;; Package Manegement
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)
;; usable evil
(require 'evil)
(evil-mode 1)
;; define el-get repository
(setq el-get-sources
'(
(:name evil-plugins
:type github
:pkgname "tarao/evil-plugins")
))
;; el-get basic setting
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil 'noerror)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.github.com/dimitri/el-get/master/el-get-install.el")
(let (el-get-master-branch)
(goto-char (point-max))
(eval-print-last-sexp))))
(el-get 'sync)
;; auto install package.el
(require 'cl)
(defvar installing-package-list
'(
;; package list
evil
evil-leader
evil-numbers
evil-nerd-commenter
))
(let ((not-installed (loop for x in installing-package-list
when (not (package-installed-p x))
collect x)))
(when not-installed
(package-refresh-contents)
(dolist (pkg not-installed)
(package-install pkg))))
;; auto install el-get.el
(defvar my/el-get-packages
'(
evil-plugins
)
"A list of packages to install from el-get at launch.")
(el-get 'sync my/el-get-packages)
;;
;; Plugin
;;