-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex-41.html
570 lines (537 loc) · 68.3 KB
/
index-41.html
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Random musings on books, code, and tabletop games.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Lacking Natural Simplicity (old posts, page 41) | Lacking Natural Simplicity</title>
<link href="assets/css/all-nocdn.css" rel="stylesheet" type="text/css">
<link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml">
<link rel="alternate" type="application/atom+xml" title="Atom" href="feed.atom">
<link rel="canonical" href="https://tkurtbond.github.io/index-41.html">
<link rel="prev" href="index-42.html" type="text/html">
<link rel="next" href="index-40.html" type="text/html">
<!--[if lt IE 9]><script src="assets/js/html5.js"></script><![endif]--><link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Crimson+Text&family=Lato&family=IBM+Plex+Mono" rel="stylesheet">
</head>
<body>
<a href="#content" class="sr-only sr-only-focusable">Skip to main content</a>
<!-- Menubar -->
<div class="blog-masthead">
<div class="container">
<!-- This keeps the margins nice -->
<nav class="blog-nav" role="navigation"><a href="index.html" class="blog-nav-item">Home</a>
<a href="archive.html" class="blog-nav-item">Archives</a>
<a href="categories/index.html" class="blog-nav-item">Tags & Categories</a>
<a href="rss.xml" class="blog-nav-item">RSS feed</a>
<a href="feed.atom" class="blog-nav-item">Atom feed</a>
</nav>
</div>
<!-- /.container -->
</div>
<!-- End of Menubar -->
<div class="container" id="content" role="main">
<div class="body-content">
<div class="blog-header">
<h1 class="blog-title">
<a href="https://tkurtbond.github.io/">
<span id="blog-title">Lacking Natural Simplicity</span>
</a>
</h1>
<p class="lead blog-description">Random musings on books, code, and tabletop games.</p>
</div>
<!--Body content-->
<div class="row">
<div class="col-sm-8 blog-main">
<div class="postindex">
<article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/28/iron-man/" class="u-url">(Relatively) Recent Viewing: Iron Man</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/28/iron-man/" rel="bookmark"><time class="published dt-published" datetime="2008-08-28T17:45:45-05:00" title="2008-08-28 17:45">2008-08-28 17:45</time></a></p>
<p class="commentline"> <a href="posts/2008/08/28/iron-man/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/28/iron-man.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I saw Iron Man a while back, before I saw <em>Batman: the Dark Knight</em>.
I actually read Iron Man decades ago as a preteen and teen, but can't
claim any more than a casual acquaintance. In any case, I ended up
liking the movie. It didn't make some of the mistakes I thought it might. I'm looking forwarad to the sequel.</p>
<p>I don't see many movies in the theatres any more. I ought to keep
better track of which ones I've seen.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/comics/" rel="tag">comics</a></li>
<li><a class="tag p-category" href="categories/movies/" rel="tag">movies</a></li>
<li><a class="tag p-category" href="categories/science-fiction/" rel="tag">science fiction</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/23/t.a.s-savage-worlds-game-part-2/" class="u-url">Actual Play: T.A.'s Savage Worlds Game, part 2</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/23/t.a.s-savage-worlds-game-part-2/" rel="bookmark"><time class="published dt-published" datetime="2008-08-23T00:00:00-05:00" title="2008-08-23 00:00">2008-08-23 00:00</time></a></p>
<p class="commentline"> <a href="posts/2008/08/23/t.a.s-savage-worlds-game-part-2/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/23/t.a.s-savage-worlds-game-part-2.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>This was the second, and concluding, session in T.A.'s Savage Worlds
game. L.B. was in from Kentucky and B.B. and D.B. were down from
Morgantown, so along with T.A., E.A., and M.A. we had a full table.
Moreover, M.B., who is B.B. and D.B.'s much younger brother, also
wanted to play. He's a bit too young to understand how the game
works, though, so it was a bit frustrating for him and the others. We
worked through it and it turned out ok.</p>
<p>T.A. GMed. E.A. played Eureka, the healer. L.B. played Alisia, an
archer. D.B. played Surt, the combat mage. I played Loki, the sneaky
guy, sharing him with M.B.. M.A. played Ragnar, the wizard. and
B.B. played Fritz, an archer.</p>
<p>We decided we had gone back to town after the previous session and
picked up a couple of friends. We easily finished off the rest of the
goblin clan, picking up a couple more invented-on-the-spot magic
items. We continued to have it in for the dire wolves, and Ragnar
exploded a couple of them with his magic. The villagers were glad to
be freed from the goblin raiding and gladly paid us as they had
promised.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/actual-play/" rel="tag">actual-play</a></li>
<li><a class="tag p-category" href="categories/fantasy/" rel="tag">fantasy</a></li>
<li><a class="tag p-category" href="categories/kids/" rel="tag">kids</a></li>
<li><a class="tag p-category" href="categories/rpg/" rel="tag">rpg</a></li>
<li><a class="tag p-category" href="categories/savage-worlds/" rel="tag">savage worlds</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/19/batman-the-dark-knight/" class="u-url">Batman: The Dark Knight</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/19/batman-the-dark-knight/" rel="bookmark"><time class="published dt-published" datetime="2008-08-19T22:00:00-05:00" title="2008-08-19 22:00">2008-08-19 22:00</time></a></p>
<p class="commentline"> <a href="posts/2008/08/19/batman-the-dark-knight/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/19/batman-the-dark-knight.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I liked the movie a lot. I'd rate it at 4 stars, possibly higher. I
was never bored during the movie, and it didn't feel too long to me.
I thought the violence was appropriate for the Joker. There <em>were</em>
too many false endings.</p>
<p>There were two particular things about the movie that I didn't like.</p>
<p>First, and of less importantance, I don't think there was enough
development of Harvey Dent's psyche to make his actions at the end
believable. For me to believe that, I think the viewer (though not
Gotham's populace, obviously) has to be made aware that Dent has some
serious psychological problems which in the end cause him to crack and
become seriously insane. I think the coin-flipping in the first part
of the movie is not enough, because the coin-toss is <em>fixed</em>. I don't see
enough of his pysche to see how he goes from the completely non-random
fixed coin to actually letting the now blackened coin randomly decide
the fate of innocent children. Mobsters, yes; innocent children who
could not possibly be to blame, no. At first I wasn't convinced that
his going after Gordon and Batman and letting the Joker go was
plausible, either, but I can understand how Dawes's death and their
involvement in it could send him after Gordon and Batman, and if he's
going to be consistent about the coin I can barely see him letting the
Joker off. But after Gordon's family? No.</p>
<p>Second, and more importantly, I think having Batman and Gordon decide
for Batman to take the blame for the death of those Dent killed (and
Dent?) plays into the tendency of governments and officials to lie to
its citizens "to keep them safe" and in particular to lie to them
because the government doesn't believe they can deal with the horrible
truth. I'm not convinced that Batman would really believe that the
citizens of Gothom City would be so traumatized by Dent's breakdown
and madness that the city would be seriously impaired, and that even
if he did I'm not convinced that he would see it as the correct
course. Lying to the public "to keep them safe" just makes the public
powerless, and I think Batman isn't about making the public powerless,
he's about protecting them when their normal protections aren't
working, for whatever reason. He's not going to keep the public weak
just because he likes being a vigilante, he's going to help make them
strong.</p>
<p>I've read Batman comics and I own the Batman RPG (it was sort of an
intro to the Mayfair DC Heroes game) though I've never played it, but
I'm in no way a Batman scholar, so I may be misinterpreting things, or
perhaps it's just that Batman has varied so much over the years that
you can find support for any view, but this is what Batman looks like
to me. I don't see Batman deciding to take the blame for those
murders just to coddle the public.</p>
<p>Now, the whole idea of the perviously adoring public turning against
Batman does lead the story into interesting places, but I think that
this could easily happen anyway. For instance, if a a charismatic
reporter or official carries on a campaign emphasising the negative
aspects of Batman's vigilantism - can you say "collateral damage"? - I
could easily see the crowd turning against Batman. (Although that
might have too many echos of Peter Parker and J. Jonah Jamison.) But
I think some other plausible method could have been found.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/movies/" rel="tag">movies</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/19/election-choice/" class="u-url">Election Choice</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/19/election-choice/" rel="bookmark"><time class="published dt-published" datetime="2008-08-19T10:33:55-05:00" title="2008-08-19 10:33">2008-08-19 10:33</time></a></p>
<p class="commentline"> <a href="posts/2008/08/19/election-choice/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/19/election-choice.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I think that one of the main problems with U.S. elections is that in
many cases we don't actually have much choice. The way that
U.S. elections are organized it is very difficult to vote for anyone
other than a Republican or a Democrat. In many states getting on the
ballot is difficult for other parties, and even in the states where
it's easier the whole structure is set up to favour the Democrats and
Replublicans.</p>
<p>To fix this we need to level the playing field by making it easier for
alternative parties to get on the ballot, ensure that anybody can vote
for anybody on the ballot in the primaries without penalty —
regardless of political affiliation, allow the citizens to vote
<em>against</em> particular politicians, and eliminate the ability of
political parties to select candidates that contradict the popular
vote.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/politics/" rel="tag">politics</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/17/t.a.s-savage-worlds-game-part-1/" class="u-url">Actual Play: T.A.'s Savage Worlds Game, Part 1</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/17/t.a.s-savage-worlds-game-part-1/" rel="bookmark"><time class="published dt-published" datetime="2008-08-17T19:30:00-05:00" title="2008-08-17 19:30">2008-08-17 19:30</time></a></p>
<p class="commentline"> <a href="posts/2008/08/17/t.a.s-savage-worlds-game-part-1/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/17/t.a.s-savage-worlds-game-part-1.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<section id="background"><h2>Background</h2>
<p>T.A. has been coming up with maps and ideas for roleplaying games for
a while now, and earlier this week while we were talking about RPGs he
said he had a Savage Worlds game he wanted to run. I suggested we do
it today, Saturday, in the afteroon, and that's what we did.</p>
<p>His sister E.A. and brother M.A were the only ones of the <a class="reference external" href="categories/cat_gaming/actual-play/the-kids/">kids</a>
around, and they both wanted to play. We decided to play outside, at
a small picnic table in the shade, on top of a large blanket so
dropped dice would be easy to find. (T.A.'s idea, and a very good
one.) It took a while to get everything set up, and the kids were a
little impatient; I can't blame them. But we finally got going. I
brought up my Savage Worlds GM Screen and my Flip-Mats and dry-erase
pens. E.A. and I got an extra benny each for shuffling cards, and
M.A. got a benny for helping set up the table.</p>
<p>T.A. had made several pregenerated characters, so we had a good
selection to choose from. E.A. went for a healer again, M.A. picked a
wizard, and I picked out a theif and combat mage. E.A. came up with a
name for her character, Eureka, but M.A. was stuck, so I asked if he
wanted help, and he did. We ended up naming his wizard Ragnar, so I
stuck with that for a theme and named my thief Loki and my fire-themed
combat mage Surt.</p>
<p>T.A. had made a map of a cavern/dungeon and decided on the monster
stats and locations, but beyond that hadn't written anything down. He
had thought about what he wanted a lot, though, and had it all in his
head.</p>
</section><section id="actual-play"><h2>Actual Play</h2>
<p>T.A. told us that our characters had seen notices posted that a small,
nearby village was seeking adventurers to help with deal with goblin
raiders. A short time later were were talking with the headman of the
village, who after some talking promised us 50 gp each in advance and
another 50 gp each after the job was done. A short time later we were
headed out to the trail the goblins took after their raids.</p>
<p>The trail eventually lead up to the base of a hill and an cavern
entrance.</p>
<p>E.A. aced Eureka's Notice roll as we snuck into the entrance and
noticed something weird about the wall. It turned out to be a secret
door, leading down a short passage and through another secret door
into a room with a giant spider just settling down for a nap.
Luckily, Loki had eased the 2nd secret door open quietly, so Ragnar
tried to cast a Bolt at the spider. Unfortunately, M.A. rolled snake
eyes (ones on both his Spellcasting and his Wild Die), and woke the
spell up. Next round he spent a benny to get rid of the shaken and
aced his Spellcasting roll, aced the damage roll, and so much for the
spider.</p>
<p>After that we worked our way through a guardroom and a kitchen, each
with goblins and dire wolves. As it turned out, the guards had
screamed loud enough for the cook to hear something, but we sent in
Ragnar in rat form and he saw the layout of the room and reported back
to us. We burst in the door, catching the dire wolf with it and
stunning it. The cook died fast, but the dire wolf took forever to
kill due to some really lucky rolls. We had it stunned at least 3
times, but could never land another until Surt got the Joker, took a
multi-action penalty to cast the spell smite and attack in the same
round and aced his Spellcasting roll, killing the dire wolf with one
massive blow. He immediately set about skinning the wolf, to take the
hide back and have it tanned. And that's were we stopped.</p>
</section><section id="reflections"><h2>Reflections</h2>
<p>T.A. did several neat things. Whenever a PC made a <strong>really</strong> good
search roll and found something magical, T.A. rolled to see which PC
the magic item would best suit, then made up a nifty magic item on the
spot for that character. The healer got a Staff of Healing that
couldn't be used for attacking, but would give the healer a bonus on
any healing related roll. The combat mage ended up with a longsword
that added a bonus to the damage for his Smite power. Later, when
Surt wanted the hide of the dire wolf that he finally killed after it
had given the party a long fight, T.A. said that when it was tanned it
would give him +1 Armor to attacks from the back. Neither the rolling
for who the magic item would suit nor the making up the magic items on
the spot was anything he'd seen me do, but it worked well, he came up
with nifty magic items that weren't overpowering, and it was neat: no
boring “you find a +1 sword” here. In some ways I think it was very
“Old School”, in a good way. (I'll talk about “Old School” some other
time.)</p>
</section><nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/actual-play/" rel="tag">actual-play</a></li>
<li><a class="tag p-category" href="categories/fantasy/" rel="tag">fantasy</a></li>
<li><a class="tag p-category" href="categories/kids/" rel="tag">kids</a></li>
<li><a class="tag p-category" href="categories/rpg/" rel="tag">rpg</a></li>
<li><a class="tag p-category" href="categories/savage-worlds/" rel="tag">savage worlds</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/17/books-about-building-part-1/" class="u-url">Books about Building: Part 1</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/17/books-about-building-part-1/" rel="bookmark"><time class="published dt-published" datetime="2008-08-17T12:18:40-05:00" title="2008-08-17 12:18">2008-08-17 12:18</time></a></p>
<p class="commentline"> <a href="posts/2008/08/17/books-about-building-part-1/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/17/books-about-building-part-1.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I got interested in the idea of building a house when I stumbled
across cob houses on the web.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/building/" rel="tag">building</a></li>
<li><a class="tag p-category" href="categories/cob/" rel="tag">cob</a></li>
<li><a class="tag p-category" href="categories/natural-building/" rel="tag">natural building</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/16/linumel/" class="u-url">linum.el</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/16/linumel/" rel="bookmark"><time class="published dt-published" datetime="2008-08-16T03:33:26-05:00" title="2008-08-16 03:33">2008-08-16 03:33</time></a></p>
<p class="commentline"> <a href="posts/2008/08/16/linumel/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/16/linumel.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I found a very useful <a class="reference external" href="http://www.gnu.org/software/emacs/">Emacs</a> minor mode today: <a class="reference external" href="http://stud4.tuwien.ac.at/~e0225855/linum/linum.html">linum.el</a>, which puts line
numbers at the beginning of all the lines in a buffer.</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/emacs/" rel="tag">emacs</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/" class="u-url">Fun with Lisp: notf and cdrf</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/" rel="bookmark"><time class="published dt-published" datetime="2008-08-15T18:59:36-05:00" title="2008-08-15 18:59">2008-08-15 18:59</time></a></p>
<p class="commentline"> <a href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/15/fun-with-lisp-notf-and-cdrf.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>I actually use these in Emacs Lisp, for which you'd need a
<code>(require 'cl))</code>, but the <code class="docutils literal"><span class="pre">define-modify-macro</span></code> is
originally from Common Lisp.</p>
<p>These are trivial, but useful.</p>
<div class="code"><pre class="code common-lisp"><a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-1" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-1" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-1"></a><span class="p">(</span><span class="nb">define-modify-macro</span><span class="w"> </span><span class="nv">notf</span><span class="w"> </span><span class="p">(</span><span class="k">&rest</span><span class="w"> </span><span class="nv">args</span><span class="p">)</span><span class="w"> </span><span class="nb">not</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-2" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-2" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-2"></a><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="no">nil</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-3" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-3" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-3"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="nv">x</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-4" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-4" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-4"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> t</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-5" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-5" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-5"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="nv">x</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-6" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-6" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-6"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> nil</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-7" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-7" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-7"></a><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="err">‘</span><span class="p">(</span><span class="nv">a</span><span class="w"> </span><span class="p">(</span><span class="nv">b</span><span class="w"> </span><span class="p">(</span><span class="nv">c</span><span class="w"> </span><span class="no">t</span><span class="p">))))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-8" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-8" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-8"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="p">(</span><span class="nb">car</span><span class="w"> </span><span class="p">(</span><span class="nb">cdr</span><span class="w"> </span><span class="p">(</span><span class="nb">cadadr</span><span class="w"> </span><span class="nv">x</span><span class="p">))))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-9" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-9" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-9"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> (a (b (c nil)))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-10" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-10" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-10"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="p">(</span><span class="nb">car</span><span class="w"> </span><span class="p">(</span><span class="nb">cdr</span><span class="w"> </span><span class="p">(</span><span class="nb">cadadr</span><span class="w"> </span><span class="nv">x</span><span class="p">))))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-11" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-11" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-11"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> (a (b (c t)))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-12" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-12" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-12"></a><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="nv">[1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="no">t</span><span class="w"> </span><span class="nv">5]</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-13" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-13" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-13"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="p">(</span><span class="nb">aref</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-14" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-14" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-14"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> [1 2 3 nil 5]</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-15" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-15" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-15"></a><span class="p">(</span><span class="nv">notf</span><span class="w"> </span><span class="p">(</span><span class="nb">aref</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-16" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-16" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-16"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> [1 2 3 t 5]</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-17" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-17" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-17"></a>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-18" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-18" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-18"></a><span class="p">(</span><span class="nb">define-modify-macro</span><span class="w"> </span><span class="nv">cdrf</span><span class="w"> </span><span class="p">(</span><span class="k">&rest</span><span class="w"> </span><span class="nv">args</span><span class="p">)</span><span class="w"> </span><span class="nb">cdr</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-19" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-19" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-19"></a><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="err">‘</span><span class="p">(</span><span class="ss">:a</span><span class="w"> </span><span class="ss">:b</span><span class="w"> </span><span class="ss">:c</span><span class="w"> </span><span class="ss">:d</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">3</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-20" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-20" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-20"></a><span class="p">(</span><span class="nb">defun</span><span class="w"> </span><span class="nv">frob</span><span class="w"> </span><span class="p">(</span><span class="kt">keyword</span><span class="p">)</span><span class="w"> </span><span class="err">‘</span><span class="nv">nothing-now</span><span class="p">)</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-21" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-21" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-21"></a><span class="p">(</span><span class="nv">while</span><span class="w"> </span><span class="p">(</span><span class="nb">member</span><span class="w"> </span><span class="p">(</span><span class="nb">car</span><span class="w"> </span><span class="nv">x</span><span class="p">)</span><span class="w"> </span><span class="err">‘</span><span class="p">(</span><span class="ss">:a</span><span class="w"> </span><span class="ss">:b</span><span class="w"> </span><span class="ss">:c</span><span class="w"> </span><span class="ss">:d</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-22" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-22" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-22"></a><span class="w"> </span><span class="p">(</span><span class="nv">frob</span><span class="w"> </span><span class="p">(</span><span class="nb">car</span><span class="w"> </span><span class="nv">x</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-23" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-23" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-23"></a><span class="w"> </span><span class="p">(</span><span class="nv">cdrf</span><span class="w"> </span><span class="nv">x</span><span class="p">))</span>
<a id="rest_code_cb713c1d3b244e05b6a9eaadc2764821-24" name="rest_code_cb713c1d3b244e05b6a9eaadc2764821-24" href="posts/2008/08/15/fun-with-lisp-notf-and-cdrf/#rest_code_cb713c1d3b244e05b6a9eaadc2764821-24"></a><span class="nv">x</span><span class="w"> </span><span class="c1">;;=> (1 2 3)</span>
</pre></div>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/common-lisp/" rel="tag">common lisp</a></li>
<li><a class="tag p-category" href="categories/emacs-lisp/" rel="tag">emacs lisp</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/15/fun-with-emacs-eval-after-load/" class="u-url">Fun with Emacs: eval-after-load*</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/15/fun-with-emacs-eval-after-load/" rel="bookmark"><time class="published dt-published" datetime="2008-08-15T18:54:39-05:00" title="2008-08-15 18:54">2008-08-15 18:54</time></a></p>
<p class="commentline"> <a href="posts/2008/08/15/fun-with-emacs-eval-after-load/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/15/fun-with-emacs-eval-after-load.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>Ok, suppose you want to evaluate a particular bit of code
after emacs loads a particular emacs-lisp file, but you want to pass
values of local variables into that code. The function
<code class="docutils literal"><span class="pre">eval-after-load</span></code> makes you quote the expression and doesn't
allow passing values into the expression. How about this?</p>
<div class="code"><pre class="code emacs-lisp"><a id="rest_code_407bf8c8524746f5b3093f5633100b66-1" name="rest_code_407bf8c8524746f5b3093f5633100b66-1" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-1"></a><span class="p">(</span><span class="nb">require</span><span class="w"> </span><span class="ss">'cl</span><span class="p">)</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-2" name="rest_code_407bf8c8524746f5b3093f5633100b66-2" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-2"></a><span class="p">(</span><span class="nv">defmacro*</span><span class="w"> </span><span class="nv">eval-after-load*</span><span class="w"> </span><span class="p">(</span><span class="nv">file</span><span class="w"> </span><span class="nv">varlist</span><span class="w"> </span><span class="kp">&rest</span><span class="w"> </span><span class="nv">body</span><span class="p">)</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-3" name="rest_code_407bf8c8524746f5b3093f5633100b66-3" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-3"></a><span class="w"> </span><span class="s">"Like </span><span class="ss">`eval-after-load'</span><span class="s">, but bind variables according to VARLIST in</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-4" name="rest_code_407bf8c8524746f5b3093f5633100b66-4" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-4"></a><span class="s">the current environment of the </span><span class="ss">`eval-after-load'</span><span class="s"> expression, not the</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-5" name="rest_code_407bf8c8524746f5b3093f5633100b66-5" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-5"></a><span class="s">environment when BODY is evaluated. This allows easy passing of values</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-6" name="rest_code_407bf8c8524746f5b3093f5633100b66-6" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-6"></a><span class="s">into BODY.</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-7" name="rest_code_407bf8c8524746f5b3093f5633100b66-7" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-7"></a><span class="s">Each element of VARLIST is a symbol (which is bound to the current value</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-8" name="rest_code_407bf8c8524746f5b3093f5633100b66-8" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-8"></a><span class="s">of that symbol) or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-9" name="rest_code_407bf8c8524746f5b3093f5633100b66-9" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-9"></a><span class="s">value of VALUEFORM in the environment of the </span><span class="ss">`eval-after-load'</span><span class="s"> expression."</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-10" name="rest_code_407bf8c8524746f5b3093f5633100b66-10" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-10"></a><span class="w"> </span><span class="o">`</span><span class="p">(</span><span class="nv">eval-after-load</span><span class="w"> </span><span class="o">,</span><span class="nv">file</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-11" name="rest_code_407bf8c8524746f5b3093f5633100b66-11" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-11"></a><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="o">,</span><span class="p">(</span><span class="nb">loop</span><span class="w"> </span><span class="nv">for</span><span class="w"> </span><span class="nv">v</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">varlist</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-12" name="rest_code_407bf8c8524746f5b3093f5633100b66-12" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-12"></a><span class="w"> </span><span class="nv">collect</span><span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">symbolp</span><span class="w"> </span><span class="nv">v</span><span class="p">)</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-13" name="rest_code_407bf8c8524746f5b3093f5633100b66-13" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-13"></a><span class="w"> </span><span class="o">`</span><span class="p">(</span><span class="o">,</span><span class="nv">v</span><span class="w"> </span><span class="o">,</span><span class="p">(</span><span class="nf">eval</span><span class="w"> </span><span class="nv">v</span><span class="p">))</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-14" name="rest_code_407bf8c8524746f5b3093f5633100b66-14" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-14"></a><span class="w"> </span><span class="o">`</span><span class="p">(</span><span class="o">,</span><span class="p">(</span><span class="nf">car</span><span class="w"> </span><span class="nv">v</span><span class="p">)</span><span class="w"> </span><span class="o">,</span><span class="p">(</span><span class="nf">eval</span><span class="w"> </span><span class="p">(</span><span class="nv">cadr</span><span class="w"> </span><span class="nv">v</span><span class="p">))))</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-15" name="rest_code_407bf8c8524746f5b3093f5633100b66-15" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-15"></a><span class="w"> </span><span class="nv">into</span><span class="w"> </span><span class="nv">new-varlist</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-16" name="rest_code_407bf8c8524746f5b3093f5633100b66-16" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-16"></a><span class="w"> </span><span class="nv">finally</span><span class="w"> </span><span class="nb">return</span><span class="w"> </span><span class="nv">new-varlist</span><span class="p">)</span><span class="w"> </span><span class="o">,@</span><span class="nv">body</span><span class="p">)))</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-17" name="rest_code_407bf8c8524746f5b3093f5633100b66-17" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-17"></a><span class="p">(</span><span class="nf">put</span><span class="w"> </span><span class="ss">'eval-after-load*</span><span class="w"> </span><span class="ss">'lisp-indent-function</span>
<a id="rest_code_407bf8c8524746f5b3093f5633100b66-18" name="rest_code_407bf8c8524746f5b3093f5633100b66-18" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_407bf8c8524746f5b3093f5633100b66-18"></a><span class="w"> </span><span class="p">(</span><span class="nf">1+</span><span class="w"> </span><span class="p">(</span><span class="nf">get</span><span class="w"> </span><span class="ss">'eval-after-load</span><span class="w"> </span><span class="ss">'lisp-indent-function</span><span class="p">)))</span>
</pre></div>
<p>Here's a contrived example which demonstrates when things happen.</p>
<div class="code"><pre class="code emacs-lisp"><a id="rest_code_1d353a20290942f6b60bcd970329a603-1" name="rest_code_1d353a20290942f6b60bcd970329a603-1" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-1"></a><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nv">f</span><span class="w"> </span><span class="p">(</span><span class="nv">make-temp-file</span><span class="w"> </span><span class="s">"tkb-madness"</span><span class="w"> </span><span class="no">nil</span><span class="w"> </span><span class="s">".el"</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-2" name="rest_code_1d353a20290942f6b60bcd970329a603-2" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-2"></a><span class="w"> </span><span class="p">(</span><span class="nv">x</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-3" name="rest_code_1d353a20290942f6b60bcd970329a603-3" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-3"></a><span class="w"> </span><span class="p">(</span><span class="k">unwind-protect</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-4" name="rest_code_1d353a20290942f6b60bcd970329a603-4" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-4"></a><span class="w"> </span><span class="p">(</span><span class="k">progn</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-5" name="rest_code_1d353a20290942f6b60bcd970329a603-5" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-5"></a><span class="w"> </span><span class="p">(</span><span class="k">save-excursion</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-6" name="rest_code_1d353a20290942f6b60bcd970329a603-6" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-6"></a><span class="w"> </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nv">buf</span><span class="w"> </span><span class="p">(</span><span class="nv">find-file</span><span class="w"> </span><span class="nv">f</span><span class="p">)))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-7" name="rest_code_1d353a20290942f6b60bcd970329a603-7" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-7"></a><span class="w"> </span><span class="p">(</span><span class="nf">insert</span><span class="w"> </span><span class="p">(</span><span class="nf">format</span><span class="w"> </span><span class="s">"(y-or-n-p \"In the file '%s'! \")"</span><span class="w"> </span><span class="nv">f</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-8" name="rest_code_1d353a20290942f6b60bcd970329a603-8" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-8"></a><span class="w"> </span><span class="p">(</span><span class="nv">save-buffer</span><span class="p">)</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-9" name="rest_code_1d353a20290942f6b60bcd970329a603-9" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-9"></a><span class="w"> </span><span class="p">(</span><span class="nf">kill-buffer</span><span class="w"> </span><span class="nv">buf</span><span class="p">)))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-10" name="rest_code_1d353a20290942f6b60bcd970329a603-10" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-10"></a><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="s">"This happens before the eval-after-load*"</span><span class="p">)</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-11" name="rest_code_1d353a20290942f6b60bcd970329a603-11" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-11"></a><span class="w"> </span><span class="p">(</span><span class="nv">eval-after-load*</span><span class="w"> </span><span class="nv">f</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-12" name="rest_code_1d353a20290942f6b60bcd970329a603-12" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-12"></a><span class="w"> </span><span class="p">(</span><span class="nv">x</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-13" name="rest_code_1d353a20290942f6b60bcd970329a603-13" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-13"></a><span class="w"> </span><span class="p">(</span><span class="nv">y</span><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="s">"This happens when the eval-after-load* is executed?"</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-14" name="rest_code_1d353a20290942f6b60bcd970329a603-14" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-14"></a><span class="w"> </span><span class="p">(</span><span class="nv">z</span><span class="w"> </span><span class="mi">2</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-15" name="rest_code_1d353a20290942f6b60bcd970329a603-15" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-15"></a><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="p">(</span><span class="nf">format</span><span class="w"> </span><span class="s">"x: %d y: %S z: %d"</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="nv">y</span><span class="w"> </span><span class="nv">z</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-16" name="rest_code_1d353a20290942f6b60bcd970329a603-16" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-16"></a><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="s">"This happends during the delayed expressions"</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-17" name="rest_code_1d353a20290942f6b60bcd970329a603-17" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-17"></a><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="s">"This happens after the eval-after-load* expression"</span><span class="p">)</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-18" name="rest_code_1d353a20290942f6b60bcd970329a603-18" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-18"></a><span class="w"> </span><span class="p">(</span><span class="nf">load</span><span class="w"> </span><span class="nv">f</span><span class="p">))</span>
<a id="rest_code_1d353a20290942f6b60bcd970329a603-19" name="rest_code_1d353a20290942f6b60bcd970329a603-19" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_1d353a20290942f6b60bcd970329a603-19"></a><span class="w"> </span><span class="p">(</span><span class="nb">when</span><span class="w"> </span><span class="p">(</span><span class="nf">file-exists-p</span><span class="w"> </span><span class="nv">f</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nf">delete-file</span><span class="w"> </span><span class="nv">f</span><span class="p">))))</span>
</pre></div>
<p>You should see something like:</p>
<div class="code"><pre class="code text"><a id="rest_code_39ab1ada4af340babf6bd79228d8675c-1" name="rest_code_39ab1ada4af340babf6bd79228d8675c-1" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-1"></a>Wrote /tmp/tkb-madness88647vuE.el
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-2" name="rest_code_39ab1ada4af340babf6bd79228d8675c-2" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-2"></a>This happens before the eval-after-load*(y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-3" name="rest_code_39ab1ada4af340babf6bd79228d8675c-3" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-3"></a>This happens when the eval-after-load* is executed?(y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-4" name="rest_code_39ab1ada4af340babf6bd79228d8675c-4" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-4"></a>This happens after the eval-after-load* expression(y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-5" name="rest_code_39ab1ada4af340babf6bd79228d8675c-5" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-5"></a>Loading /tmp/tkb-madness88647vuE.el (source)...
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-6" name="rest_code_39ab1ada4af340babf6bd79228d8675c-6" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-6"></a>In the file '/tmp/tkb-madness88647vuE.el'! (y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-7" name="rest_code_39ab1ada4af340babf6bd79228d8675c-7" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-7"></a>x: 1 y: t z: 2(y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-8" name="rest_code_39ab1ada4af340babf6bd79228d8675c-8" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-8"></a>This happends during the delayed expressions(y or n)
<a id="rest_code_39ab1ada4af340babf6bd79228d8675c-9" name="rest_code_39ab1ada4af340babf6bd79228d8675c-9" href="posts/2008/08/15/fun-with-emacs-eval-after-load/#rest_code_39ab1ada4af340babf6bd79228d8675c-9"></a>Loading /tmp/tkb-madness88647vuE.el (source)...done
</pre></div>
<p>(<code class="docutils literal"><span class="pre">y-or-n-p</span></code> is used instead of <code class="docutils literal">message</code> so you see each message when it
happens.)</p>
<p>Does the <code class="docutils literal"><span class="pre">eval-after-load*</span></code> macro make sense?</p>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/emacs/" rel="tag">emacs</a></li>
</ul></nav>
</div>
</article><article class="blog-post h-entry post-text"><header><h2 class="p-name entry-title blog-post-title"><a href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/" class="u-url">Fun With Emacs: Unicode and #'describe-char</a></h2>
<div class="metadata blog-post-meta">
<p class="byline author vcard"><span class="byline-name fn">T. Kurt Bond</span></p>
<p class="dateline"><a href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/" rel="bookmark"><time class="published dt-published" datetime="2008-08-15T12:07:21-05:00" title="2008-08-15 12:07">2008-08-15 12:07</time></a></p>
<p class="commentline"> <a href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#disqus_thread" data-disqus-identifier="cache/posts/2008/08/15/fun-with-emacs-unicode-and-describe-char.html">Comments</a>
</p>
</div>
</header><div class="e-content entry-content">
<p>Ever use the emacs command <code class="docutils literal"><span class="pre">describe-char</span></code>? It's even more fun with
proper unicode lookup data!</p>
<div class="code"><pre class="code emacs-lisp"><a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-1" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-1" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-1"></a><span class="c1">;; First, we'll bind it to a key.</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-2" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-2" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-2"></a><span class="p">(</span><span class="nv">global-set-key</span><span class="w"> </span><span class="s">"\C-cD"</span><span class="w"> </span><span class="nf">#'</span><span class="nv">describe-char</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-3" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-3" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-3"></a>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-4" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-4" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-4"></a><span class="c1">;; Now we'll download it if necessary.</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-5" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-5" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-5"></a><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">((</span><span class="nv">udf-url</span><span class="w"> </span><span class="s">"http://www.unicode.org/Public/UNIDATA/UnicodeData.txt"</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-6" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-6" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-6"></a><span class="w"> </span><span class="p">(</span><span class="nv">udf-dest</span><span class="w"> </span><span class="s">"~/tmp/UnicodeData.txt"</span><span class="p">))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-7" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-7" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-7"></a><span class="w"> </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">file-readable-p</span><span class="w"> </span><span class="nv">udf-dest</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-8" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-8" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-8"></a><span class="w"> </span><span class="c1">;; Let describe-char know it exists.</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-9" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-9" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-9"></a><span class="w"> </span><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">describe-char-unicodedata-file</span><span class="w"> </span><span class="nv">udf-dest</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-10" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-10" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-10"></a><span class="w"> </span><span class="c1">;; It doesn't exist, and we need to download it!</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-11" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-11" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-11"></a><span class="w"> </span><span class="p">(</span><span class="nb">when</span><span class="w"> </span><span class="p">(</span><span class="nv">y-or-n-p</span><span class="w"> </span><span class="p">(</span><span class="nf">format</span><span class="w"> </span><span class="s">"You need to download %s ! Do it? "</span><span class="w"> </span><span class="nv">udf-url</span><span class="p">))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-12" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-12" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-12"></a><span class="w"> </span><span class="c1">;; Really weird: wget -O 'file' complains that file doesn't exist.</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-13" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-13" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-13"></a><span class="w"> </span><span class="p">(</span><span class="k">let*</span><span class="w"> </span><span class="p">((</span><span class="nv">cmd</span><span class="w"> </span><span class="p">(</span><span class="nf">format</span><span class="w"> </span><span class="s">"cd ~/tmp/ && wget -O %s --progress=dot '%s'"</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-14" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-14" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-14"></a><span class="w"> </span><span class="nv">udf-dest</span><span class="w"> </span><span class="nv">udf-url</span><span class="p">))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-15" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-15" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-15"></a><span class="w"> </span><span class="p">(</span><span class="nv">buf</span><span class="w"> </span><span class="p">(</span><span class="nf">get-buffer-create</span><span class="w"> </span><span class="p">(</span><span class="nf">format</span><span class="w"> </span><span class="s">" *wget '%s'*"</span><span class="w"> </span><span class="nv">udf-url</span><span class="p">)))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-16" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-16" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-16"></a><span class="w"> </span><span class="p">(</span><span class="nv">proc</span><span class="w"> </span><span class="p">(</span><span class="nv">start-process-shell-command</span><span class="w"> </span><span class="s">"wget-unicode-Data"</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-17" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-17" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-17"></a><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="nv">cmd</span><span class="p">)))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-18" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-18" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-18"></a><span class="w"> </span><span class="p">(</span><span class="nv">display-buffer</span><span class="w"> </span><span class="nv">buf</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-19" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-19" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-19"></a><span class="w"> </span><span class="p">(</span><span class="nf">set-process-sentinel</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-20" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-20" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-20"></a><span class="w"> </span><span class="nv">proc</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-21" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-21" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-21"></a><span class="w"> </span><span class="o">`</span><span class="p">(</span><span class="nb">lambda</span><span class="w"> </span><span class="p">(</span><span class="nv">proc</span><span class="w"> </span><span class="nv">event</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-22" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-22" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-22"></a><span class="w"> </span><span class="p">(</span><span class="nb">unless</span><span class="w"> </span><span class="p">(</span><span class="nf">string-match</span><span class="w"> </span><span class="s">"^finished"</span><span class="w"> </span><span class="nv">event</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-23" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-23" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-23"></a><span class="w"> </span><span class="p">(</span><span class="ne">error</span><span class="w"> </span><span class="s">"unexpected status '%s' getting '%s'"</span><span class="w"> </span><span class="o">,</span><span class="nv">udf-url</span><span class="w"> </span><span class="nv">event</span><span class="p">))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-24" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-24" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-24"></a><span class="w"> </span><span class="p">(</span><span class="k">setq</span><span class="w"> </span><span class="nv">describe-char-unicodedata-file</span><span class="w"> </span><span class="o">,</span><span class="nv">udf-dest</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-25" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-25" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-25"></a><span class="w"> </span><span class="p">(</span><span class="nf">message</span><span class="w"> </span><span class="s">"Try describe-char now! ☣☥☸▧◉✘✽☮⅙▧⚅☑☢☹☺♠♥♦♣♨♻⚔"</span><span class="p">)))</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-26" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-26" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-26"></a><span class="w"> </span><span class="p">(</span><span class="nf">message</span><span class="w"> </span><span class="s">"Downloading... check describe-char later"</span><span class="p">)</span>
<a id="rest_code_0594eb73a0f944e1a625ed46b7fe646f-27" name="rest_code_0594eb73a0f944e1a625ed46b7fe646f-27" href="posts/2008/08/15/fun-with-emacs-unicode-and-describe-char/#rest_code_0594eb73a0f944e1a625ed46b7fe646f-27"></a><span class="w"> </span><span class="no">nil</span><span class="p">))))</span>
</pre></div>
<p>Once this is run and it tells you to try <code class="docutils literal"><span class="pre">describe-char</span></code> you can
position your cursor over one of the Unicode characters in the message
(“C-h e” to display the “<em>Messages</em>” buffer) and press “C-cD” and look
for the “Name:” line. You'll see something like this:</p>
<pre class="literal-block"> character: ♻ (299515, #o1110773, #x491fb, U+267B)
charset: mule-unicode-2500-33ff (Unicode characters of the range U+2500..U+33FF.)
code point: #x23 #x7B
syntax: w which means: word
buffer code: #x9C #xF2 #xA3 #xFB
file code: #xE2 #x99 #xBB (encoded by coding system mule-utf-8)
display: terminal code #xE2 #x99 #xBB
Unicode data:
Name: BLACK UNIVERSAL RECYCLING SYMBOL
Category: other symbol
Combining class: Spacing
Bidi category: Other Neutrals</pre>
<nav><ul itemprop="keywords" class="tags">
<li><a class="tag p-category" href="categories/emacs/" rel="tag">emacs</a></li>
</ul></nav>
</div>
</article>
</div>
<nav class="postindexpager"><ul class="pager">
<li class="previous">
<a href="index-42.html" rel="prev">Newer posts</a>
</li>
<li class="next">
<a href="index-40.html" rel="next">Older posts</a>
</li>
</ul></nav><script>var disqus_shortname="lacking-natural-simplicity";(function(){var a=document.createElement("script");a.async=true;a.src="https://"+disqus_shortname+".disqus.com/count.js";(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(a)}());</script>
</div>
<div class="col-sm-3 col-sm-offset-1 blog-sidebar">
<div class="sidebar-module sidebar-module-inset">
<h4>About</h4>
<p>Lacking Natural Simplicity is one, not particularly flattering,
definition of sophisticated.
This blog chronicles my journey through our at times too complicated
and sophisticated world. </p>
</div>
<div class="sidebar-module">
<p>This site uses no cookies directly, but I expect the <a href="https://disqus.com/">Disqus</a> comments use cookies at disqus.com.</p>
<h4>Links</h4>
<ol class="list-unstyled">
<li><a href="pages/about-the-blog/index.html">About the Blog</a></li>
<li><a href="pages/colophon/index.html">Colophon</a></li>
<li><a href="pages/typographical-conventions/index.html">Typographical Conventions</a></li>
<li><a href="pages/static-pages-index/index.html">Pages</a></li>
<li>
<a href="http://tkb.tx0.org/">My tx0.org web page</a>
<br> Mostly empty
</li>
<li>
<a href="http://consp.org/">consp.org</a>
<br> Rises from the dead!
<br> <a href="http://consp.org/blog/blog.html">microblog</a>
</li>
</ol>
</div>
</div>
<!--End of body content-->
</div>
</div>
</div>
<footer class="blog-footer" id="footer">
Contents © 2024 <a href="mailto:[email protected]">T. Kurt Bond</a> - Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
</footer><script src="assets/js/all-nocdn.js"></script><!-- fancy dates --><script>
moment.locale("en");
fancydates(0, "YYYY-MM-DD HH:mm");
</script><!-- end fancy dates --><script>
baguetteBox.run('div#content', {
ignoreClass: 'islink',
captions: function(element) {
return element.getElementsByTagName('img')[0].alt;
}});
</script>
</body>
</html>