読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

init-loader el-get package.elで自分の.emacsを大幅に変えた

Emacs

最初の動機は、るびきち氏のメルマガから。

init-loader

init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita

インストールはかんたん。

M-x auto-install init-loader 

init-loader前

で、800行近くあったinit.elは最終的に2行になりました。

$ cloc init.el
       1 text file.
       1 unique file.
       0 files ignored.

http://cloc.sourceforge.net v 1.60  T=0.05 s (19.2 files/s, 24972.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Lisp                             1            170            300            828
-------------------------------------------------------------------------------

init-loader後

$ cloc init.el
       1 text file.
       1 unique file.
       0 files ignored.

http://cloc.sourceforge.net v 1.60  T=0.01 s (112.9 files/s, 225.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Lisp                             1              0              0              2
-------------------------------------------------------------------------------
$ pwd
/Users/shige/.emacs.d
$ tree inits
inits
├── 000load-path.el
├── 01encode.el
├── 01font.el
├── 02server.el
├── 03el-get.el
├── 03melpa.el
├── 49yasnippet.el
├── 50auto-complete.el
├── 50auto-install.el
├── 50autocomplete-java-mode.el
├── 50backupfile.el
├── 50c-mode.el
├── 50cake.el
├── 50css.el
├── 50cua-mode.el
├── 50cucumber.el
├── 50defaultdirectory.el
├── 50delete-white-space.el
├── 50dired-listing-switches.el
├── 50drill-instructor.el
├── 50dropbox.el
├── 50eclipse.el
├── 50eev.el
├── 50elscreen.el
├── 50emacs-init-check.el
├── 50ensime.el
├── 50eshell.el
├── 50exit.el
├── 50find-function.el
├── 50find-grep.el
├── 50flymake.el
├── 50flyspell.el
├── 50fsharp-mode.el
├── 50gist.el
├── 50git-commit.el
├── 50grep-find.el
├── 50growlnotify.el
├── 50hatena-diary.el
├── 50hexrgb.el
├── 50highlight.el
├── 50hiline.el
├── 50historyf.el
├── 50html.el
├── 50iimage-mode.el
├── 50indent-tabs-mode.el
├── 50inertial-scroll.el
├── 50init.el
├── 50iterm.el
├── 50jedi.el
├── 50js-mode.el
├── 50json-mode.el
├── 50juante.el
├── 50less-mode.el
├── 50linum-mode.el
├── 50lispxmp.el
├── 50list-hexadecimal-colors-display.el
├── 50mac-finder.el
├── 50mac.el
├── 50magit.el
├── 50markdown-mode.el
├── 50menubar.el
├── 50moccur.el
├── 50mode-info.el
├── 50motion-mode.el
├── 50newline-and-indent.el
├── 50ns-pop-up-frames.el
├── 50open-junk.el
├── 50open.el
├── 50org-mode.el
├── 50php-mode.el
├── 50quickrun.el
├── 50rakefile.el
├── 50require-final-newline.el
├── 50rspec-mode.el
├── 50ruby-end.el
├── 50ruby-mode.el
├── 50scala-mode2.el
├── 50scratch-data.el
├── 50scratch-log.el
├── 50scroll-bar-mode.el
├── 50scroll.el
├── 50scss-mode.el
├── 50search-web.el
├── 50show-paren.el
├── 50simplenote.el
├── 50slime.el
├── 50sql-mode.el
├── 50submodule.el
├── 50tempbuf.el
├── 50text-mode.el
├── 50text-scale-adjust.el
├── 50toolbar.el
├── 50turn-off-auto-fill.el
├── 50twittering-mode.el
├── 50uniquify.el
├── 50view-minor-mode.el
├── 50wc-mode.el
├── 50wdired.el
├── 50yen-mark.el
├── 50zenkaku.el
├── 51flymake.el
├── 90anything-helm.el
├── 91my-hatena.el
├── 92-my-alpha.el
└── 999cedet.el

init-loaderを使うことにより、

  • エラーが起きたときにどこがダメだったかわかりやすくなる
  • 設定の追加も細かくファイルを追加すればいい
  • 有効や無効の切り替えも楽

といった利点があるね。

el-getとpackage.el

elispをpackageとel-get両方で管理する - $shibayu36->blog;

えっと、今までgit submoduleでパッケージを管理していたんだけど、
このgit submoduleが微妙に曲者で、addするのはいいんだけど削除するのが
微妙に手間……

試しに追加してみたけどやっぱりいらないってなったときが本当に面倒だったりする。

なので、submoduleで管理していたパッケージをpackage.elとel-getでどうにかすることにしました。

package.elについてはそんなに説明不要ですが、
el-getについては、ちょっと説明を。

レシピふぁいるを書いてアレするだけです。

$ tree recipes
recipes
├── auto-java-complete.rcp
├── cucumber.rcp
├── emacs-cake.rcp
├── emacs-cake2.rcp
├── emacs-eclipse.rcp
└── helm.rcp

helm.rcp

(:name helm
       :type git
       :url "https://github.com/emacs-helm/helm.git")

まあこんな感じで。かなり眠いです。