summaryrefslogtreecommitdiffstats
path: root/posts/eval-and-compile.mdwn
blob: 6975120280211ca220fb2ce59ddec01757aeb1a4 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
I'm reading up a little on byte-compilation in
[GNU Emacs](http://www.gnu.org/software/emacs/) and I read about just
exactly a feature that I needed.

A while ago, I was working on my init<sup><a class="footref"
name="fnr.1" href="#fn.1">1</a></sup> 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<sup><a class="footref" name="fnr.1.2" href="#fn.1">1</a></sup>
file, but this doesn't help at compile time.  So, ugly as I thought it
was, I added

[[!format el """
(eval-when-compile (package-initialize))
"""]]

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<sup><a
class="footref" name="fnr.2" href="#fn.2">2</a></sup>.

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.

[[!format el """
(eval-and-compile (package-initialize))
"""]]

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<sup><a class="footref" name="fnr.1.3"
href="#fn.1">1</a></sup> file, just to speed up loading during
compilation a little bit.

<div id="footnotes">
<h3 class="footnotes">Footnotes: </h3>
<div id="text-footnotes">
<p class="footnote"><sup><a class="footnum" name="fn.1" href="#fnr.1">1</a></sup> <a href="http://ryuslash.org/dotfiles/emacs/init.html">http://ryuslash.org/dotfiles/emacs/init.html</a>
</p>
<p class="footnote"><sup><a class="footnum" name="fn.2" href="#fnr.2">2</a></sup> Don't Repeat Yourself
</p>
</div>
</div>

[[!meta date="2012-07-27 21:19:00"]]
[[!tag emacs elisp dotfiles coding]]