summaryrefslogtreecommitdiffstats
path: root/blog/blog-2012-07-27-2119.org
blob: d30e1c7ec2142a7895cbbdf477a389552b56ec59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#+TITLE: eval-and-compile

I'm reading up a little on byte-compilation in [[emacs][GNU Emacs]] and I read
about just exactly a feature that I needed.

A while ago, I was working on my
init[fn:init:[[http://ryuslash.org/dotfiles/emacs/init.html]]] file,
adding some ~auto-complete~ code since I wanted to try it again.  I
noticed that, because ~auto-complete~ is installed through ~package~, it
couldn't load the appropriate files at compile time.

I know that =package-initialize= should be called before calling or
using any ~package~-installed functions and I have it in my
init[fn:init] file, but this doesn't help at compile time.  So, ugly
as I thought it was, I added

#+begin_src emacs-lisp
  (eval-when-compile (package-initialize))
#+end_src

just above the call to the ~auto-complete~ functions.  I hated having to
do that, I know it's just one line, but its not at all DRY[fn::Don't
Repeat Yourself].

Just now, though, I read about =eval-and-compile=, and according to the
documentation in the elisp reference manual, it should do exactly what
I want, eval both when running and when compiling.

#+begin_src emacs-lisp
  (eval-and-compile (package-initialize))
#+end_src

I'm currently trying it out, I just tested it once and it seems to
work like a charm.

/Of course/, this might never have been an issue if I didn't use ~emacs
-Q~ to compile my init[fn:init] file, just to speed up loading during
compilation a little bit.