<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planet Emacsen</title>
	<link rel="self" href="http://planet.emacsen.org/atom.xml"/>
	<link href="http://planet.emacsen.org/"/>
	<id>http://planet.emacsen.org/atom.xml</id>
	<updated>2012-02-05T03:02:38+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html">Benjamin Slade: Vote for Emacs and Conkeror in the 2011 LinuxQuestions.org Members Choice Awards</title>
		<link href="http://babbagefiles.blogspot.com/2012/02/vote-for-emacs-and-conkeror-in-2011.html"/>
		<id>tag:blogger.com,1999:blog-9417648313224391.post-5984723492691683849</id>
		<updated>2012-02-04T19:08:27+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;Vote for Emacs in the &lt;a href=&quot;https://www.linuxquestions.org/questions/2011-linuxquestions-org-members-choice-awards-95/text-editor-of-the-year-919912/&quot;&gt;Text Editor of the Year&lt;/a&gt; category and in the &lt;a href=&quot;https://www.linuxquestions.org/questions/2011-linuxquestions-org-members-choice-awards-95/ide-web-development-editor-of-the-year-919910/&quot;&gt;IDE/Web Development Editor of the Year&lt;/a&gt; category.&lt;br /&gt;&lt;br /&gt;Vote for Conkeror in the &lt;a href=&quot;https://www.linuxquestions.org/questions/2011-linuxquestions-org-members-choice-awards-95/browser-of-the-year-919887/&quot;&gt;Browser of the Year&lt;/a&gt; category.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/9417648313224391-5984723492691683849?l=babbagefiles.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>be_slayed</name>
			<email>noreply@blogger.com</email>
			<uri>http://babbagefiles.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">The Babbage Files</title>
			<subtitle type="html">tips, hacks, and musings</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/9417648313224391/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-9417648313224391</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Irreal: Does Elisp Suck?</title>
		<link href="http://irreal.org/blog/?p=675"/>
		<id>http://irreal.org/blog/?p=675</id>
		<updated>2012-02-03T21:05:48+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;One of the links from the &lt;a href=&quot;http://www.emacswiki.org/emacs/CategoryCode&quot;&gt;CategoryCode page&lt;/a&gt; that I wrote about &lt;a href=&quot;http://irreal.org/blog/?p=674&quot;&gt;yesterday&lt;/a&gt; is the &lt;a href=&quot;http://www.emacswiki.org/emacs/WhyDoesElispSuck&quot;&gt;Why Does Elisp Suck&lt;/a&gt; page. The idea is to give people a place to be grumpy about Elisp. My first thought was that, really, Elisp doesn’t suck—it’s a pretty nice language. I’d like to explore this question a bit more. &lt;/p&gt;
&lt;p&gt; The answers to the “Why does Elisp suck?” question fall into two classes: the silly and the substantive. The silly answers are “because it’s not Scheme”, or “because it’s not Common Lisp”, or “because it’s not &lt;i&gt;X&lt;/i&gt;” for your favorite language &lt;i&gt;X&lt;/i&gt;. Are there better Lisps than Elisp? Of course. I’d argue that Scheme and Common Lisp are both better Lisps but that doesn’t mean Elisp sucks. If your &lt;i&gt;X&lt;/i&gt; is something like Python or Ruby I’d wager that you aren’t really comfortable in Lisp but you’re certainly entitled to your opinion. On the other hand, preferring Python or Ruby or whatever also doesn’t mean Elisp sucks. In short, the fact that you’d rather code in a language other than Elisp doesn’t have very much to say about Elisp. &lt;/p&gt;
&lt;p&gt; Of the substantive answers, only 3 are really of any concern to me. First and foremost is the lack of lexical scoping. That’s fixed (for certain values of &lt;i&gt;fixed&lt;/i&gt;) &lt;a href=&quot;http://irreal.org/blog/?p=628&quot;&gt;in Emacs 24&lt;/a&gt;. The second problem is the lack of tail call elimination. Technically, Common Lisp doesn’t have this either—in the sense that it’s not in the standard—but as a practical matter all serious implementations of CL do eliminate tail calls. This matters to me because it enables a style of iteration that I prefer: see my &lt;a href=&quot;http://irreal.org/blog/?p=638&quot;&gt;rpl function&lt;/a&gt; for instance. Finally, there is no threading or concurrency. This bothers me less than the first two but it does mean that packages like gnus can slow things down. &lt;/p&gt;
&lt;p&gt; Some of the other substantive problems with Elisp are no object system (a feature not a bug in my opinion), no module system (a pain because of name collisions but I can live with it), clumsy regular expressions (especially if what you really want are Perl regexps), and the API sucks. &lt;/p&gt;
&lt;p&gt; Someone also noted that the Elisp implementation is slow. That’s true, I guess, but doesn’t really speak to whether or not Elisp sucks. It would be nice if things were snappier but on modern machines it seems fast enough to me. I’d guess that font locking and things like that have more to do with performance problems than the Lisp engine. &lt;/p&gt;
&lt;p&gt; All-in-all, I find Elisp to be a comfortable language to write in. Not as powerful as Common Lisp and not as well designed as Scheme but still nice. What does everyone else think? Is Elisp something you put up with or do you like the language? I’d be surprised if very many people said it was their favorite language but I’d also be surprised if many Elisp users really do think the language sucks. &lt;/p&gt;</content>
		<author>
			<name>jcs</name>
			<uri>http://irreal.org/blog</uri>
		</author>
		<source>
			<title type="html">Irreal » Emacs</title>
			<subtitle type="html">The minds had long ago come up with a proper name for it; they called it the Irreal, but they thought of it as Infinite Fun. That was what they really knew it as. The Land of Infinite Fun. --Iain M. Banks, Excession</subtitle>
			<link rel="self" href="http://irreal.org/blog/?tag=emacs&amp;feed=rss2"/>
			<id>http://irreal.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">Ben Simon: Friday Funnies</title>
		<link href="http://benjisimon.blogspot.com/2012/02/friday-funnies.html"/>
		<id>tag:blogger.com,1999:blog-12753102.post-6437843958073728886</id>
		<updated>2012-02-03T17:07:00+00:00</updated>
		<content type="html">&lt;p&gt;
Been a heck of a week...here a few items that made me chuckle...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;These videos are too cute. I give you: &lt;a href=&quot;http://www.huffingtonpost.com/2012/01/20/kids-endorse-a-presidential-candidate_n_1218867.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Rich Kids for Romney&lt;/a&gt; (and another one &lt;a href=&quot;http://www.huffingtonpost.com/2012/01/31/rich-kids-for-romney-not-a-lot-of-money_n_1245199.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;). Seriously, watch and try not to laugh?
&lt;div style=&quot;text-align: center;&quot;&gt;
 
 
 
 
 


 
&lt;br /&gt;
&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt;
I'm not a big fan of pranksters. And I'm especially not a fan of pranking police. But even I couldn't help but smile at &lt;a href=&quot;http://www.wcax.com/story/16663947/prisoners-sneak-pig-into-vsp-decal&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;this story&lt;/a&gt;. Inmates were in charge of creating the decals for police officers and this is what they came up with:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-VLqNolWCt98/TyxZ0ozZzVI/AAAAAAAALLk/2O4ck9Nv7Ec/s1600/prank.jpg&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;http://2.bp.blogspot.com/-VLqNolWCt98/TyxZ0ozZzVI/AAAAAAAALLk/2O4ck9Nv7Ec/s400/prank.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Nothing wrong with that, right? Except, there is. Read on why &lt;a href=&quot;http://www.wcax.com/story/16663947/prisoners-sneak-pig-into-vsp-decal&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;


&lt;li&gt;
Rule number #1: if you're going to cause a dust up on the Internet, you want &lt;a href=&quot;http://www.buzzfeed.com/gavon/someecards-responds-to-susan-g-komen-defunding-pl&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;someecards&lt;/a&gt; on your side. Man, they can quickly produce hilarious stuff.&lt;/li&gt;

&lt;/ol&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/12753102-6437843958073728886?l=benjisimon.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Ben Simon</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=cb318680d0fab4cbaec11d558af0f71f</uri>
		</author>
		<source>
			<title type="html">Ben Simon</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=cb318680d0fab4cbaec11d558af0f71f&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=cb318680d0fab4cbaec11d558af0f71f</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Irreal: Learning Elisp Idioms</title>
		<link href="http://irreal.org/blog/?p=674"/>
		<id>http://irreal.org/blog/?p=674</id>
		<updated>2012-02-02T20:19:30+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I’ve said &lt;a href=&quot;http://irreal.org/blog/?p=251&quot;&gt;before&lt;/a&gt; that Emacs Lisp is pretty much like any other Lisp except for its library, which is specialized for editing tasks. One of the things I like about Xah Lee’s &lt;a href=&quot;http://xahlee.org/emacs/elisp.html&quot;&gt;Emacs Lisp Tutorial&lt;/a&gt; is that it doesn’t concern itself too much with Lisp itself but presents Elisp use cases and idioms. If you already know a little of any Lisp, then Xah’s tutorial is a good place to go to come up to speed with Elisp. &lt;/p&gt;
&lt;p&gt; Today, I found another good resource: The &lt;a href=&quot;http://www.emacswiki.org/emacs/CategoryCode&quot;&gt;CategoryCode page&lt;/a&gt; on the Emacs Wiki. They’ve got a long list of articles that show you how to do various tasks in Emacs Lisp. One page, the &lt;a href=&quot;http://www.emacswiki.org/emacs/ElispCookbook&quot;&gt;Elisp Cookbook&lt;/a&gt;, is particularly helpful. It contains a collection of code snippets for many common chores. Other articles are more specialized; they have, for example, an article on a &lt;a href=&quot;http://www.emacswiki.org/emacs/PasswordGenerator&quot;&gt;Password Generator&lt;/a&gt;. Some of the articles are quite detailed while others merely describe a library that’s good for doing some task or another. &lt;/p&gt;
&lt;p&gt; If you’re new to Elisp but have a basic knowledge of Lisp, I’d start with Xah Lee’s tutorial and then try some of the articles on the CategoryCode page. Of course, the definitive source is the &lt;a href=&quot;http://www.gnu.org/software/emacs/manual/html_node/elisp/index.html&quot;&gt;GNU Emacs Lisp Reference Manual&lt;/a&gt;, which is also available in the built-in documentation. If you need to know the particulars about some function or slightly broader area, that’s the place to look but I don’t find it particularly useful for learning the ins and outs of Elisp. The other outstanding resource you have for that is Emacs itself. You might try reading simple.el, for example, to see how some of the simple editing functions are implemented. It will give you a good feel for Elisp idioms. &lt;/p&gt;</content>
		<author>
			<name>jcs</name>
			<uri>http://irreal.org/blog</uri>
		</author>
		<source>
			<title type="html">Irreal » Emacs</title>
			<subtitle type="html">The minds had long ago come up with a proper name for it; they called it the Irreal, but they thought of it as Infinite Fun. That was what they really knew it as. The Land of Infinite Fun. --Iain M. Banks, Excession</subtitle>
			<link rel="self" href="http://irreal.org/blog/?tag=emacs&amp;feed=rss2"/>
			<id>http://irreal.org/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">tycho garen: Persistent Emacs Daemons</title>
		<link href="http://tychoish.com/rhizome/persistent-emacs-daemons/"/>
		<id>http://tychoish.com/rhizome/persistent-emacs-daemons/</id>
		<updated>2012-02-02T05:00:00+00:00</updated>
		<content type="html">&lt;p&gt;I've been subject to a rather annoying emacs bug for
months. Basically, when you start emacs with the &lt;code&gt;--daemon&lt;/code&gt; switch,
and the X11 session exits, &lt;em&gt;and&lt;/em&gt; any emacs frames are open, then the
emacs process dies. No warning. The whole point, to my mind, of the
daemon mode is to allows emacs sessions to persist beyond the current
X11 session.&lt;/p&gt;

&lt;p&gt;This shouldn't happen. I think
&lt;a href=&quot;http://lists.gnu.org/archive/html/bug-gnu-emacs/2011-04/msg00261.html&quot;&gt;this&lt;/a&gt;
is the relevant bug report, but I seem to remember that the issue has
something to do with the way that &lt;a href=&quot;http://www.gtk.org/&quot;&gt;GTK&lt;/a&gt; interacts
with the X11 session and emacs's frames. It's something of a deadlock:
the GTK has no real need to fix the bug (and/or it's a behavior that
they rely on for other uses,) and it might not really be possible or
feasible for emacs to work around this issue.&lt;a class=&quot;footnote&quot; id=&quot;fnref:source&quot;&gt;1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also think that it's probably fair to say that daemon mode
represent a small minority all emacs usage.&lt;/p&gt;

&lt;p&gt;Regardless, I've figured out the workaround:&lt;/p&gt;

&lt;p&gt;.. don't use GTK.&lt;/p&gt;

&lt;p&gt;Turns out, it's totally possible to build
&lt;a href=&quot;http://gnu.org/s/emacs&quot;&gt;GNU emacs&lt;/a&gt; without GTK, by using the &quot;Lucid&quot;
build. Which is to say, use the windowing system kit built for Lucid
Emacs (i.e. XEmacs,) rather than GTK. I was able, using the code
below, to get an emacs experience with the new build that seems
identical&lt;a class=&quot;footnote&quot; id=&quot;fnref:exception&quot;&gt;2&lt;/a&gt; to the one I used to get with GTK, except
without the frustrating crashes every time that X11 spazzed when I
decided to unplug a monitor or some such. A welcome improvement,
indeed.&lt;/p&gt;

&lt;p&gt;The following emacs-lisp covers all of the relevant configuration of
the &quot;look and feel&quot; of my emacs session. Install the
&lt;a href=&quot;http://levien.com/type/myfonts/inconsolata.html&quot;&gt;Inconsolata&lt;/a&gt; font if
you haven't already, you'll be glad you did.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (setq-default inhibit-startup-message 't
               initial-scratch-message 'nil
               save-place t
               scroll-bar-mode nil
               tool-bar-mode nil
               menu-bar-mode nil
               scroll-margin 0
               indent-tabs-mode nil
               flyspell-issue-message-flag 'nil
               size-indication-mode t
               scroll-conservatively 25
               scroll-preserve-screen-position 1
               cursor-in-non-selected-windows nil)

 (setq default-frame-alist '((font-backend . &quot;xft&quot;)
                             (font . &quot;Inconsolata-14&quot;)
                             (vertical-scroll-bars . 0)
                             (menu-bar-lines . 0)
                             (tool-bar-lines . 0)
                             (alpha 86 84)))

 (tool-bar-mode -1)
 (scroll-bar-mode -1)
 (menu-bar-mode -1)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Hope this helps you and/or anyone else that might have run into this
problem.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:source&quot;&gt;&lt;p&gt;I'd like to add the citation and more information here, but
can't find it.&lt;a class=&quot;reversefootnote&quot;&gt; ↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li id=&quot;fn:exception&quot;&gt;&lt;p&gt;To be fair, I mostly don't use the GUI elements in
emacs, though having emacs instances outside of the terminal is nice
for displaying images when using emacs-w3m, and for having a little
bit of additional display flexibility for some more rich modes.&lt;a class=&quot;reversefootnote&quot;&gt; ↩&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;</content>
		<author>
			<name>tycho garen</name>
			<uri>http://tychoish.com/tag/emacs/feed/</uri>
		</author>
		<source>
			<title type="html">tychoish emacs posts</title>
			<subtitle type="html">tychoish</subtitle>
			<link rel="self" href="http://tychoish.com/tag/emacs/feed/index.rss"/>
			<id>http://tychoish.com/tag/emacs/feed/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Emacs-fu: update</title>
		<link href="http://emacs-fu.blogspot.com/2012/02/regular-emacs-fu-programming-will.html"/>
		<id>tag:blogger.com,1999:blog-3992530807750384868.post-5784078687169335944</id>
		<updated>2012-02-01T18:24:56+00:00</updated>
		<content type="html">&lt;div class=&quot;outline-2&quot; id=&quot;outline-container-1&quot;&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;

&lt;p&gt;
  Regular emacs-fu programming will resume shortly, but for now I'll provide a
  brief update on some of my projects.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recently, I discussed &lt;a href=&quot;http://emacs-fu.blogspot.com/2011/12/sauron-keeping-eye-on-whats-going-on.html&quot;&gt;sauron&lt;/a&gt;, and event-tracking tool for emacs. I added
    some new features, fixed some bugs, and got some contributions (yay!)

&lt;ul&gt;
&lt;li&gt;tweak/improve priority handling
&lt;/li&gt;
&lt;li&gt;add a backend for the emacs-24 notification system
&lt;/li&gt;
&lt;li&gt;add settings to make the sauron frame 'sticky', and to hide the mode-line
&lt;/li&gt;
&lt;li&gt;enable dbus-message source outside your session; useful for cron/procmail
      etc.
&lt;/li&gt;
&lt;li&gt;display events in a tabular fashion
&lt;/li&gt;
&lt;li&gt;add support for John Wiegley's &lt;code&gt;event.el&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;much improved documentation
&lt;/li&gt;
&lt;li&gt;other things…

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;    Sauron version 0.2 is available through &lt;a href=&quot;http://marmalade-repo.org/&quot;&gt;Marmalade&lt;/a&gt; (see &lt;a href=&quot;http://emacs-fu.blogspot.com/2011/11/package-management-revisited.html&quot;&gt;Package Management Revisited&lt;/a&gt;)
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;I released version 0.9.8 of &lt;a href=&quot;http://www.djcbsoftware.nl/code/mu&quot;&gt;mu&lt;/a&gt; (e-mail searcher/indexer, previously
    discussed in &lt;a href=&quot;http://emacs-fu.blogspot.com/2011/03/searching-e-mails-with-wanderlust-and.html&quot;&gt;Searching e-mails with Wanderlust and mu&lt;/a&gt;). Now, for emacs-users
    I've added &lt;a href=&quot;http://www.djcbsoftware.nl/code/mu/mu4e.html&quot;&gt;mu4e&lt;/a&gt; (&lt;a href=&quot;http://www.djcbsoftware.nl/code/mu/mu4e/index.html&quot;&gt;manual&lt;/a&gt;), a new &amp;amp; experimental e-mail client. It won't be
    big and professional like &lt;code&gt;gnus&lt;/code&gt;, but it's fun to hack on, and I've been
    using it for a few months.
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3992530807750384868-5784078687169335944?l=emacs-fu.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>djcb</name>
			<email>noreply@blogger.com</email>
			<uri>http://emacs-fu.blogspot.com/search/label/new</uri>
		</author>
		<source>
			<title type="html">emacs-fu</title>
			<subtitle type="html">useful tricks for emacs</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/3992530807750384868/posts/default/-/new"/>
			<id>tag:blogger.com,1999:blog-3992530807750384868</id>
		</source>
	</entry>

	<entry>
		<title type="html">Got Emacs?: No Gnus v0.19 is released</title>
		<link href="http://feedproxy.google.com/~r/GotEmacs/~3/B_veLbR_9B4/no-gnus-v019-is-released.html"/>
		<id>tag:blogger.com,1999:blog-3165518189103293420.post-739444140171743948</id>
		<updated>2012-02-01T17:10:43+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;Lars has &lt;a href=&quot;http://permalink.gmane.org/gmane.emacs.gnus.announce/63&quot; target=&quot;_blank&quot;&gt;tagged and released v0.19&lt;/a&gt; and created a &lt;a href=&quot;http://permalink.gmane.org/gmane.emacs.gnus.general/81044&quot; target=&quot;_blank&quot;&gt;new branch ma gnus 0.1&lt;/a&gt; too.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3165518189103293420-739444140171743948?l=emacsworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/KYNPCwFue56zxkw4AsBOaXar-GE/0/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/KYNPCwFue56zxkw4AsBOaXar-GE/0/di&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/KYNPCwFue56zxkw4AsBOaXar-GE/1/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/KYNPCwFue56zxkw4AsBOaXar-GE/1/di&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=B_veLbR_9B4:Rl66ZQDYtZk:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=B_veLbR_9B4:Rl66ZQDYtZk:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=B_veLbR_9B4:Rl66ZQDYtZk:gIN9vFwOqvQ&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?i=B_veLbR_9B4:Rl66ZQDYtZk:gIN9vFwOqvQ&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/GotEmacs/~4/B_veLbR_9B4&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>sivaram</name>
			<email>noreply@blogger.com</email>
			<uri>http://emacsworld.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Got Emacs?</title>
			<subtitle type="html">Postings on living in an Emacs world.  Posts will be mostly on using Emacs, related functions and tools.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/GotEmacs"/>
			<id>tag:blogger.com,1999:blog-3165518189103293420</id>
		</source>
	</entry>

	<entry>
		<title type="html">Got Emacs?: Installing AucTeX and Preview LaTeX on Windows</title>
		<link href="http://feedproxy.google.com/~r/GotEmacs/~3/bhE7cPqSIh8/installing-auctex-and-preview-latex-on.html"/>
		<id>tag:blogger.com,1999:blog-3165518189103293420.post-5843792213730472388</id>
		<updated>2012-02-01T17:05:39+00:00</updated>
		<content type="html">&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;So, I upgraded my &lt;a href=&quot;http://emacsworld.blogspot.in/2012/01/emacs-234-released.html&quot; target=&quot;_blank&quot;&gt;Emacs to the latest version&lt;/a&gt; and went through the steps of compiling my elisp packages on my Windows XP laptop and promptly struggled a bit on getting &lt;a href=&quot;http://www.gnu.org/s/auctex/&quot; target=&quot;_blank&quot;&gt;Auctex and Preview LaTeX&lt;/a&gt; to work.  I've decided on documenting it; well, only the key steps with a lot of hand waving and assumptions thrown in.&lt;br /&gt;
&lt;br /&gt;
Namely,&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.cygwin.com/&quot; target=&quot;_blank&quot;&gt;Cygwin &lt;/a&gt;toolchains are installed(that's what I have)&lt;br /&gt;
&lt;a href=&quot;http://miktex.org/2.9/setup&quot; target=&quot;_blank&quot;&gt;MiKTeX &lt;/a&gt;is installed(whatever version)&lt;br /&gt;
&lt;a href=&quot;http://ftp.gnu.org/gnu/emacs/windows/&quot; target=&quot;_blank&quot;&gt;Win32 Emacs&lt;/a&gt; from the official GNU site (I used 23.4)&lt;br /&gt;
&lt;a href=&quot;http://www.ghostscript.com/download&quot; target=&quot;_blank&quot;&gt;Ghostscript &lt;/a&gt;is installed too (I used the cygwin based one)&lt;br /&gt;
&lt;br /&gt;
In the cygwin terminal, either checkout the cvs version of Auctex or &lt;a href=&quot;http://www.gnu.org/s/auctex/download.html&quot; target=&quot;_blank&quot;&gt;download the tarballs&lt;/a&gt; and untar it somewhere.  Presumably you have MiKTeX and Emacs installed already somewhere; preferably in a folder path that doesn't contain spaces in it's name(It should work with spaces in the path name but I haven't and daren't try that; I really don't need that aggravation).&lt;br /&gt;
&lt;br /&gt;
First you run &lt;span&gt;configure &lt;/span&gt;to generate the &lt;span&gt;Makefile&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;./configure --with-emacs=c:/gnu/emacs-23.4/bin/emacs --prefix=c:/gnu --with-texmf-dir=c:/MiKTeX2.9&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you haven't got all the build tools needed (&lt;span&gt;make, install, latex,perl&lt;/span&gt;..) it will stop.  Fix each one of them by installing the necessary packages by using the cygwin package manager &lt;a href=&quot;http://www.cygwin.com/setup.exe&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;setup.exe&lt;/span&gt;&lt;/a&gt;. Of course, you need to adjust the paths above.&lt;br /&gt;
&lt;br /&gt;
By default, the preview build is enabled by default, which, you can disable by adding the option &lt;span&gt;--disable-preview&lt;/span&gt; to &lt;span&gt;configure &lt;/span&gt;above, if you don't want to preview your latex document that's got figures and maths.&lt;br /&gt;
&lt;br /&gt;
When the &lt;span&gt;Makefile &lt;/span&gt;is generated, run &lt;span&gt;make&lt;/span&gt;.  Do not do a &lt;span&gt;make install&lt;/span&gt;.  You can use the files in situ by following the instructions of &lt;a href=&quot;http://comments.gmane.org/gmane.emacs.auctex.general/4316&quot; target=&quot;_blank&quot;&gt;Tassilo Horn here&lt;/a&gt;.   You'd probably need to add the following to get the correct info files of Auctex.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;;; AUC TeX&lt;br /&gt;
(add-to-list 'load-path &quot;C:/gnu/elisp/auctexcvs/auctex/&quot;)&lt;br /&gt;
(load &quot;auctex.el&quot; nil t t)&lt;br /&gt;
(add-to-list 'load-path &quot;C:/gnu/elisp/auctexcvs/auctex/preview/&quot;)&lt;br /&gt;
(load &quot;preview-latex.el&quot; nil t t)&lt;/div&gt;&lt;div&gt;;;set the path to info files of auctex&lt;/div&gt;&lt;div&gt;(setq Info-default-directory-list &lt;br /&gt;
      (cons &quot;c:/gnu/elisp/auctexcvs/auctex/doc&quot; Info-default-directory-list))&lt;br /&gt;
&lt;/div&gt;I prefer it this way as this does not change the directory structure of a stock install of Emacs on Windows.  Easier to share the folders for someone to copy without borking something.&lt;br /&gt;
&lt;br /&gt;
Navigate to the preview folder and load the &lt;span&gt;circ.tex&lt;/span&gt; and compile it.  It should hopefully do so.&lt;br /&gt;
&lt;br /&gt;
For preview you need the &lt;span&gt;png &lt;/span&gt;or &lt;span&gt;jpeg &lt;/span&gt;image support with Emacs. I've used the &lt;span&gt;dll&lt;/span&gt;s mentioned in the Emacs &lt;span&gt;README.w32 &lt;/span&gt;that are hosted on the &lt;a href=&quot;http://www.gtk.org/download/win32.php&quot; target=&quot;_blank&quot;&gt;GTK website&lt;/a&gt;. Specifically, the &lt;span&gt;png &lt;/span&gt;and &lt;span&gt;zlib &lt;/span&gt;ones that I downloaded and just dumped  in the Emacs bin directory.  Added the following to my &lt;span&gt;.emacs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;(setq preview-image-type 'png)&lt;/div&gt;&lt;br /&gt;
Ran the preview command on the &lt;span&gt;circ.tex&lt;/span&gt; buffer and it showed the equations and images inline which is what it's supposed to do.  If you want &lt;span&gt;jpeg &lt;/span&gt;support you'd have to get the &lt;span&gt;jpeg dll&lt;/span&gt;s for win32 somewhere(the install files mentions gnuwin32 site)&lt;br /&gt;
&lt;br /&gt;
Which is where I stop now as it all works fine and dandy for me.  The various install files tell you not to mix the cygwin paths and normal DOS paths and other such warnings.  But I haven't seen anything that has knackered my installation or borked my usage of them with different bits of win32 and cygwin tied together with AucTeX &lt;br /&gt;
&lt;br /&gt;
So far.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3165518189103293420-5843792213730472388?l=emacsworld.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/UQZtodzqb6i9zrbvIuPEplhd6fI/0/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/UQZtodzqb6i9zrbvIuPEplhd6fI/0/di&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://feedads.g.doubleclick.net/~a/UQZtodzqb6i9zrbvIuPEplhd6fI/1/da&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;true&quot; src=&quot;http://feedads.g.doubleclick.net/~a/UQZtodzqb6i9zrbvIuPEplhd6fI/1/di&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=bhE7cPqSIh8:NweQyF4SoP8:yIl2AUoC8zA&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?d=yIl2AUoC8zA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=bhE7cPqSIh8:NweQyF4SoP8:qj6IDK7rITs&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?d=qj6IDK7rITs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/GotEmacs?a=bhE7cPqSIh8:NweQyF4SoP8:gIN9vFwOqvQ&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://feeds.feedburner.com/~ff/GotEmacs?i=bhE7cPqSIh8:NweQyF4SoP8:gIN9vFwOqvQ&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/GotEmacs/~4/bhE7cPqSIh8&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>sivaram</name>
			<email>noreply@blogger.com</email>
			<uri>http://emacsworld.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Got Emacs?</title>
			<subtitle type="html">Postings on living in an Emacs world.  Posts will be mostly on using Emacs, related functions and tools.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/GotEmacs"/>
			<id>tag:blogger.com,1999:blog-3165518189103293420</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Marco Zuliani: How do I visualize nicely a CSV file in *macs?</title>
		<link href="http://nongeekrecipes.wordpress.com/2012/01/31/how-do-i-visualize-nicely-a-csv-file-in-macs/"/>
		<id>https://nongeekrecipes.wordpress.com/?p=209</id>
		<updated>2012-01-31T17:38:12+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Once you load the CSV file enter the org-mode: &lt;code&gt;M-x org-mode&lt;/code&gt;. Then select the entire data and create a table: &lt;code&gt;C-u C-c |&lt;/code&gt;.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/nongeekrecipes.wordpress.com/209/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/nongeekrecipes.wordpress.com/209/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=nongeekrecipes.wordpress.com&amp;amp;blog=18188171&amp;amp;post=209&amp;amp;subd=nongeekrecipes&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Marco Zuliani</name>
			<uri>http://nongeekrecipes.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Non Geek Recipes » Emacs and friends</title>
			<subtitle type="html">News for non geeks, stuff that matters</subtitle>
			<link rel="self" href="http://nongeekrecipes.wordpress.com/category/emacs-and-friends/feed/"/>
			<id>http://nongeekrecipes.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Johan Andersson: Wrap region 0.4.0</title>
		<link href="http://tuxicity.se/emacs/elisp/2012/01/28/wrap-region-0.4.0.html"/>
		<id>http://tuxicity.se/emacs/elisp/2012/01/28/wrap-region-0.4.0</id>
		<updated>2012-01-28T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;I just updated &lt;a href=&quot;https://github.com/rejeep/wrap-region&quot;&gt;wrap region&lt;/a&gt; to
version &lt;strong&gt;0.4.0&lt;/strong&gt;. The update includes two important changes: &lt;strong&gt;custom
trigger key&lt;/strong&gt; and &lt;strong&gt;mode specific wrappers&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;Custom trigger key&lt;/h2&gt;

&lt;p&gt;When you add a wrapper, say &lt;strong&gt;(&lt;/strong&gt; and &lt;strong&gt;)&lt;/strong&gt;, the left punctuation will
be used as the trigger key. Now you can add wrappers with a custom
trigger key. For example, lets say you want &lt;strong&gt;p&lt;/strong&gt; to wrap with the
p-tag. Then you can do this:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;scheme&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;wrap-region-add-wrapper&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;p&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;/p&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;p&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This feature is implemented by &lt;a href=&quot;https://github.com/tkf&quot;&gt;tkf&lt;/a&gt;, thanks!&lt;/p&gt;

&lt;h2&gt;Mode specific wrappers&lt;/h2&gt;

&lt;p&gt;The most notable feature though is mode specific wrappers. This allow
you to specify wrappers for specific modes. The docstring for
&lt;strong&gt;wrap-region-add-wrapper&lt;/strong&gt; now looks like this:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;scheme&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;wrap-region-add-wrapper&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;LEFT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;RIGHT&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&amp;amp;optional&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;KEY&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;MODE-OR-MODES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;An example usage is the wrapper above. That wrapper only makes sense
in html-mode, which can be specified.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;scheme&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;wrap-region-add-wrapper&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;p&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;/p&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;p&quot;&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;'html-mode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now &lt;strong&gt;p&lt;/strong&gt; will only wrap in html-mode.&lt;/p&gt;

&lt;p&gt;Lets say you want &lt;strong&gt;#&lt;/strong&gt; to wrap with &lt;strong&gt;#&lt;/strong&gt; and &lt;strong&gt;#&lt;/strong&gt; in all modes
except css-mode and java-mode, then &lt;strong&gt;#&lt;/strong&gt; should wrap with a comment
(&lt;strong&gt;/*&lt;/strong&gt; and &lt;strong&gt;*/&lt;/strong&gt;).&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;scheme&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;wrap-region-add-wrapper&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;wrap-region-add-wrapper&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/*&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*/&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;#&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;css-mode&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;java-mode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This feature is implemented by &lt;a href=&quot;https://github.com/rejeep&quot;&gt;me&lt;/a&gt; and
&lt;a href=&quot;https://github.com/tkf&quot;&gt;tkf&lt;/a&gt;, thanks again! :)&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/rejeep/wrap-region#readme&quot;&gt;README&lt;/a&gt;
for more information.&lt;/p&gt;</content>
		<author>
			<name>Johan Andersson</name>
			<uri>http://tuxicity.se/</uri>
		</author>
		<source>
			<title type="html">Tuxicity - Emacs</title>
			<link rel="self" href="http://feeds.feedburner.com/tuxicity-emacs"/>
			<id>http://tuxicity.se/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Tom Tromey: Difficulties of elisp</title>
		<link href="http://tromey.com/blog/?p=778&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=difficulties-of-elisp"/>
		<id>http://tromey.com/blog/?p=778</id>
		<updated>2012-01-28T03:36:02+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;The thesis that underlies my &lt;a href=&quot;http://tromey.com/blog/?p=751&quot; title=&quot;Emacs and Common Lisp, Part 2&quot;&gt;project to translate the Emacs C code to Common Lisp&lt;/a&gt; is that Emacs Lisp is close enough to Common Lisp that the parts of the Emacs C code that implement Lisp can be dropped in favor of the generally superior CL implementation.  This is generally true, but there are a few difficult bits.&lt;/p&gt;
&lt;h1&gt;Symbols&lt;/h1&gt;
&lt;p&gt;The primary problem is the translation of symbols when used as variable references.  Consider this code:&lt;/p&gt;
&lt;pre&gt;(defvar global 73)
(defun function (argument)
  (let ((local (something-else))
    (+ local argument global)))&lt;/pre&gt;
&lt;p&gt;More is going on here than meets the eye.&lt;/p&gt;
&lt;p&gt;First, Emacs Lisp uses dynamic binding by default (optional lexical binding is a new feature in Emacs 24).  This applies to function arguments as well as other bindings.  So, you might think you could translate this straightforwardly to:&lt;/p&gt;
&lt;pre&gt;(defvar global 73)
(declare (special global))
(defun function (argument)
  (declare (special argument))
  (let ((local (something-else))
    (declare (special local))
    (+ local argument global)))&lt;/pre&gt;
&lt;p&gt;This was the approach taken by &lt;a href=&quot;http://clocc.cvs.sourceforge.net/clocc/clocc/src/cllib/elisp.lisp?view=markup&quot;&gt;elisp.lisp&lt;/a&gt;; it defined macros for &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;let*&lt;/code&gt; (but forgot &lt;code&gt;defun&lt;/code&gt;) to do the dirty work:&lt;/p&gt;
&lt;pre&gt;(defmacro el::let* ((&amp;amp;rest vars) &amp;amp;rest forms)
  &quot;Emacs-Lisp version of `let*' (everything special).&quot;
  `(let* ,vars (declare (special ,@(mapcar #'from-list vars))) ,@forms))&lt;/pre&gt;
&lt;p&gt;But not so fast!  Emacs also has buffer-local variables.  These are variables where the value is associated with the current buffer; switching buffers makes a different binding visible to Lisp.  These require no special syntax, and a variable can be made buffer-local at any time.  So, we can break the above translation simply by evaluating:&lt;/p&gt;
&lt;pre&gt;(make-local-variable 'global)
(setq global 0)&lt;/pre&gt;
&lt;p&gt;Whoops!  Now the function will return the wrong result — the translation will have no way to know that is should refer to the buffer-local value.  (Well, ok, pretend that the &lt;code&gt;setq&lt;/code&gt; magically worked somehow…)&lt;/p&gt;
&lt;p&gt;My idea for implementing this is pretty convoluted.  Actually I have two ideas, one “user” and one “kernel”:&lt;/p&gt;
&lt;h2&gt;User&lt;/h2&gt;
&lt;p&gt;I think it is possible to use &lt;code&gt;define-symbol-macro&lt;/code&gt; on all symbols that come from Elisp, so that we can tell the CL compiler about the real implementation.  However, a symbol can either be treated as a variable, or it can be treated as a symbol-macro — not both at the same time.  So, we will need a second location of some kind to store the real value.  Right now I’m thinking a symbol in another package, but maybe a cons or some other object would work better. In either case, we’d need a macro, a &lt;code&gt;setf&lt;/code&gt; method for its expansion, and some extra-tricky redefinitions of &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;defun&lt;/code&gt; to account for this change.&lt;/p&gt;
&lt;p&gt;This would look something like:&lt;/p&gt;
&lt;pre&gt;(define-symbol-macro global (elisp:get-elisp-value 'global))
(defsetf elisp:get-elisp-value elisp:set-elisp-value))
;; Details left as an exercise for the reader.&lt;/pre&gt;
&lt;p&gt;This solution then has to be applied to buffer-, keyboard-, and frame-local variables.&lt;/p&gt;
&lt;h2&gt;Kernel&lt;/h2&gt;
&lt;p&gt;The kernel method is a lot simpler to explain: hack a Common Lisp implementation to directly know about buffer-locals.  SMOP!  But on the whole I think this approach is to be less preferred.&lt;/p&gt;
&lt;h1&gt;Other Problems&lt;/h1&gt;
&lt;p&gt;Emacs Lisp also freely extends other typical data types with custom attributes.  I consider this part of the genius of Emacs; a more ordinary program would work within the strictures of some defined, external language, but Emacs is not so cautious or constrained.  (Emacs is sort of a case study in breaking generally accepted rules of programming; which makes one wonder whether those rules are any good at all.)&lt;/p&gt;
&lt;p&gt;So, for example, strings in Emacs have properties as a built-in component.  The solution here is simple — we will just translate the Emacs string data type as a whole, something we probably have to do anyway, because Emacs also has its own idiosyncratic approach to different encodings.&lt;/p&gt;
&lt;p&gt;In elisp, &lt;code&gt;aref&lt;/code&gt; can be used to access elements of other vector-like objects, not just arrays; there are some other odd little cases like this.  This is also easily handled; but it left me wondering why things like &lt;code&gt;aref&lt;/code&gt; aren’t generic methods in CL. It often seems to me that a simpler, more orthogonal language lies inside of CL, struggling to get free. I try not to think these thoughts, though, as that way lies Scheme and the ridiculous fragmentation that has left Lisp unpopular.&lt;/p&gt;</content>
		<author>
			<name>tom</name>
			<uri>http://tromey.com/blog</uri>
		</author>
		<source>
			<title type="html">The Cliffs of Inanity » Emacs</title>
			<link rel="self" href="http://tromey.com/blog/?cat=11&amp;feed=rss2"/>
			<id>http://tromey.com/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en-US">Phil Hagelberg: in which an interview is posted</title>
		<link href="http://technomancy.us/157"/>
		<id>tag:technomancy.us,2007:in%20which%20an%20interview%20is%20posted</id>
		<updated>2012-01-27T03:58:25+00:00</updated>
		<content type="html" xml:lang="en-US">&lt;p&gt;The folks over at The Setup just posted
  &lt;a href=&quot;http://phil.hagelberg.usesthis.com/&quot;&gt;an interview&lt;/a&gt;
  with me wherein I rant about hardware, interactivity, and
  Emacs.&lt;/p&gt;

&lt;p&gt;Note: this was written up over a month ago; if I were interviewed
  today I couldn't help but mention
  the &lt;a href=&quot;http://nixos.org/nix&quot;&gt;Nix&lt;/a&gt; package manager. I use
  it on my Debian Squeeze system to complement &lt;tt&gt;apt-get&lt;/tt&gt;; I
  get all the system-level stuff that has to be stable from Debian
  and anything that needs to be fresh from Nix.&lt;/p&gt;</content>
		<author>
			<name>Phil Hagelberg</name>
			<uri>http://technomancy.us/</uri>
		</author>
		<source>
			<title type="html">Technomancy</title>
			<link rel="self" href="http://technomancy.us/feed/atom"/>
			<id>tag:technomancy.us,2007:blog/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Rubén Berenguel: Learning to use vim in my iPad (even if I'm an emacs geek)</title>
		<link href="http://www.mostlymaths.net/2012/01/learning-to-use-vim-in-my-ipad-even-if.html"/>
		<id>tag:blogger.com,1999:blog-13497321.post-3339117269073498949</id>
		<updated>2012-01-26T14:37:08+00:00</updated>
		<content type="html">&lt;a href=&quot;http://4.bp.blogspot.com/-u6OHQLfCX6c/TyFasu3pjxI/AAAAAAAADb8/pba4zEyVqNY/s1600/VimEmacs.jpg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;http://4.bp.blogspot.com/-u6OHQLfCX6c/TyFasu3pjxI/AAAAAAAADb8/pba4zEyVqNY/s200/VimEmacs.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;capital&quot;&gt;J&lt;/span&gt;ust in case you don't know, &lt;a href=&quot;http://en.wikipedia.org/wiki/Vi&quot;&gt;vi&lt;/a&gt; is an advanced text editor, drting back from the same era as emacs was developed (emacs started slightly earlier). Sort of the Jekyll to &lt;a href=&quot;http://www.mostlymaths.net/search/label/emacs&quot;&gt;emacs&lt;/a&gt;' Dr Hyde. Emacs users despise vi users, and vi users mock emacs users. This is what the &lt;a href=&quot;http://en.wikipedia.org/wiki/Editor_wars&quot;&gt;editor wars&lt;/a&gt; are all about: &quot;Eight Megabytes And Constantly Swapping&quot; versus &quot;vi has two modes: writing and beeping&quot;. If you have been long enough in this blog, you know I'm in the emacs side, but you also know I'm curious enough to delve into the other side.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;My first contact with vi was in our first programming class at the University, &lt;em&gt;Informatica&lt;/em&gt; (Computer Science). Vi was the editor of choice for the course, so much that you did not have any other option given. Along with a Linux cheatsheet and a short C manual came a vi cheatsheet. A lot of people came to hate vi, a lot of people came to love it. I was more in the hating side, but it wasn't that bad. After a while I just started using a &quot;normal&quot; Linux editor (it was Kate, maybe?) and kept using it (or UltraEdit when I was in Windows) until the end of my degree.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;When I finished my degree I had to be a teacher of &lt;em&gt;Calcul Numeric&lt;/em&gt; (Numerical Analysis), the third (and last) programming class in the degree. At home I was still using Windows, because the wifi card in my notebook had no Linux drivers and in my office we were using Ubuntu. I needed a cross-platform editor that was quick, versatile and could last for a lifetime. I tried vi (again) and emacs, emacs won the war for two reasons. First was the fact that it was extensible programming in Lisp, and I had already a decent knowledge of Lisp. The second was &lt;a href=&quot;http://www.mostlymaths.net/2009/09/auctex-again.html&quot;&gt;AucTeX&lt;/a&gt; and its &quot;preview&quot; option for LaTeX editing. Nothing can beat pressing C-p C-p C-d and seeing your formulae come to life in your editor. I became an emacs advocate for this reason, then after 5 or 6 years I've found many more reasons why this is &lt;strong&gt;the&lt;/strong&gt; editor. Or, the operating system, if you prefer.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;But advocacy is nice, but knowing all the players in the field is better. My department pals used vi (at least most of them), and it was impossible to convince them to switch. I decided learning vi (or vim, vi iMproved)  was something I had to do some day, to learn what was there. After all, if I liked it so much I could set viper-mode in emacs and use vi keys in emacs. The best of two worlds, if that world is so nice.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Then the guys at Applidium released a &lt;a href=&quot;http://itunes.apple.com/us/app/vim/id492668168?mt=8&quot;&gt;Vim port for iOS devices&lt;/a&gt;. Whoah! Even if I'm an emacs guy to the bone, a modal editor is way better than anything else available in the app store, at least for raw editing power. And I say with knowledge, because I've tried most writing apps for iOS devices (see &lt;a href=&quot;http://www.whatsoniphone.com/blog/roundup-of-the-best-writing-apps-for-ipad-nanowrimo-edition/&quot;&gt;this post&lt;/a&gt;).&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;As an additional reason, Matt Might posted a New Year's post detailing several &lt;a href=&quot;http://matt.might.net/articles/programmers-resolutions/&quot;&gt;resolutions for programmers&lt;/a&gt;. Among them was breaking your comfort zone to keep your mind sharp. The first example? Switching to vi from emacs or vice-versa. He used to be an emacs user before getting to use Vi. I don't think I could go that far, but these were enough reasons: advocacy (from me, not against me), iPad+bluetooth keyboard and breaking my comfort zone.&lt;/div&gt;&lt;h2 class=&quot;title&quot;&gt;How is the experience so far?&lt;/h2&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Well, I'm writing this post in my sofa, with my &lt;a href=&quot;http://www.amazon.com/gp/product/B002C7481G/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=rbersblog-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=B002C7481G&quot;&gt;iPad&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002C7481G&amp;amp;camp=217145&amp;amp;creative=399349&quot; style=&quot;border-bottom-style: none !important; border-color: initial !important; border-left-style: none !important; border-right-style: none !important; border-top-style: none !important; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important;&quot; width=&quot;1&quot; /&gt; and my bluetooth keyboard sitting in my lap. I'm still getting used to having to exit editing mode to move around: I'm very used to pressing &lt;span style=&quot;font-family: 'courier new';&quot;&gt;C-a&lt;/span&gt; or &lt;span style=&quot;font-family: 'courier new';&quot;&gt;C-e&lt;/span&gt; to go to the beginning of end of line. An additional problem is that even with the bluetooth keyboard, &lt;span style=&quot;font-family: 'courier new';&quot;&gt;Esc&lt;/span&gt; can't be mapped to the Esc event, and I needed something to do it. I have &lt;span style=&quot;font-family: 'courier new';&quot;&gt;jk&lt;/span&gt; (pressed together) for it. It was a suggestiond I saw in Hacker News' comment thread for the release of the app, and it's quite handy. Not so much with the on-screen keyboard, but for now it's okay. To remap this, press backslash (the current mapping for Esc) and then &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:imap jk &lt;/span&gt;. Of course if your usual writting language involves writing the jk combination frequently (I think I could come up with one or two examples in Icelandic), this is not the best combination. The other suggested option is &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:imap al &lt;/span&gt;. Easy to tap in a virtual keyboard, not so straightforward in a normal keyboard.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;I found out also how to change the font size, at least for now this works (maybe there will be more fonts available in the future), type &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:set guifont=Courier:h24&lt;/span&gt; (for 24 pixels)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;To round everything, I just installed the famous &lt;a href=&quot;http://ethanschoonover.com/solarized&quot;&gt;solarized color theme&lt;/a&gt;, dark in vim for iPad.  Until now I had just thought it was an overhyped color scheme: I had tried in my emacs and didn't enjoy it that much. But in my &lt;a href=&quot;http://www.amazon.com/gp/product/B002C7481G/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=rbersblog-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=B002C7481G&quot;&gt;iPad&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002C7481G&amp;amp;camp=217145&amp;amp;creative=399349&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt; it shines with a distinct colour, it's so much easier on my eyes that it hurts to get out and write an email! To install it in your vim for iOS, first download solarized.vim from the git repository, then plug your iDevice and use iTunes File Sharing to copy this file to the vim app. Then open vim, &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:e solarized.vim&lt;/span&gt; and &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:call mkdir(.vim/colors/)&lt;/span&gt; (to create the directory needed for it) &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:w .vim/colors/solarized.vim&lt;/span&gt; This is just because I didn't seem to get iTunes File Sharing to work with hidden files (a file starting with a dot is hidden). Then you have to add the following to your &lt;span style=&quot;font-family: 'courier new';&quot;&gt;.vimrc&lt;/span&gt;:&lt;/div&gt;&lt;blockquote&gt;&lt;span style=&quot;font-family: 'courier new';&quot;&gt;syntax enable&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'courier new';&quot;&gt;set background=dark&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'courier new';&quot;&gt;colorscheme solarized&lt;/span&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;I recommend using this app for any emacs lover out there with an iPad. Of course, it is not emacs, but vim is a pretty awesome text editor, and it's always handy to learn to use it.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;To have a useful list of vim commands at hand I installed the &lt;a href=&quot;http://itunes.apple.com/us/app/vimmy/id361221825?mt=8&quot;&gt;Vimmy&lt;/a&gt; app, a universal app with the most common vi commands. I can switch to it via the multitasking gestures in my iPad, or use it in my iPod Touch while I'm using it in the iPad.&lt;/div&gt;&lt;h2 class=&quot;title&quot;&gt;Conclusion&lt;/h2&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;I don't think I'll ever switch from emacs to vim any time in the future, as I said AucTeX is definitely too good. Of course since then I've found many more things I love: having a REPL for Python, Clojure or Lisp inside my editor. There's even a REPL for PostScript! Also local remote editing with tramp... There are too many things I use on a daily basis and I can't barely remember, they are so entrenched in my &lt;span style=&quot;font-family: 'courier new';&quot;&gt;.emacs&lt;/span&gt; file I can't even realise what they are. But for my iPad it is an awesome addition to write text on the go.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Again, if you have never used vim before and are interested, give it a try. Of course the first time you open it it will be... a jump into the unknown. Tap the screen, press &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:e&lt;/span&gt; filename and start editing happily. Esc (well, &lt;span style=&quot;font-family: 'courier new';&quot;&gt;jk&lt;/span&gt; or backslash, as the initial mapping) &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:w&lt;/span&gt; to save. And you can even &lt;span style=&quot;font-family: 'courier new';&quot;&gt;:q&lt;/span&gt; to exit to springboard!   &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/13497321-3339117269073498949?l=www.mostlymaths.net&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>RBerenguel</name>
			<email>noreply@blogger.com</email>
			<uri>http://www.mostlymaths.net/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Mostly Maths</title>
			<subtitle type="html">Programming for backyard gardeners, cooking for linux users, drawing for mathematicians. WTF?</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/13497321/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-13497321</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Tom Tromey: Emacs and Common Lisp, Part 2</title>
		<link href="http://tromey.com/blog/?p=751&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=emacs-and-common-lisp-part-2"/>
		<id>http://tromey.com/blog/?p=751</id>
		<updated>2012-01-25T15:01:21+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;This is a followup to my &lt;a href=&quot;http://tromey.com/blog/?p=709&quot;&gt;earlier post&lt;/a&gt; on converting the Emacs C code into Common Lisp.  This one is a bit more technical, diving into some specifics of the conversion process.&lt;/p&gt;
&lt;h1&gt;Basics&lt;/h1&gt;
&lt;p&gt;One important fact is that we do not need to convert an arbitrary C program to Common Lisp.  This might or might not be efficiently possible — but we do not care.  We only need to convert Emacs.  This is simpler for two reasons.  First, we can just ignore any C construct that Emacs does not use.  If the translator barfs after some new update, we can fix it then.  Second, Emacs itself is already written in a relatively Lispy style, being a Lisp implementation itself.  We further exploit this by allowing the translator to know some details about Emacs.  As a trivial example, all the &lt;code&gt;Smumble&lt;/code&gt; globals created by the &lt;code&gt;DEFUN&lt;/code&gt; marco need not be translated into Common Lisp as structure constants — they are an artifact of the implementation, and will show up directly in the generated &lt;code&gt;defuns&lt;/code&gt; instead.&lt;/p&gt;
&lt;h1&gt;What to ignore&lt;/h1&gt;
&lt;p&gt;A good portion of Emacs is simply redundant in the CL world.  There are a few types (cons, vector, integers, functions) that are shareable — in fact, sharing these is part of the goal of this effort.  There are also a number of functions which are effectively identical.  There are also entire redundant modules, like the garbage collector, or the bytecode interpreter.&lt;/p&gt;
&lt;p&gt;The question is how to have the translator differentiate between what is useful and what is not, without breaking builds of future versions of Emacs.&lt;/p&gt;
&lt;p&gt;I don’t currently think there is a high road to solving this problem.  For modules like the GC, I plan to have ad hoc translator rules for the particular source files.  For functions and data types, I’m adding new GCC attributes that I can use to mark the ignorable definitions.&lt;/p&gt;
&lt;h1&gt;Types&lt;/h1&gt;
&lt;p&gt;There are two type-related issues that arise when translating the source.&lt;/p&gt;
&lt;p&gt;First, how should Emacs-specific types be represented?  Primarily these types are structures, like &lt;code&gt;struct buffer&lt;/code&gt; or &lt;code&gt;struct string&lt;/code&gt; (we cannot use the CL string type, because Emacs adds properties directly to the string, and Emacs has its own idiosyncratic character handling).  My answer here is to just straightforwardly translate them to &lt;code&gt;defstruct&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The other question is when translating a C function, what do we do with the types of local variables?  For the most part I am pretending that they don’t exist.  This works fine except for local arrays and structures, but these are easily handled by initializing variables properly. My rationale is that while this is slower, it lets me get something working more quickly, and we can always update the translator to emit CL type declarations later on.&lt;/p&gt;
&lt;p&gt;This simple approach doesn’t actually cover all the needed cases.  For example, there is code in Emacs that takes the address of a local variable and passes it somewhere.  This is easy to deal with; much of the remaining work is just digging through the code looking for special cases to clean up.&lt;/p&gt;
&lt;p&gt;I’m similarly omitting type declarations from the generated structures.  One possible nice side effect of this approach is that it will make it easier to lift Emacs’ file-size restrictions, because there will no longer be any code assuming that the size is a &lt;code&gt;fixnum&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;Macros&lt;/h1&gt;
&lt;p&gt;Many low-level details of the Emacs implementation are hidden in macros.  For example, Emacs stuffs some type information into the low-order bits of pointers.  It uses macros to add or remove this information.  For this build, I redefine these macros to do nothing.  This makes the GCC Gimple representation much closer to the abstract meaning of the program, and thus simpler to translate.&lt;/p&gt;
&lt;p&gt;There are also some macros that are useful to redefine so that we can more easily hook into them from the translator.  For example, Emacs has a C macro &lt;code&gt;INTEGERP&lt;/code&gt; that is used to check whether its argument is an integer.  Normally this macro uses bit twiddling to get its answer, but I redefine it like so:&lt;/p&gt;
&lt;pre&gt;#undef INTEGERP
extern Lisp_Object *INTEGERP (Lisp_Object)
    __attribute__((lisp_form(&quot;integerp&quot;)));&lt;/pre&gt;
&lt;h1&gt;Example&lt;/h1&gt;
&lt;p&gt;The translator is not nearly complete, but it can already do a fair job at translating simple functions.  For example, here is “&lt;code&gt;forward-point&lt;/code&gt;” from the Emacs C code:&lt;/p&gt;
&lt;pre&gt;DEFUN (&quot;forward-point&quot;, Fforward_point, Sforward_point, 1, 1, 0,
       doc: /* Return buffer position N characters after (before if N negative) point.  */)
  (Lisp_Object n)
{
  CHECK_NUMBER (n);

  return make_number (PT + XINT (n));
}&lt;/pre&gt;
&lt;p&gt;Here is what the translator comes up with:&lt;/p&gt;
&lt;pre&gt;(defun Fforward_point (n)
  (let (
    temp-var-0
    Qintegerp.316
    temp-var-1
    current_buffer.317
    temp-var-2
    )
    (block nil (tagbody
      bb-0
        ; no gimple here
      bb-1
        ; no gimple here
      bb-2
        (setf temp-var-0 (integerp n))
        (if (== temp-var-0 nil)
          (go bb-3)
          (go bb-4))
      bb-3
        (setf Qintegerp.316 Qintegerp)
        (wrong_type_argument Qintegerp.316 n)
      bb-4
        (setf current_buffer.317 current_buffer)
        (setf temp-var-2 (buffer-pt current_buffer.317))
        (setf temp-var-1 (+ temp-var-2 n))
        (return temp-var-1)
  ))))

(defun elisp:forward-point (arg0)
  (Fforward_point arg0))&lt;/pre&gt;
&lt;p&gt;The output looks pretty weird, because the translator works after GCC’s CFG is built, and so the most straightforward translation is to use this mess with &lt;code&gt;tagbody&lt;/code&gt;.  I doubt this matters much, but in any case the translator is readily hackable — it is still less than 400 lines of Python, including comments.&lt;/p&gt;
&lt;p&gt;One thing to note is the translation of “&lt;code&gt;PT&lt;/code&gt;“.  This is actually a macro that refers to the current buffer:&lt;/p&gt;
&lt;pre&gt;#define PT (current_buffer-&amp;gt;pt + 0)&lt;/pre&gt;
&lt;p&gt;The translator properly turns this into a reference to “&lt;code&gt;buffer-pt&lt;/code&gt;“.&lt;/p&gt;
&lt;p&gt;Another detail is the handling of packages.  My plan is to put the Emacs implementation into one package, and then any elisp into a second package called “&lt;code&gt;elisp&lt;/code&gt;“.  A &lt;code&gt;DEFUN&lt;/code&gt; in the C code will actually generate two functions: the internal one, and the elisp-visible one; hence the “&lt;code&gt;elisp:&lt;/code&gt;” in the translation.&lt;/p&gt;
&lt;h1&gt;Next Steps&lt;/h1&gt;
&lt;p&gt;There’s still a good amount of work to be done.  The converter punts on various constructs; type translation is implemented but not actually wired up to anything; the translator should emit definitions for alien functions; and plenty more.&lt;/p&gt;</content>
		<author>
			<name>tom</name>
			<uri>http://tromey.com/blog</uri>
		</author>
		<source>
			<title type="html">The Cliffs of Inanity » Emacs</title>
			<link rel="self" href="http://tromey.com/blog/?cat=11&amp;feed=rss2"/>
			<id>http://tromey.com/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">&quot;David's World&quot;: Cognitive Modeling and Computational Linguistics</title>
		<link href="http://www.davids-world.com/archives/2012/01/cognitive_model.html"/>
		<id>tag:www.davids-world.com,2012://1.264</id>
		<updated>2012-01-25T02:30:13+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;
This workshop provides a venue for work in computational psycholinguistics:  we invite a broad spectrum of work in the cognitive science of language, at all levels of analysis from sounds to discourse.  It will be held at &lt;a href=&quot;http://www.naaclhlt2012.org/&quot;&gt;NAACL-HLT'2012&lt;/a&gt; in Montreal.
&lt;/p&gt;&lt;p&gt;
Find the full &lt;a href=&quot;http://www.psy.cmu.edu/~cmcl/2012/cfp.html&quot;&gt;Call for Papers here&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>David Reitter</name>
			<uri>http://www.davids-world.com/</uri>
		</author>
		<source>
			<title type="html">David's World</title>
			<subtitle type="html">... looms large and daunting.</subtitle>
			<link rel="self" href="http://www.davids-world.com/atom.xml"/>
			<id>tag:www.davids-world.com,2012://1</id>
		</source>
	</entry>

	<entry>
		<title type="html">Ben Simon: My Dozen Lines of Code</title>
		<link href="http://benjisimon.blogspot.com/2012/01/my-dozen-lines-of-code.html"/>
		<id>tag:blogger.com,1999:blog-12753102.post-5866856752343038211</id>
		<updated>2012-01-24T13:52:00+00:00</updated>
		<content type="html">&lt;p&gt;
Today's &lt;a href=&quot;http://programmingpraxis.com/2012/01/24/a-dozen-lines-of-code/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ProgrammingPraxis challenge&lt;/a&gt; is this gem:&lt;/p&gt;

&lt;blockquote&gt;
A high-school programming teacher recently asked for examples of short programs with a high “cool” factor, the idea being to get his students interested in programming computers. I’m not sure the suggestions would work; today’s high-school students have been surrounded by computers their entire lives, and it takes a lot to make them think a program is cool. Being from a different generation, I can remember when I thought it was cool that a program properly skipped over the perforation on a stack of green-bar paper — many programs didn’t!

Your task is to write a cool program in a dozen lines of code. You can define cool in any way that you wish. Try not to abuse the definition of “line of code,” at least not too badly; to be concrete, we will say that your solution must not exceed 12 lines, and each line must not exceed 80 characters including white space. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.
&lt;/blockquote&gt;

&lt;p&gt;
The &lt;a href=&quot;http://benjisimon.blogspot.com/2009/05/chiming-in-on-mit-scheme-to-python.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ideal intro-to-programming example&lt;/a&gt; should meet two needs: (1) it should be relevant and interesting to students and (2) it should lay the groundwork for learning good habits.
&lt;/p&gt;

&lt;p&gt;
Meeting those two goals in 12 lines of code is tricky. But, I think doable. In fact, I believe I've done it below.&lt;/p&gt;

&lt;p&gt;
Using &lt;a href=&quot;http://www.autohotkey.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;AutoHotKey&lt;/a&gt;, I've written a simple implementation of the classic &lt;a href=&quot;http://en.wikipedia.org/wiki/Boss_key&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Boss Key&lt;/a&gt;. While not exactly some exciting 3D game, I'd say that this sort of example is relevant and at least interesting to students. And while it may not be obvious, there are a number of best practices taught, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the right programming language for the job. AutoHotKey makes scripting trivial, so embrace it.&lt;/li&gt;
&lt;li&gt;Learn about regular expressions&lt;/li&gt;
&lt;li&gt;Learn how to read language &lt;a href=&quot;http://www.autohotkey.com/docs/commands.htm&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;reference documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn about loops&lt;/li&gt;
&lt;li&gt;Learn that programming is all about solving your problems and making life better&lt;/li&gt;
&lt;li&gt;Learn about variables and the advantages of not hard coding values throughout code&lt;/li&gt;
&lt;li&gt;Many opportunities for growing this example&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
OK, enough talk, here's the code:&lt;/p&gt;

&lt;pre&gt;;; A simple Boss Key app. My contribution to the dozen-line program contest.
NeedToHide = .*(Mozilla|Explorer|Chrome).*
WantToShow = .*emacs.*
#b::
  SetTitleMatchMode, RegEx
  WinGet, id, list, %NeedToHide%
  Loop, %id% {
    this_id := id%A_Index%
    WinHide, ahk_id %this_id%
  }
  WinActivate, %WantToShow%
  Return,
&lt;/pre&gt;

&lt;p&gt;
You can run this by downloading &lt;a href=&quot;http://www.autohotkey.com/download/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;autohotkey&lt;/a&gt; (it's free) and running:&lt;/p&gt;

&lt;pre&gt;  autohotkey bosskey.ahk
&lt;/pre&gt;


&lt;p&gt;
Once you run the above code, hitting &lt;tt&gt;Windows+b&lt;/tt&gt; will hide all your browser windows and bring &lt;tt&gt;emacs&lt;/tt&gt; to the front. The windows aren't just minimized, they are hidden so they don't appear in your start bar.&lt;/p&gt;

&lt;p&gt;
You'll probably want this command available (&lt;tt&gt;Windows+w&lt;/tt&gt;) too, as it restores all your browser windows:&lt;/p&gt;


&lt;pre&gt;#w::
  DetectHiddenWindows, On
  SetTitleMatchMode, RegEx
  WinGet, id, list, %NeedToHide%
  Loop, %id% {
    this_id := id%A_Index%
    WinShow, ahk_id %this_id%
  }
  WinActivate
  Return
&lt;/pre&gt;

&lt;p&gt;
And yes, I know the syntax and semantics of AutoHotKey are hideous. But, given how powerful it is, I think it's a platform worth learning on.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/12753102-5866856752343038211?l=benjisimon.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Ben Simon</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=cb318680d0fab4cbaec11d558af0f71f</uri>
		</author>
		<source>
			<title type="html">Ben Simon</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=cb318680d0fab4cbaec11d558af0f71f&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=cb318680d0fab4cbaec11d558af0f71f</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Alex Bennée: Switching buffers and Google+</title>
		<link href="http://www.bennee.com/~alex/blog/2012/01/24/switching-buffers-and-google/"/>
		<id>http://www.bennee.com/~alex/blog/?p=2573</id>
		<updated>2012-01-24T08:36:44+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;When you do so much of your work in one text editor the efficiency of switching between buffers becomes more important. For a long time I’ve had two bindings “C-x b” and “C-x C-b” which in days of yore I had bound to &lt;em&gt;bs-show&lt;/em&gt; and a hacked up &lt;em&gt;list-buffers&lt;/em&gt; that opened another window. These are broadly the “quick switch between working buffers” and “show me all the buffers”.&lt;/p&gt;
&lt;p&gt;For some time I’ve relegated &lt;em&gt;bs-show&lt;/em&gt; to the longer binding and now use Stephen Bach’s excellent &lt;a href=&quot;https://github.com/sjbach/lusty-emacs&quot;&gt;Lusty Explorer&lt;/a&gt; which works really well when you know the name of the buffer and it’s fairly unique. However when you’ve been going a while it can get un-manageable with a large number of open buffers, especially if you’ve opened second copy of a file from another source tree. This is what I would use the old classic &lt;em&gt;bs-show&lt;/em&gt; for.&lt;/p&gt;
&lt;p&gt;A few days ago I discovered &lt;a href=&quot;http://www.emacswiki.org/emacs/IbufferMode&quot;&gt;ibuffer-mode&lt;/a&gt; with it’s &lt;em&gt;ibuffer-bs-show&lt;/em&gt; buffer navigator. Looking back through the Planet Emacsen history I can see it has been mentioned before and given it’s been in Emacs since version 22 I’m surprised I hadn’t cottoned on to it earlier.&lt;/p&gt;
&lt;p&gt;One thing that might have put me off is the initial buffer list can be quite sparse. By default you only see buffers with files associated which misses out IRC, Edit with Emacs and *scratch* buffers. However hit “h” and you’ll see there are a plethora of quick keys for chaning the view. A quick “//” and all filters are removed and you can quickly filter by different criteria. To get the most out of the mode you’ll probably want to set up some custom filters (“/r&amp;lt;completing filter name”&amp;gt;) to make quickly switching to groups of buffers easy. I currently have “work”, “remote”, “irc” and “logs” as filters. You can filter by name as well as major-mode.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ibuffer-mode&lt;/em&gt; does have the concept of Filter Groups although I’m not sure what they add on top of having normal filters which as far as I can tell can be arbitrarily complex. It also has some quite handy sorting and selection modes e.g. “sv” – sort by last viewing time. Given the amount of space the wiki devotes &lt;a href=&quot;http://www.emacswiki.org/emacs/CategoryBufferSwitching&quot;&gt;to the topic&lt;/a&gt; I wish I’d re-examined my buffer switching habits sooner. The change is already paying dividends for my productivity.&lt;/p&gt;
&lt;p&gt;Before I go I thought I’d put in a quick mention of Google+. There is growing community of fellow Emacs users starting to post on it. One thing that attracts me to Google+ over Facebook (too data-miney) and Twitter (too short) is the concept of “Circles”. It makes sharing geeky Emacs posts with people that might actually care easy while sparing them the flood of baby pictures I share with friends and family. If you’d like to &lt;a href=&quot;https://plus.google.com/110732415405459842150/posts&quot;&gt;follow me&lt;/a&gt; or my &lt;a href=&quot;https://plus.google.com/b/109717789196934058146/&quot;&gt;alter-ego&lt;/a&gt; please do mention Emacs in your profile or in a message so I can assign you to the correct circles.&lt;/p&gt;</content>
		<author>
			<name>Alex</name>
			<uri>http://www.bennee.com/~alex/blog</uri>
		</author>
		<source>
			<title type="html">Alex's Adventures on the Infobahn » emacs</title>
			<subtitle type="html">the wanderings of a supposed digital native</subtitle>
			<link rel="self" href="http://www.bennee.com/~alex/blog/tag/emacs/feed/"/>
			<id>http://www.bennee.com/~alex/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Ignacio Paz Posse: emacs using recode-region for encoding failures</title>
		<link href="http://ignaciopp.wordpress.com/2012/01/23/emacs-using-recode-region-for-encoding-failures/"/>
		<id>http://ignaciopp.wordpress.com/?p=749</id>
		<updated>2012-01-23T21:07:05+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I had an encoding issue that was bugging me inside the remember-data-file. I don’t know exactly how some latin-1 characters copy-pasted there ended up being saved as raw-text and were shown like non-ASCII characters (so a multibyte characters like “é” will appear with it’s escaped octal code “303\251″ )&lt;/p&gt;
&lt;p&gt;I tried at first setting the file’s encoding system with the tag “-*-coding: utf-8 -*-”, though it seemed not sufficient. The raw characters remained there and I soon grew tired of having to type in: “&lt;strong&gt;utf-8&lt;/strong&gt;” at the prompt to select the encoding every time I needed to save the file. &lt;/p&gt;
&lt;p&gt;Today searching the manual found &lt;a href=&quot;http://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html&quot; title=&quot;http://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Coding.html&quot;&gt;here&lt;/a&gt; one easy cure on the command “recode-region” which allows to convert the text that was decoded with the wrong coding system.&lt;/p&gt;
&lt;p&gt;Really all it took after marking the whole buffer (C-x h) was doing: “M-x&lt;strong&gt; recode-region&lt;/strong&gt; RET” “Text was was really in: &lt;strong&gt;utf-8&lt;/strong&gt;” “But was interpreted as: &lt;strong&gt;raw-text”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That was it!, the drag is over, I’m back to storing notes quickly doing just &lt;strong&gt;C-c r&lt;/strong&gt; and &lt;strong&gt;C-c C-x&lt;/strong&gt; with the worthy &lt;a href=&quot;http://www.emacswiki.org/emacs/RememberMode&quot; title=&quot;remember&quot;&gt;remember &lt;/a&gt;mode.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gofacebook/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/facebook/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gotwitter/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/twitter/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/ignaciopp.wordpress.com/749/&quot; rel=&quot;nofollow&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ignaciopp.wordpress.com/749/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ignaciopp.wordpress.com&amp;amp;blog=7647034&amp;amp;post=749&amp;amp;subd=ignaciopp&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>ignacio</name>
			<uri>http://ignaciopp.wordpress.com</uri>
		</author>
		<source>
			<title type="html">Nachopp's Blog » emacs</title>
			<subtitle type="html">notes and tidbits about emacs, gnu tools, web programming, and sysadmin related stuff</subtitle>
			<link rel="self" href="http://ignaciopp.wordpress.com/tag/emacs/feed/"/>
			<id>http://ignaciopp.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html">Robert Adesam: First Post</title>
		<link href="http://robert-adesam.blogspot.com/2011/01/first-post.html"/>
		<id>tag:blogger.com,1999:blog-1139989336831951363.post-6281565678966294358</id>
		<updated>2012-01-23T16:13:54+00:00</updated>
		<content type="html">Ok my first blog post, should be about me right? No, you can read about me on my web site &lt;a href=&quot;http://www.adesam.se/robert&quot;&gt;http://www.adesam.se/robert/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Instead let's talk about what I am presumably going to write about. I think it's going to be about computers, technology in general and &lt;a href=&quot;http://en.wikipedia.org/wiki/Emacs&quot;&gt;Emacs&lt;/a&gt; in particular. Maybe I will find time to post notes about &lt;a href=&quot;http://en.wikipedia.org/wiki/Getting_Things_Done&quot;&gt;GTD&lt;/a&gt; etc as well...&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Emacs&quot;&gt;Emacs &lt;/a&gt;-- what is it and why do I use it? It's a way of life... or as stated in &lt;a href=&quot;http://www.wikipedia.org/&quot;&gt;Wikipedia&lt;/a&gt;, it's a text editor that is higly extensible and customisable. If you know a little bit of &lt;a href=&quot;http://en.wikipedia.org/wiki/LISP&quot;&gt;LISP&lt;/a&gt; one can very quickly tweak Emacs to do what you want. I use Emacs for &lt;a href=&quot;http://www.gnu.org/software/auctex/&quot;&gt;writing papers&lt;/a&gt;, programming, &lt;a href=&quot;https://launchpad.net/vm&quot;&gt;reading/writing emails&lt;/a&gt;, and &lt;a href=&quot;http://www.orgmode.org/&quot;&gt;organising my life&lt;/a&gt;. Now days I am quite comfortable with Emacs, but over the years I have tried to exchange Emacs for other tools like Eclipse, Thunderbird, Mail.app, etc but I have given up. Emacs is for me, and it works basically the same way on all systems I use: Mac OS X, Windows, Linux, Solaris...&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1139989336831951363-6281565678966294358?l=robert-adesam.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Robert Adesam</name>
			<email>noreply@blogger.com</email>
			<uri>http://robert-adesam.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Robert Adesam</title>
			<subtitle type="html">About Technology in General and Emacs in Particular.</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/1139989336831951363/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-1139989336831951363</id>
		</source>
	</entry>

	<entry>
		<title type="html">Flickr tag 'emacs': Vim user</title>
		<link href="http://www.flickr.com/photos/santoshwadghule/6736069343/"/>
		<id>tag:flickr.com,2004:/photo/6736069343</id>
		<updated>2012-01-21T14:26:29+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/people/santoshwadghule/&quot;&gt;santosh.wadghule&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/santoshwadghule/6736069343/&quot; title=&quot;Vim user&quot;&gt;&lt;img alt=&quot;Vim user&quot; height=&quot;240&quot; src=&quot;http://farm8.staticflickr.com/7169/6736069343_4803f5dc98_m.jpg&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love &lt;a href=&quot;http://www.vim.org/&quot; rel=&quot;nofollow&quot;&gt;vim&lt;/a&gt; editor&lt;/p&gt;</content>
		<author>
			<name>santosh.wadghule</name>
			<email>nobody@flickr.com</email>
			<uri>http://www.flickr.com/photos/tags/emacs/</uri>
		</author>
		<source>
			<title type="html">Recent Uploads tagged emacs</title>
			<link rel="self" href="http://api.flickr.com/services/feeds/photos_public.gne?tags=emacs&amp;lang=en-us&amp;format=rss_200"/>
			<id>http://www.flickr.com/photos/tags/emacs/</id>
		</source>
	</entry>

	<entry>
		<title type="html">Vincent Toups: Shadchen: A pattern Matching Library for Elisp</title>
		<link href="http://dorophone.blogspot.com/2012/01/shadchen-pattern-matching-library-for.html"/>
		<id>tag:blogger.com,1999:blog-8115687546775931822.post-3510683703473684696</id>
		<updated>2012-01-19T19:52:27+00:00</updated>
		<content type="html">&lt;h2&gt;A pattern matching library for Emacs Lisp&lt;/h2&gt;

&lt;p&gt;One of the things I like most about Racket (and other functional
programming languages) is that they have good support for pattern
matching, which is a great way to simultaneously dispatch on structure
type, enforce constraints on values held in a data structure, and bind
variables.  A tremendous amount of code is devoted to these
activities, and pattern matching combines them all in a succinct, easy
to read form.  &lt;/p&gt;

&lt;p&gt;It's been my intent for some time to write a complete pattern matching
library for Emacs Lisp, since it is a Lisp which I use very
frequently.  Shadchen is the first time any attempt to do so has
resulted in a reasonable product.  Shadchen is a Yiddish word for
matchmaker, in case you were wondering about the title.  The library
is available in my &lt;a href=&quot;https://github.com/VincentToups/emacs-utils&quot;&gt;elisp repository&lt;/a&gt;.  Even though it comes in a giant
directory full of junk, it runs standalone.&lt;/p&gt;  [EDIT: &lt;a href=&quot;https://github.com/VincentToups/shadchen-el&quot;&gt;Here it is in a standalone repo&lt;/a&gt;.]

&lt;h2&gt;How it Works&lt;/h2&gt;

&lt;p&gt;Shadchen's interface consists of just three forms.  &lt;code&gt;match&lt;/code&gt; is the
work horse - it actually performs a pattern match.  &lt;code&gt;match&lt;/code&gt; has the
syntax:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(match &amp;lt;VALUE&amp;gt;
 (&amp;lt;PATTERN1&amp;gt; FORMS ...)
 (&amp;lt;PATTERN2&amp;gt; FORMS ...)
 ...
 (&amp;lt;PATTERNN&amp;gt; FORMS ...))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;VALUE&amp;gt;&lt;/code&gt; expression is evaluated, and then each pattern attempts
to match against it.  If a pattern succeeds, it's associated FORMS are
evaluated, in a context where the environment has been extended by the
pattern's bindings.  If a match fails, the next pattern is tried.  If
no patterns succeed, an error occurs.&lt;/p&gt;

&lt;p&gt;Here is an example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(match (list 1 2 3)
  ((list x y z) (+ x y z)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The expression &lt;code&gt;(list x y z)&lt;/code&gt; is the pattern in the above expression.
Patterns are such that they resemble the code which creates the data
structure in question, in this case a three element list.  The pattern
&lt;code&gt;(list x y z)&lt;/code&gt; basically specifies that a match occurs when the input
value is a three element list.  When a match occurs, &lt;code&gt;x&lt;/code&gt; is bound to the
first element, &lt;code&gt;y&lt;/code&gt; to the second and so on.  Hence this form evaluates
to &lt;code&gt;6&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is another example: summing a list:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defun* dummy-sum (lst &amp;amp;optional (acc 0))
 (match lst
  (nil acc)
  ((cons hd tl)
   (dummy-sum tl (+ acc hd)))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;First we specify the pattern &lt;code&gt;nil&lt;/code&gt;, which matches only &lt;code&gt;nil&lt;/code&gt;.  When
the input is &lt;code&gt;nil&lt;/code&gt;, we return the accumulator.  Then we match against
&lt;code&gt;(cons hd tl)&lt;/code&gt; which matches a cons &lt;code&gt;pair&lt;/code&gt;, binding &lt;code&gt;hd&lt;/code&gt; to the &lt;code&gt;car&lt;/code&gt;
and &lt;code&gt;tl&lt;/code&gt; to the &lt;code&gt;cdr&lt;/code&gt;.  We then recur, adding to the accumulator.&lt;/p&gt;

&lt;p&gt;The pattern matching language is rich.  There are patterns for
matching against literals, applying functions to values, matching
against arbitrary conditions, matching against structs. &lt;/p&gt;

&lt;p&gt;Eg:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defstruct a-struct f1 f2)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With this struct defined, the pattern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(struct a-struct (f1 (? #'numberp x)) (f2 (? #'stringp y)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches only a struct whose field &lt;code&gt;f1&lt;/code&gt; is a number, and whose field
&lt;code&gt;f2&lt;/code&gt; is a string.  When that is true, &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; are bound.&lt;/p&gt;

&lt;h2&gt;Extending Shadchen&lt;/h2&gt;

&lt;p&gt;The pattern matcher is user extensible using &lt;code&gt;defpattern&lt;/code&gt;.
&lt;code&gt;Defpattern&lt;/code&gt; defines a function which receives the pattern's
arguments, and returns a new pattern which effects the desired match.
For instance, the &lt;code&gt;struct&lt;/code&gt; pattern is defined thusly:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defun cl-struct-prepend (s)
  (intern (format &quot;cl-struct-%s&quot; s)))

(defun make-cl-struct-accessor (struct-name slot) 
  (intern (format &quot;%s-%s&quot; struct-name slot)))


(defpattern struct (struct-name &amp;amp;rest fields)
  `(and
    (? #'vectorp)
    (? #'(lambda (x) (&amp;gt; (length x) 0)))
    (? #'(lambda (o)
           (eq (elt o 0) ',(cl-struct-prepend struct-name))))
    ,@(loop for f in fields collect
            `(funcall 
              #',(make-cl-struct-accessor struct-name (car f))
              ,(cadr f)))))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that the &lt;code&gt;defpattern&lt;/code&gt; body must return a valid pattern in terms
of previously defined patterns (or itself, patterns can be
recursive).  In this case we use the patterns &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, and
&lt;code&gt;funcall&lt;/code&gt; to create a new matcher.&lt;/p&gt;

&lt;h2&gt;Supported Patterns:&lt;/h2&gt;

&lt;p&gt;Shadchen supports the following patterns:&lt;/p&gt;

&lt;p&gt;Shadchen supports the following built-in patterns.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;SYMBOL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches anything, binding  to that value in the body
expressions.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;KEYwORD-LITERAL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches only when the value is the same keyword.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;NUMBER-LITERAL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches only when the value is the same number.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;STRING-LITERAL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches only when the value is &lt;code&gt;string=&lt;/code&gt; is the same string.    &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(CONS &amp;lt;PATTERN1&amp;gt; &amp;lt;PATTERN2&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches any &lt;code&gt;CONS&lt;/code&gt; cell, or &lt;code&gt;NIL&lt;/code&gt;, then matches &lt;code&gt;&amp;lt;PATTERN1&amp;gt;&lt;/code&gt; and
&lt;code&gt;&amp;lt;PATTERN2&amp;gt;&lt;/code&gt;, executing the body in a context where their matches are
bound.  If the match value is NIL, then each &lt;code&gt;PATTERN&lt;/code&gt; matches against
NIL.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(LIST &amp;lt;P1&amp;gt; ... &amp;lt;PN&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches a list of length N, then matches each pattern &lt;code&gt;&amp;lt;PN&amp;gt;&lt;/code&gt; to the
elements of that list.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(LIST-REST &amp;lt;P1&amp;gt; ... &amp;lt;PN&amp;gt; &amp;lt;REST-PATTERN)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches  -  to elements in at list, as in the &lt;code&gt;LIST&lt;/code&gt; pattern.
The final &lt;code&gt;&amp;lt;REST-PATTERN&amp;gt;&lt;/code&gt; is matched against the rest of the list.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(QUOTE DATUM)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Only succeeds when &lt;code&gt;DATUM&lt;/code&gt; is &lt;code&gt;EQUALP&lt;/code&gt; to the match-value.  Binds no
values.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (AND &amp;lt;P1&amp;gt; .. &amp;lt;PN&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Tests all &lt;code&gt;&amp;lt;PN&amp;gt;&lt;/code&gt; against the same value, succeeding only when all
patterns match, and binding all variables in all patterns.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (? PREDICATE &amp;lt;PATTERN&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Succeeds when &lt;code&gt;(FUNCALL PREDICATE MATCH-VALUE)&lt;/code&gt; is true and when
&lt;code&gt;&amp;lt;PATTERN&amp;gt;&lt;/code&gt; matches the value.  Body has the bindings of &lt;code&gt;&amp;lt;PATTERN&amp;gt;&lt;/code&gt;.  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (FUNCALL FUN &amp;lt;PATTERN&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Applies &lt;code&gt;FUN&lt;/code&gt; to the match value, then matches &lt;code&gt;&amp;lt;PATTERN&amp;gt;&lt;/code&gt; against &lt;em&gt;the
result&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; (BQ EXPR)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Matches as if by &lt;code&gt;BACKQUOTE&lt;/code&gt;.  If &lt;code&gt;EXPR&lt;/code&gt; is an atom, then this is
equivalent to &lt;code&gt;QUOTE&lt;/code&gt;.  If &lt;code&gt;EXPR&lt;/code&gt; is a list, each element is matches
as in &lt;code&gt;QUOTE&lt;/code&gt;, unless it is an &lt;code&gt;(UQ &amp;lt;PATTERN&amp;gt;)&lt;/code&gt; form, in which case it
is matched as a pattern.  Eg:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(match (list 1 2 3)
  ((BQ (1 (UQ x) 2)) x))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Will succeed, binding &lt;code&gt;X&lt;/code&gt; to 2.  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(match (list 10 2 20)
   ((BQ (1 (UQ x) 2)) x))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Will fail, since &lt;code&gt;10&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt; don't match.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(values &amp;lt;P1&amp;gt; ... &amp;lt;PN&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Will match multiple values produced by a &lt;code&gt;(values ...)&lt;/code&gt; form.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(struct struct-name (field-name &amp;lt;P1&amp;gt;)
                    (field-name &amp;lt;P2&amp;gt;)
                    ...
                    (field-name &amp;lt;P3&amp;gt;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which matches when the input is a struct of type &lt;code&gt;struct-name&lt;/code&gt;, whose
fields match &lt;code&gt;&amp;lt;P1&amp;gt;&lt;/code&gt; ... &lt;code&gt;&amp;lt;PN&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;If you are an elisp hacker like me, now you don't have to envy those
snooty Racket, ML and Haskell programmers.  Happy Hacking!&lt;/p&gt;

&lt;p&gt;(PS - the library is also available in Common Lisp, check my github).&lt;/p&gt;
&lt;p&gt;(PPS - I love Racket, ML and Haskell programmers and they aren't at all snooty.&lt;/p&gt;

&lt;hr /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/8115687546775931822-3510683703473684696?l=dorophone.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>J.V. Toups</name>
			<email>noreply@blogger.com</email>
			<uri>http://dorophone.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Dorophone</title>
			<subtitle type="html">Soon to be replaced with an Elaborate Platinum Mechanism.

Ok, but seriously the blog is about programming and technology.</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/8115687546775931822/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-8115687546775931822</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">sachachua: Emacs: Telling external processes about terminal capabilities, and watching over other people’s shoulders</title>
		<link href="http://sachachua.com/blog/2012/01/emacs-telling-external-processes-about-terminal-capabilities-and-watching-over-other-peoples-shoulders/"/>
		<id>http://sachachua.com/blog/?p=23114</id>
		<updated>2012-01-19T03:06:03+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Justin Giancola (&lt;a href=&quot;https://twitter.com/#!/elucid/status/159767393428705280&quot;&gt;@elucid&lt;/a&gt;) wanted to use &lt;a href=&quot;https://github.com/nschum/full-ack/blob/master/full-ack.el&quot;&gt;full-ack.el&lt;/a&gt; to search through his project files using the Ack tool, but Ack refused to run because it didn’t think his terminal had enough capabilities. A simple fix was to set the TERM variable with &lt;/p&gt;
&lt;pre&gt;(setenv &quot;TERM&quot; &quot;xterm&quot;)&lt;/pre&gt;
&lt;p&gt;which told Ack that Emacs was fine with its output. &lt;/p&gt;
&lt;p&gt;(Speaking of Ack integration – This being the Emacs world, there’s more than one way to do things. You might also want to check out &lt;a href=&quot;http://technosorcery.net/blog/2011/04/02/a-better-emacs-front-end-to-ack/&quot;&gt;ack-and-a-half.el&lt;/a&gt;, which is midway between ack.el and full-ack.el.)&lt;/p&gt;
&lt;p&gt;It was interesting hanging out with someone else who used Emacs, and being able to share tips. I don’t run into many other Emacs geeks, but I sporadically hang out in the #emacs channel or browse Planet Emacsen to be inspired. It’s funny how many of the meetups I go to end up involving Emacs conversations. It’s like I have a big M-x banner hovering over my head. =) It’s awesome, actually!&lt;/p&gt;
&lt;p&gt;Read the original or check out the comments on: &lt;a href=&quot;http://sachachua.com/blog/2012/01/emacs-telling-external-processes-about-terminal-capabilities-and-watching-over-other-peoples-shoulders/&quot;&gt;Emacs: Telling external processes about terminal capabilities, and watching over other people’s shoulders&lt;/a&gt; (Sacha Chua's blog)&lt;/p&gt;</content>
		<author>
			<name>Sacha Chua</name>
			<uri>http://sachachua.com/blog</uri>
		</author>
		<source>
			<title type="html">sacha chua :: living an awesome life » emacs</title>
			<subtitle type="html">I help organizations and people learn how to connect and collaborate more effectively using Web 2.0 tools.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pimpmyemacs"/>
			<id>http://sachachua.com/blog</id>
		</source>
	</entry>

	<entry>
		<title type="html">John Sullivan: Sent to the ACLU today</title>
		<link href="http://feedproxy.google.com/~r/wjsullivan/~3/pJFAmVWialM/277292.html"/>
		<id>http://johnsu01.livejournal.com/277292.html</id>
		<updated>2012-01-18T20:51:29+00:00</updated>
		<content type="html">&lt;p&gt;
I was on the brink of mindlessly clicking through the ACLU action center as usual to send an email opposing SOPA. But then I read their boilerplate text, and ended up cancelling the letter to my rep and instead sending this quick note to the ACLU:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Your SOPA suggested letter text supports current copyright law, and also backhandedly supports PIPA (the Senate version of the bill). 
&lt;/p&gt;
&lt;p&gt;
This is far too weak of a position. As a donor, I ask you to take a stronger position that current copyright law unjustly restricts free speech, and that no further enforcement measures should be instituted until that fundamental problem is addressed.
&lt;/p&gt;
&lt;p&gt;
At least take on BOTH of these bills strongly. Most of the significant Internet is blacked out today to oppose both bills -- why would you cede so much ground to copyright maximalists? We have the support to oppose and defeat both bills.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
For reference, here was their text:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
While I believe it's important to protect copyrighted material online, the language of the Stop Online Piracy Act (SOPA) is flawed and will lead to the blocking of lawful content.
&lt;/p&gt;

&lt;p&gt;
Unlike the Senate version of the bill, SOPA eliminates the concept of sites 'dedicated to infringing activity' and enables law enforcement to target all sites that contain some infringing content -- no matter how trivial. The potential for impact on non-infringing content is much greater under SOPA than under other versions of this bill. Sites with user-generated content, like YouTube, Twitter, and Facebook, would be especially vulnerable, as one small piece of infringing content could lead to blocking the entire site.
&lt;/p&gt;

&lt;p&gt;
Even though proposed changes would narrow the amount of lawful content impacted, the changes don't go far enough. It is still likely that search engines will end up blocking access to perfectly legal online content.
&lt;/p&gt;

&lt;p&gt;
Congress should focus not just on the goal of protecting copyright owners, but also protecting the speech rights of consumers and providers who are reading and producing wholly non-infringing content.  Congress must eliminate the collateral damage to protected non-infringing content. Only in that way will Congress truly achieve its goal of protecting authors while respecting the constitutional right to free speech.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Maybe I'm overreacting, but I dislike it when good organizations take weak positions unnecessarily. Usually this is not a problem with the ACLU, for me. It doesn't help that I keep seeing this meme everywhere in the anti-SOPA/PIPA conversation: &quot;I agree we need to do something about piracy, but not this...&quot;
&lt;/p&gt;

&lt;p&gt;
I don't think we need to do anything to fix violations of an extraordinarily unjust law until the law itself is fixed. I don't find that to be a very radical position. 
&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/wjsullivan/~4/pJFAmVWialM&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>John Sullivan</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=FiExI4MS3RG8VVYcM1rX_Q</uri>
		</author>
		<source>
			<title type="html">John Sullivan's Emacs and free software blog posts</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=FiExI4MS3RG8VVYcM1rX_Q&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=FiExI4MS3RG8VVYcM1rX_Q</id>
		</source>
	</entry>

	<entry>
		<title type="html">Robert Adesam: Issue with VM and IMAP over SSL/stunnel</title>
		<link href="http://robert-adesam.blogspot.com/2011/06/issue-with-vm-and-imap-over-sslstunnel.html"/>
		<id>tag:blogger.com,1999:blog-1139989336831951363.post-5460581560455141884</id>
		<updated>2012-01-18T13:49:53+00:00</updated>
		<content type="html">Problem -- after migrating from Mac to Mac @work I could no longer get emails via imap over ssl/stunnel, using &lt;a href=&quot;http://www.emacswiki.org/emacs/CategoryViewMail&quot;&gt;VM&lt;/a&gt; 8.1.1 on &lt;a href=&quot;http://en.wikipedia.org/wiki/Emacs&quot;&gt;Emacs&lt;/a&gt; 23.3 and &lt;a href=&quot;http://www.stunnel.org/&quot;&gt;stunnel&lt;/a&gt; 4.35 with &lt;a href=&quot;http://openssl.org/&quot;&gt;openssl&lt;/a&gt; 1.0.0d. The &lt;code&gt;*Messages*&lt;/code&gt; buffer stated&lt;br /&gt;&lt;code&gt;vm-imap-protocol-error: IMAP protocol error: &quot;unexpected char (10)&quot;&lt;/code&gt;&lt;br /&gt;and the trace buffer of the IMAP over SSL session showed no errors.&lt;br /&gt;&lt;br /&gt;With help from &lt;a href=&quot;http://google.com/&quot;&gt;my friend&lt;/a&gt;, and some ssl/stunnel debugging, I quickly found the problem in the stunnel program, so I set out to revert to the version working on my old Mac, version 4.23. Finding instructions on the &lt;a href=&quot;http://trac.macports.org/wiki/howto/InstallingOlderPort&quot;&gt;Macports wiki page on how to install older ports&lt;/a&gt; with &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_Subversion&quot;&gt;subversion&lt;/a&gt;, I did&lt;br /&gt;&lt;ul&gt;&lt;li&gt;jump over the part on installing subversion as a fairly new version comes with Mac OS X 10.6.7,&lt;/li&gt;&lt;li&gt;locate and check out the revision, 36499, from the Macports repository containing the old version of stunnel,&lt;br /&gt;&lt;code&gt;$ svn co -r 36499 https://svn.macports.org/repository/macports/trunk/dports/security/stunnel&lt;/code&gt;&lt;/li&gt;&lt;li&gt;install it with the &lt;code&gt;port&lt;/code&gt; command.&lt;br /&gt;&lt;code&gt;$ cd stunnel&lt;br /&gt;$ port install&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Problem solved! Now I can once again get emails to VM using IMAP over SSL, stunnel 4.23 with openssl 1.0.0d.&lt;br /&gt;&lt;br /&gt;There are quite &lt;a href=&quot;http://www.google.se/search?num=100&amp;amp;hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;hs=iO0&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=test+imap+ssl+connection&amp;amp;aq=f&amp;amp;aqi=g1&amp;amp;aql=&amp;amp;oq=&quot;&gt;a few tips on how to test a ssl connection&lt;/a&gt;, so I will leave it out and show how I debugged stunnel by&lt;br /&gt;&lt;ul&gt;&lt;li&gt;creating a &lt;code&gt;stunnel.conf&lt;/code&gt; file with&lt;br /&gt;  &lt;code&gt;debug = 7&lt;/code&gt;&lt;br /&gt;  &lt;code&gt;output = stunnel.log&lt;/code&gt;&lt;br /&gt;  to be appended to the VM generated config file,&lt;/li&gt;&lt;li&gt;setting &lt;code&gt;vm-stunnel-program-additional-configuration-file&lt;/code&gt; in the VM init file, &lt;code&gt;~/.vm&lt;/code&gt;, to point to to &lt;code&gt;stunnel.conf&lt;/code&gt; file, eg&lt;br /&gt;  &lt;code&gt;(setq vm-stunnel-program-additional-configuration-file &quot;&lt;i&gt;/PATH/TO/STUNNEL.CONF&lt;/i&gt;&quot;)&lt;/code&gt;&lt;/li&gt;&lt;li&gt;and reloading the VM init file.&lt;/li&gt;&lt;/ul&gt;Fetching emails now created &lt;code&gt;stunnel.log&lt;/code&gt; in the mail folder. This file showed the error&lt;br /&gt;&lt;code&gt;LOG5[3793:140735082364064]: Error detected on socket (read) file descriptor: Socket operation on non-socket (38)&lt;/code&gt;&lt;br /&gt;which I could &lt;a href=&quot;http://www.google.se/search?num=100&amp;amp;hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;hs=90g&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=stunnel+Error+detected+on+socket+%28read%29+file+descriptor%3A+Socket+operation+on+non-socket+%2838%29&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&quot;&gt;find almost no information about&lt;/a&gt;, even less a solution to, so the quick fix was to revert back to an old working version of stunnel as described above.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Since I wrote, but not published, the above text I found out in the &lt;a href=&quot;http://www.stunnel.org/?page=sdf_ChangeLog&quot;&gt;stunnel changelog&lt;/a&gt; that some Mac OS X bugs have been fixed. &lt;a href=&quot;http://www.stunnel.org/?page=downloads&quot;&gt;Downloaded the latest version&lt;/a&gt;, 4.37, and compiled it without any hickups. Though, when now running stunnel it segfaults in addition to the stunnel socket error above...&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; The above error has been fixed in version 4.52 of &lt;a href=&quot;http://www.stunnel.org/&quot;&gt;stunnel&lt;/a&gt;, excellent work from &lt;a href=&quot;http://mike.mirt.net/&quot;&gt;Michał Trojnara&lt;/a&gt;!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1139989336831951363-5460581560455141884?l=robert-adesam.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Robert Adesam</name>
			<email>noreply@blogger.com</email>
			<uri>http://robert-adesam.blogspot.com/search/label/emacs</uri>
		</author>
		<source>
			<title type="html">Robert Adesam</title>
			<subtitle type="html">About Technology in General and Emacs in Particular.</subtitle>
			<link rel="self" href="http://www.blogger.com/feeds/1139989336831951363/posts/default/-/emacs"/>
			<id>tag:blogger.com,1999:blog-1139989336831951363</id>
		</source>
	</entry>

	<entry>
		<title type="html">Alex Schroeder: SOPA Blackout Protest</title>
		<link href="http://www.emacswiki.org/alex/2012-01-17_SOPA_Blackout_Protest"/>
		<id>http://www.emacswiki.org/alex/2012-01-17_SOPA_Blackout_Protest</id>
		<updated>2012-01-17T09:53:39+00:00</updated>
		<content type="html">&lt;p&gt;I just saw &lt;a class=&quot;url http outside&quot; href=&quot;http://boingboing.net/2012/01/16/twitter-ceo-says-sopa-blackout.html&quot;&gt;Twitter CEO says SOPA blackout protest &quot;silly&quot;&lt;/a&gt; on &lt;a class=&quot;near&quot; href=&quot;http://www.boingboing.net/&quot; title=&quot;Names&quot;&gt;BoingBoing&lt;/a&gt;. I wonder: Should I shut down Emacs Wiki for US residents? I’d have to do a quick geo location of the IP numbers before serving anything. That sucks.&lt;/p&gt;&lt;dl class=&quot;irc&quot;&gt;&lt;dt&gt;&lt;b&gt;kensanata&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;Do US #Emacs users require a reminder to fight #SOPA and # PIPA? I think Emacswiki will stay up for the USA. I doubt US Congress uses it.&lt;/dd&gt;&lt;/dl&gt;&lt;p&gt;I always felt that I was as safe as I can be running Emacs Wiki: I live in Switzerland, the server is hosted in Germany, the domain name registrar is French, the top-level .org domain is the only thing connecting it to the USA. But then I read &lt;a class=&quot;url http outside&quot; href=&quot;http://www.techdirt.com/articles/20120113/09184917400/us-to-extradite-uk-student-copyright-infringement-despite-site-being-legal-uk.shtml&quot;&gt;US Can Extradite UK Student For Copyright Infringement, Despite Site Being Legal In The UK&lt;/a&gt; – and now I wonder about the worst case. Perhaps I should get myself a different domain name.&lt;/p&gt;&lt;p&gt;Actually, I think the &lt;em style=&quot;font-style: normal; letter-spacing: 0.125em;&quot;&gt;main&lt;/em&gt; problem is that with all the scare mongering around copyright infringement and the astronomical punishments dealt out in the US, I have lost my confidence in their judicial system when it comes to copyright and patents. The most positive explanation for that is that I’m just misinterpreting all the bad news I’m reading online. My impression is formed by following &lt;span class=&quot;nick&quot;&gt;@&lt;a class=&quot;url http&quot; href=&quot;http://twitter.com/internetlaw&quot;&gt;internetlaw&lt;/a&gt;&lt;/span&gt;, &lt;span class=&quot;nick&quot;&gt;@&lt;a class=&quot;url http&quot; href=&quot;http://twitter.com/privacylaw&quot;&gt;privacylaw&lt;/a&gt;&lt;/span&gt;, &lt;span class=&quot;nick&quot;&gt;@&lt;a class=&quot;url http&quot; href=&quot;http://twitter.com/techdirt&quot;&gt;techdirt&lt;/a&gt;&lt;/span&gt; and &lt;span class=&quot;nick&quot;&gt;@&lt;a class=&quot;url http&quot; href=&quot;http://twitter.com/boingboing&quot;&gt;boingboing&lt;/a&gt;&lt;/span&gt;, following the occasional link. I end up reading &lt;a class=&quot;url http outside&quot; href=&quot;http://recordingindustryvspeople.blogspot.com/2011/12/actual-damages-for-single-unauthorized.html&quot;&gt;Actual damages for single unauthorized download of software program held to be cost of single license fee&lt;/a&gt; (from $1,370,590 down to $4,200) and I wonder how much it cost the accused in time, energy and money to get this result. I would not want to fight this battle in court, even if I win.&lt;/p&gt;&lt;p&gt;Case in point: &lt;a class=&quot;url http outside&quot; href=&quot;http://boingboing.net/2012/01/16/how-usptos-recklessness-dest.html&quot;&gt;How USPTO's recklessness destroys business, innovation, and competition&lt;/a&gt; – a company produces something and years later a competitor is awarded a patent. The cost of going to court is prohibitive, and so they just give up.&lt;/p&gt;&lt;p&gt;Overprotective copyright and a judicial system that encourages &lt;a class=&quot;near&quot; href=&quot;http://en.wikipedia.org/wiki/statutory%20damages&quot; title=&quot;Wikipedia&quot;&gt;statutory damages&lt;/a&gt;, patent offices unable to cope with new technology, a highly networked world making it easy to publish internationally with incompatible legal systems. It makes my head hurt!&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: I decided to post a more personal message on &lt;a class=&quot;inter EmacsWiki&quot; href=&quot;http://www.emacswiki.org/emacs?2012-01-18&quot;&gt;&lt;span class=&quot;site&quot;&gt;EmacsWiki&lt;/span&gt;&lt;span class=&quot;separator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;page&quot;&gt;2012-01-18&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Tags: &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=Emacs&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;Emacs&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/Emacs&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=Web&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;Web&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/Web&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=USA&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;USA&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/USA&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=SOPA&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;SOPA&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/SOPA&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=Copyright&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;Copyright&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/Copyright&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;outside tag&quot; href=&quot;http://www.emacswiki.org/alex?action=tag;id=Patents&quot; rel=&quot;tag&quot; title=&quot;Tag&quot;&gt;Patents&lt;/a&gt; &lt;a class=&quot;feed tag&quot; href=&quot;http://www.emacswiki.org/alex/feed/full/Patents&quot; rel=&quot;feed&quot; title=&quot;Feed for this tag&quot;&gt;&lt;img alt=&quot;RSS&quot; src=&quot;http://www.emacswiki.org/alex/pics/rss.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Alex Schroeder</name>
			<uri>http://www.emacswiki.org/alex/Diary</uri>
		</author>
		<source>
			<title type="html">Alex Schroeder: Diary</title>
			<subtitle type="html">The Homepage of Alex Schroeder.</subtitle>
			<link rel="self" href="http://www.emacswiki.org/alex?action=rss;full=1"/>
			<id>http://www.emacswiki.org/alex/Diary</id>
			<rights type="html">Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation.</rights>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Mickey Petersen: PComplete: Context-Sensitive Completion in Emacs</title>
		<link href="http://www.masteringemacs.org/articles/2012/01/16/pcomplete-context-sensitive-completion-emacs/"/>
		<id>http://www.masteringemacs.org/?p=536</id>
		<updated>2012-01-16T18:40:01+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;In my &lt;em&gt;What’s New In Emacs 24&lt;/em&gt; series (&lt;a href=&quot;http://www.masteringemacs.org/articles/2011/12/06/what-is-new-in-emacs-24-part-1/&quot;&gt;part one&lt;/a&gt;, &lt;a href=&quot;http://www.masteringemacs.org/articles/2011/12/12/what-is-new-in-emacs-24-part-2/&quot;&gt;part two&lt;/a&gt;) I briefly mentioned that &lt;code&gt;pcomplete&lt;/code&gt;, the programmable completion library featured prominently in &lt;a href=&quot;http://www.masteringemacs.org/articles/2010/12/13/complete-guide-mastering-eshell/&quot;&gt;Eshell&lt;/a&gt;, now supports &lt;code&gt;M-x shell&lt;/code&gt; out of the box. That’s great news for shell mode fans as the completion mechanism adds a lot of nifty functionality to a mode that lacks the native completion provided by underlying the shell itself.&lt;/p&gt;
&lt;p&gt;The most amazing thing about the completion mechanism is that it has been in Emacs for &lt;em&gt;ages&lt;/em&gt; but never made much of a public appearance and has gone virtually unnoticed due to its limited use in Emacs. In fact, I think it’s only used in EShell, ERC, Org Mode and now, finally, Shell Mode.&lt;/p&gt;
&lt;h2&gt;Programmable, Context-Sensitive Completion&lt;/h2&gt;
&lt;p&gt;To use pcomplete you won’t have to do anything, because as of Emacs 24 it is now supported automatically when you launch a new shell session. Emacs ships with a handful of pcomplete functions that enhance the otherwise drab filename completion with context-sensitive completion similar to what you can do with bash/zsh completion. Of particular note is the &lt;code&gt;scp&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt;, &lt;code&gt;umount&lt;/code&gt; and &lt;code&gt;make&lt;/code&gt; support.&lt;/p&gt;
&lt;p&gt;The following table lists the commands supported by shell mode (or indeed any mode that supports pcomplete, including Eshell.)&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bzip2&lt;/td&gt;
&lt;td&gt;Completes arguments and lists only bzipped files.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cd&lt;/td&gt;
&lt;td&gt;Completes directories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chgrp&lt;/td&gt;
&lt;td&gt;Completes list of known groups on the system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chown&lt;/td&gt;
&lt;td&gt;Completes user and group perms, but only if you use &lt;code&gt;user.group&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cvs&lt;/td&gt;
&lt;td&gt;Completes commands and parameter options and cvs entries and modules.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gdb&lt;/td&gt;
&lt;td&gt;Completes only directories or files with eXecute permission.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;td&gt;Completes arguments and lists only gzipped files.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kill&lt;/td&gt;
&lt;td&gt;Lists signals if completed with just a &lt;code&gt;-&lt;/code&gt;, otherwise it completes all system PIDs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;make&lt;/td&gt;
&lt;td&gt;Completes arguments and valid makefiles in the directory; if a valid makefile is completed with &lt;code&gt;make -f FILE&lt;/code&gt; a list of rule names from the file itself are completed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mount&lt;/td&gt;
&lt;td&gt;Completes arguments and valid filesystem types if completed with &lt;code&gt;mount -t TYPE&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pushd&lt;/td&gt;
&lt;td&gt;Identical to &lt;code&gt;cd&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rm&lt;/td&gt;
&lt;td&gt;Completes arguments and filenames and directories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rmdir&lt;/td&gt;
&lt;td&gt;Completes directories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rpm&lt;/td&gt;
&lt;td&gt;Very sophisticated completion mechanism for most of rpm, the Redhat Package Manager. Context-sensitive completion for almost all commands, including package lookup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scp&lt;/td&gt;
&lt;td&gt;Completes arguments, SSH known hosts and remote file lookup (using TRAMP) if the format is &lt;code&gt;scp host:/&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ssh&lt;/td&gt;
&lt;td&gt;Completes arguments and SSH known hosts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tar&lt;/td&gt;
&lt;td&gt;Completes arguments, including context-sensitive completion for POSIX arguments, and file name completion.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;Completes directories and files with eXecutable permission.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;umount&lt;/td&gt;
&lt;td&gt;Completes arguments, mounted directories and filesystem types (like &lt;code&gt;mount&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;which&lt;/td&gt;
&lt;td&gt;Supposed to provide simple filename completion of all known binaries (wouldn’t be useful otherwise!) but appears to not work right.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xargs&lt;/td&gt;
&lt;td&gt;Completes directories and files with eXecutable permission.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Custom Completion&lt;/h2&gt;
&lt;p&gt;It goes without saying that a completion library called &lt;em&gt;programmable completion&lt;/em&gt; is, well, programmable.&lt;/p&gt;
&lt;p&gt;Adding simple parameter completion is an easy job but anything more than that and it gets hairy as, not surprisingly, this library is virtually undocumented (though an optimist would say the source is all the documentation you need…)&lt;/p&gt;
&lt;p&gt;I’ll demonstrate how to add rudimentary support for &lt;code&gt;git&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The first thing we need to do is establish the order in which parameters must be given; for git, it’s somewhat consistent: &lt;code&gt;git [options] &amp;lt;command&amp;gt; [&amp;lt;args&amp;gt;]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For now I’ll stick to the commands as that’s what people use the most anyway. The commands, in list form, are:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;lisp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;defconst pcmpl-git-commands
  '&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;add&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;bisect&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;branch&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;checkout&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;clone&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;commit&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;diff&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;fetch&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;grep&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;init&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;log&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;merge&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;mv&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;pull&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;push&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rebase&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;reset&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rm&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;show&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;status&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;tag&quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;List of `git' commands&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The syntax for pcomplete is rather clever: it will use dynamic dispatch to resolve the elisp function provided it is named a certain way. All commands are named &lt;code&gt;pcomplete/COMMAND&lt;/code&gt; or &lt;code&gt;pcomplete/MAJOR-MODE/COMMAND&lt;/code&gt;. Provided you follow that naming scheme your command will automagically work.&lt;/p&gt;
&lt;p&gt;Next, we need to present a list of valid commands — in this case the ones in &lt;code&gt;pcmpl-git-commands&lt;/code&gt;, but it could be any form — to the command &lt;code&gt;pcomplete-here&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;lisp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;defun&lt;/span&gt; pcomplete/git &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Completion for `git'&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here* pcmpl-git-commands&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now when you try to tab-complete the first argument to &lt;code&gt;git&lt;/code&gt; it will list our commands. Sweet.&lt;/p&gt;
&lt;p&gt;Let’s extend it further by adding support for the &lt;code&gt;add&lt;/code&gt; and &lt;code&gt;rm&lt;/code&gt; commands. I want the aforementioned commands to provide the standard filename/filepath completion if, and only if, the command is &lt;code&gt;add&lt;/code&gt; or &lt;code&gt;rm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is surprisingly easy to do using &lt;code&gt;pcomplete-match&lt;/code&gt;, a function that asserts a certain regexp matches a particular function argument index. Note that the call to &lt;code&gt;pcomplete-here&lt;/code&gt; is in a while loop; this is so you can complete as many files as you like, one after another. One advantage of &lt;code&gt;pcomplete-here&lt;/code&gt; is that it won’t display files you have already completed earlier in the argument trail — that’s very useful for a command like &lt;code&gt;add&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;lisp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;defun&lt;/span&gt; pcomplete/git &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Completion for `git'&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;;; Completion for the command argument.&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here* pcmpl-git-commands&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
 
  &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;;; complete files/dirs forever if the command is `add' or `rm'.&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-match &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;regexp-opt '&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;add&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rm&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;while &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-entries&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ok, that was easy. Now let’s make it a bit more dynamic by extending our code to support the git &lt;code&gt;checkout&lt;/code&gt; command so it will complete the list of branches available to us locally.&lt;/p&gt;
&lt;p&gt;To do this we need a helper function that takes the output of a call to &lt;code&gt;shell-command&lt;/code&gt; and maps it to an internal elisp list. This is easily done with some quick hackery.&lt;/p&gt;
&lt;p&gt;The variable &lt;code&gt;pcmpl-git-ref-list-cmd&lt;/code&gt; holds the shell command we want Emacs to run for us. It gets every ref there is and we then filter by sub-type (heads, tags, etc.) later. The function &lt;code&gt;pcmpl-git-get-refs&lt;/code&gt; takes one argument, &lt;code&gt;type&lt;/code&gt;, which is the ref type to filter by.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;lisp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;defvar pcmpl-git-ref-list-cmd &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;git for-each-ref refs/ --format='%(refname)'&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;The `git' command to run to get a list of refs&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;defun&lt;/span&gt; pcmpl-git-get-refs &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;type&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Return a list of `git' refs filtered by TYPE&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;with-temp-buffer
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;insert &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shell-command-to-string pcmpl-git-ref-list-cmd&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;goto-char &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;point-&lt;span style=&quot;color: #b1b100;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;while &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;re-search-forward &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;concat &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;^refs/&quot;&lt;/span&gt; type &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;(.+&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;)$&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;nil&lt;/span&gt; t&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;add-to-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt; 'ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;match-string &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And finally, we put it all together. To keep the code clean I’ve switched to using a cond form for readability.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;lisp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;defconst pcmpl-git-commands
  '&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;add&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;bisect&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;branch&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;checkout&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;clone&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;commit&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;diff&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;fetch&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;grep&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;init&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;log&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;merge&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;mv&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;pull&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;push&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rebase&quot;&lt;/span&gt;
    &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;reset&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rm&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;show&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;status&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;tag&quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;List of `git' commands&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;defvar pcmpl-git-ref-list-cmd &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;git for-each-ref refs/ --format='%(refname)'&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;The `git' command to run to get a list of refs&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;defun&lt;/span&gt; pcmpl-git-get-refs &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;type&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Return a list of `git' refs filtered by TYPE&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;with-temp-buffer
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;insert &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;shell-command-to-string pcmpl-git-ref-list-cmd&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;goto-char &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;point-&lt;span style=&quot;color: #b1b100;&quot;&gt;min&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;while &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;re-search-forward &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;concat &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;^refs/&quot;&lt;/span&gt; type &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;(.+&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;)$&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;nil&lt;/span&gt; t&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;add-to-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt; 'ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;match-string &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
      ref-&lt;span style=&quot;color: #b1b100;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
 
&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;defun&lt;/span&gt; pcomplete/git &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Completion for `git'&quot;&lt;/span&gt;
  &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;;; Completion for the command argument.&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here* pcmpl-git-commands&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;  
  &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;;; complete files/dirs forever if the command is `add' or `rm'&lt;/span&gt;
  &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;cond&lt;/span&gt;
   &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-match &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;regexp-opt '&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;add&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;rm&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;while &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-entries&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
   &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;;; provide branch completion for the command `checkout'.&lt;/span&gt;
   &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-match &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;checkout&quot;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcomplete-here* &lt;span style=&quot;color: #66cc66;&quot;&gt;(&lt;/span&gt;pcmpl-git-get-refs &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;heads&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And that’s that. A simple completion mechanism for git. Put this in your .emacs or init file and you’re done.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;a2a_dd a2a_target addtoany_share_save&quot; href=&quot;http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.masteringemacs.org%2Farticles%2F2012%2F01%2F16%2Fpcomplete-context-sensitive-completion-emacs%2F&amp;amp;title=PComplete%3A%20Context-Sensitive%20Completion%20in%20Emacs&quot; id=&quot;wpa2a_4&quot;&gt;Share&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>mickey</name>
			<uri>http://www.masteringemacs.org</uri>
		</author>
		<source>
			<title type="html">Mastering Emacs</title>
			<subtitle type="html">a blog about mastering the world's best text editor</subtitle>
			<link rel="self" href="http://www.masteringemacs.org/feed/"/>
			<id>http://www.masteringemacs.org</id>
		</source>
	</entry>

	<entry>
		<title type="html">Bryan Murdock: What Is So Wrong With Mercurial's Named Branches?</title>
		<link href="http://bryan-murdock.blogspot.com/2012/01/what-is-so-wrong-with-mercurials-named.html"/>
		<id>tag:blogger.com,1999:blog-3669809752172683097.post-5610089624746416208</id>
		<updated>2012-01-16T18:10:49+00:00</updated>
		<content type="html">&lt;p&gt;I just installed the very latest version of mercurial, &lt;a href=&quot;http://mercurial.selenic.com/wiki/WhatsNew#Mercurial_2.0.2_.282012-01-01.29&quot;&gt;2.0.2&lt;/a&gt;.  It added a new little feature that warns you when you create a branch.  Huh?  This is what it looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ hg branch foo
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Really?  Have we let the git advocates push us this far?  Do we really need to start discouraging named branches?&lt;/p&gt;

&lt;p&gt;I googled around to see if I could find where the self-hate for mercurial's named branches is coming from and I found things like &lt;a href=&quot;http://mercurial.selenic.com/wiki/BranchingExplained&quot;&gt;this&lt;/a&gt;, &quot;it is almost never a good idea to use this facility for short-term branching, since branches created this way are inherently 'eternal'.&quot;  (those quotes around eternal are good, actually, but you didn't explain why they should be there), and &lt;a href=&quot;http://ghostinthecode.posterous.com/choosing-how-to-branch-in-mercurial&quot;&gt;this&lt;/a&gt;, &quot;you can never really delete branches (since that would mean altering older commits).&quot;  (editing history, oh noes!), and others like this.  And these were all written by apparent mercurial supporters!  I understand when a git developer writes misinformation about mercurial and uses it to try and make git look better (that's only human), but we mercurial users should know not to listen to it!&lt;/p&gt;

&lt;p&gt;Here's what I think is going wrong.  Git users love flexibility.  The love it so much that they even include modifying their local repository history right into their standard workflow.  git rebase is a core command.  From what I can gather, even though mercurial now (as of years ago, actually) has powerful rebase and patch queue extensions, mercurial users still get the heebie-jeebies when they think about modifying repository history.  This is where the git envy comes from.  You see, git useres can alter their branch names, or even delete branch names without using scary rebase.  Fact is, though, git could adopt mercurial-style named branches and git users would rebase them away or rename them with rebase willy-nilly just like they do with everything else that they deem needs editing in their history.  The fact that git users can rename or delete their branches without using rebase is almost completely incidental.  If you allow the use of rebase or patch queues, mercurial named branches are &lt;em&gt;not&lt;/em&gt; any more permanent than any other changeset in the repository history.  Mercurial bookmarks allow mercurial users flexibility around branch names without needing to resort to scary history editing extensions, and that makes us happy, but I don't think that we should talk down mercurial named branches.  There are times when you want the branch name associated with a commit to be just as &quot;permanent&quot; as the commit is.  Let us do that without dumb warnings that make named branches sound like a bad idea.&lt;/p&gt;

&lt;p&gt;The only other argument people may have against mercurial's named branches is the possibility of name collisions.  As if that's something that's really hard to deal with.  Anyone who has written a fair amount of C code (I'm looking at you, git developers) knows how to prefix a name to get poor-man's namespaces.  Alternatively, many projects require an issue tracker number in a feature-branch or bugfix-branch name.  Name collision problem solved.&lt;/p&gt;

&lt;p&gt;In conclusion, mercurial named branches are fine.  Use them more.  Use rebase and/or patch queues[1] to rename or delete the branches when necessary.  If that really bothers you, you have bookmarks now, but don't go all git-apologetic on named branches.  Mercurial is every bit as awesome as git.&lt;/p&gt;

&lt;p&gt;1.  Before you push to a publicly accesible repository, of course.  Ask a git user why that's important.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/3669809752172683097-5610089624746416208?l=bryan-murdock.blogspot.com&quot; width=&quot;1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Bryan</name>
			<email>noreply@blogger.com</email>
			<uri>http://bryan-murdock.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Cyclopedia Square</title>
			<link rel="self" href="http://www.blogger.com/feeds/3669809752172683097/posts/default"/>
			<id>tag:blogger.com,1999:blog-3669809752172683097</id>
		</source>
	</entry>

	<entry>
		<title type="html">John Sullivan: At FOSDEM in February</title>
		<link href="http://feedproxy.google.com/~r/wjsullivan/~3/eroeHJ__gow/277233.html"/>
		<id>http://johnsu01.livejournal.com/277233.html</id>
		<updated>2012-01-15T23:19:00+00:00</updated>
		<content type="html">&lt;p&gt;
I will be helping to represent the FSF at &lt;a href=&quot;http://fosdem.org&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;FOSDEM&lt;/a&gt; next month in Brussels. I'm speaking in the &lt;a href=&quot;http://fosdem.org/2012/schedule/track/legal_issues_devroom&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Legal Issues Devroom&lt;/a&gt; on Saturday 2012-02-04. The presentation is called &quot;Is copyleft being framed?&quot;:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
This short talk will address the following questions, to inspire discussion and contemplation about how we frame descriptions of the state of licensing in free software.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Numbers are increasingly being cited to show that the use of copyleft licenses, specifically the GPL, is declining. What do these numbers actually show, who is propagating them, and why? What do or might other numbers show?&lt;/li&gt;
&lt;li&gt;Is the &quot;percentage of free software projects which use copyleft licenses&quot; a useful way to judge the success of copyleft? Does an increase in the percentage of projects using non-copyleft permissive licenses indicate a failure of copyleft?&lt;/li&gt;
&lt;li&gt;As a small related case study, what role have the licensing terms of popular mobile application stores played in this debate, and how have those terms changed the frame of the discussion?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;
Let me know if you'll be there too!
&lt;/p&gt;&lt;img height=&quot;1&quot; src=&quot;http://feeds.feedburner.com/~r/wjsullivan/~4/eroeHJ__gow&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>John Sullivan</name>
			<uri>http://pipes.yahoo.com/pipes/pipe.info?_id=FiExI4MS3RG8VVYcM1rX_Q</uri>
		</author>
		<source>
			<title type="html">John Sullivan's Emacs and free software blog posts</title>
			<subtitle type="html">Pipes Output</subtitle>
			<link rel="self" href="http://pipes.yahoo.com/pipes/pipe.run?_id=FiExI4MS3RG8VVYcM1rX_Q&amp;_render=rss"/>
			<id>http://pipes.yahoo.com/pipes/pipe.info?_id=FiExI4MS3RG8VVYcM1rX_Q</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Michael Lockhart: Build and install Emacs24 on Debian squeeze</title>
		<link href="http://sinewalker.wordpress.com/2012/01/15/build-and-install-emacs24-on-debian-squeeze/"/>
		<id>http://sinewalker.wordpress.com/?p=664</id>
		<updated>2012-01-15T12:57:54+00:00</updated>
		<content type="html">Hacking in Debian is so easy (one of the reasons I switched). Take, for instance, building Emacs. This is such a piece of cake compared to the weird hoops you have to go through to get all the build dependencies on other platforms. It’s something I never tried before, simply because it was too daunting [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://stats.wordpress.com/b.gif?host=sinewalker.wordpress.com&amp;amp;blog=169985&amp;amp;post=664&amp;amp;subd=sinewalker&amp;amp;ref=&amp;amp;feed=1&quot; width=&quot;1&quot; /&gt;</content>
		<author>
			<name>Mike (sinewalker)</name>
			<uri>http://sinewalker.wordpress.com</uri>
		</author>
		<source>
			<title type="html">sinewalker » emacs</title>
			<subtitle type="html">a geek's lab book.</subtitle>
			<link rel="self" href="http://sinewalker.wordpress.com/tag/emacs/feed/"/>
			<id>http://sinewalker.wordpress.com</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Alex Bennée: Getting organised</title>
		<link href="http://www.bennee.com/~alex/blog/2012/01/13/getting-organised/"/>
		<id>http://www.bennee.com/~alex/blog/?p=2567</id>
		<updated>2012-01-13T10:38:21+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;What with becoming a parent and getting promoted I suddenly find myself needing to become a lot more organised. Although I’ve been using &lt;a href=&quot;http://orgmode.org/&quot;&gt;org-mode&lt;/a&gt; for a bit I need to get a lot more organised with it.&lt;/p&gt;
&lt;p&gt;Previously I had two sets of org notes. My personal set where sitting on my server which I could access via the terminal. I generally accessed this at home on the odd occasion when I was doing things like the annual round of insurance quote gathering. The second set was a fairly simple time sheet type affair that I was using at work to keep a vague track of where all my time was spent. The big missing part of this is when I’m on the move.&lt;/p&gt;
&lt;p&gt;I’ve just recently upgraded my phone to the latest &lt;a href=&quot;http://www.bennee.com/~alex/blog/2012/01/06/nexus-of-possibilities/&quot;&gt;Galaxy Nexus&lt;/a&gt; which is a fine Google enabled device. I make no apologies for using Google’s calendering and shared document services. They work very well and importantly allow me to share things with my wife who doesn’t quite share my desire to run everything from a text editor. However for my personal task lists on the move and remembering what’s coming up at work it doesn’t quite cut it. Besides I like org-mode and I’d heard about &lt;a href=&quot;http://mobileorg.ncogni.to/&quot;&gt;MobileOrg&lt;/a&gt; so I endeavoured to set it up.&lt;/p&gt;
&lt;p&gt;MobileOrg has been around some time for the iPhone but the mechanisms it uses for integrating with org-mode are fairly well documented. As a result there is a couple of Android implementations for it. Matthew Jone’s &lt;a href=&quot;https://github.com/matburt/mobileorg-android&quot;&gt;mobileorg-android&lt;/a&gt; was the first version I tried.&lt;/p&gt;
&lt;p&gt;The original sync method for MobileOrg was to use a service like Dropbox to sync files. Given the history of Dropbox’s security I wasn’t about to move my files into the proprietary cloud. The alternative is to enable &lt;a href=&quot;http://en.wikipedia.org/wiki/WebDAV&quot;&gt;WebDAV&lt;/a&gt; on my web-server and therefor enable two way communication via HTTP. It was a little concerning to see self-signed SSL wasn’t supported as this does open up a potential attack vector on my machine. I’ve mitigated it a little by using digest authentication instead of basic-auth but I’d still prefer to be conducting these read-write operations over something more secure.&lt;/p&gt;
&lt;p&gt;Initial results were a little underwhelming. After some messing around with the format of org-links I eventually got a basic outline summary up. Unfortunately I can’t seem to sync notes created on my phone to the server. This seems to be a Apache problem which I shall have to dig into later.&lt;/p&gt;
&lt;p&gt;After perusing the market some more I noticed there is a new project in town. Konstantin’s &lt;a href=&quot;https://github.com/kvj/mobileorg-android&quot;&gt;MobileOrgNG&lt;/a&gt; was forked some time ago from Matthew’s code and on installing I found it looked an awful lot better. I’ve still be unable to post any locally added notes (due to previously mentioned Apache config issues). However it’s presentation is a lot slicker and it shows a lot of potential for being a good MobileOrg client.&lt;/p&gt;
&lt;p&gt;I’m now stuck with a classic open source fork dilemma. The code bases look to have diverged enough that these two projects are essential going their own way. Looking at the two &lt;a href=&quot;https://github.com/matburt/mobileorg-android/graphs/impact&quot;&gt;impact&lt;/a&gt; &lt;a href=&quot;https://github.com/kvj/mobileorg-android/graphs/impact&quot;&gt;graphs&lt;/a&gt; it looks like they diverged around August 2011 and since then MobileOrgNG looks pretty much like a solo effort albeit with an impressive commit rate of new features.&lt;/p&gt;
&lt;p&gt;So the questions for my readers. Which code base should I jump on? Has anyone got experience with the two different code bases and the reason they split? Are there any other Android clients for org-mode I should be looking at?&lt;/p&gt;</content>
		<author>
			<name>Alex</name>
			<uri>http://www.bennee.com/~alex/blog</uri>
		</author>
		<source>
			<title type="html">Alex's Adventures on the Infobahn » emacs</title>
			<subtitle type="html">the wanderings of a supposed digital native</subtitle>
			<link rel="self" href="http://www.bennee.com/~alex/blog/tag/emacs/feed/"/>
			<id>http://www.bennee.com/~alex/blog</id>
		</source>
	</entry>

</feed>

