<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jason Madden (An ongoing series about our most important tool, our editors.)</title><link>https://seecoresoftware.com/</link><description>Relating to the editors we use.</description><atom:link href="https://seecoresoftware.com/blog/categories/cat_editor-wars.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2021 &lt;a href="mailto:jason@seecoresoftware.com"&gt;Jason Madden&lt;/a&gt; </copyright><lastBuildDate>Sat, 04 Dec 2021 18:43:32 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>There and Back Again: My Journey to (and From) Emacs</title><link>https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html</link><dc:creator>Jason Madden</dc:creator><description>&lt;div&gt;&lt;p&gt;This is the story of how I started using Emacs, switched away to vi,
and then switched back to Emacs years later.&lt;/p&gt;
&lt;p&gt;(This post is part of a &lt;a class="reference external" href="https://seecoresoftware.com/blog/editor-wars.html"&gt;series&lt;/a&gt;.)&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;div class="contents topic" id="contents"&gt;
&lt;p class="topic-title first"&gt;Contents&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#in-the-beginning" id="id12"&gt;In The Beginning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#times-grow-turbulent" id="id13"&gt;Times Grow Turbulent&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#gnossm" id="id14"&gt;GNOSSM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#lowest-common-denominator" id="id15"&gt;Lowest Common Denominator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#the-status-quo" id="id16"&gt;The Status Quo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#lisp-changes-everything" id="id17"&gt;Lisp Changes Everything&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#slime" id="id18"&gt;SLIME&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#journey-s-end" id="id19"&gt;Journey's End?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="in-the-beginning"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id12"&gt;In The Beginning&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flash back with me, if you will. Picture it, Sicily, 1939...no, wait,
that's &lt;em&gt;The Golden Girls.&lt;/em&gt; Picture it, rural Oklahoma, 1997-8. All of my
computing experience had been with DOS, Windows 3.x and 95 (at home),
and MacOS 6 and 7 (at school and locked down). ("Operating systems not
known for their advanced editors", he says in his best Johnny
impression. &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f1" id="id1"&gt;[1]&lt;/a&gt;) But I was hungry for more, and after talking with
a friend from the local bank about their minicomputer running some
variant of Unix &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f2" id="id2"&gt;[2]&lt;/a&gt;, I was intrigued enough to take the plunge.&lt;/p&gt;
&lt;p&gt;I bought a book on Linux specifically to get the CD included in the
back, and converted my family's computer to dual-boot between Windows
95R2 and a stripped down RedHat Linux 5 (I think). With limited
available documentation, and no Internet access &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f3" id="id3"&gt;[3]&lt;/a&gt;, what simple
editing I did was with the default, beginner-friendly editor, most
likely &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Pico_(text_editor)"&gt;pico&lt;/a&gt; or &lt;a class="reference external" href="https://en.wikipedia.org/wiki/GNU_nano"&gt;nano&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="times-grow-turbulent"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id13"&gt;Times Grow Turbulent&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Skip forward another six months or so. I'm now at &lt;a class="reference external" href="http://ossm.edu"&gt;OSSM&lt;/a&gt;, Oklahoma's
residential high school, located in the hustle and bustle of Oklahoma
City near the state capital. OSSM's prime real estate meant that it
had a direct connection to Oklahoma's Internet backbone, and 100Mbps
Ethernet was available in the dorm rooms.&lt;/p&gt;
&lt;p&gt;I'm now dual-booting Windows 98 and RedHat 6, and taking my first
computer science courses. To do homework assignments, I needed a C
compiler and editor. I could go to the computer lab and use their
Windows-based IDE (Borland C), but there was no way to install that on
the computer in my dorm room. But wait, my RedHat partition had a C
compiler. All I needed now was a C editor.&lt;/p&gt;
&lt;p&gt;I used the fabulous Internet access to research &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f4" id="id4"&gt;[4]&lt;/a&gt; "best
programming editor." The answer I found was &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Emacs"&gt;Emacs&lt;/a&gt;, so I happily set
about learning Emacs. Most likely I used &lt;a class="reference external" href="https://en.wikipedia.org/wiki/XEmacs"&gt;XEmacs&lt;/a&gt; for its better
graphical support—I mean, keyboards are great and all, but X11
is where it's at.&lt;/p&gt;
&lt;div class="section" id="gnossm"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id14"&gt;GNOSSM&lt;/a&gt;&lt;/h3&gt;
&lt;div class="figure align-right"&gt;
&lt;img alt="A SPARCstation 20" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/SPARCstation20_front_and_rear.jpg/1280px-SPARCstation20_front_and_rear.jpg" style="height: 300px;"&gt;
&lt;p class="caption"&gt;A well-loved SPARCstation 20. (Photo by Caroline Ford.)&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The aforementioned computer lab had a collection of exotic hardware
running exotic Unix operating systems:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Personal DECstation 5000/25 running &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ultrix"&gt;Ultrix&lt;/a&gt; 4.3 and later
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/NetBSD"&gt;NetBSD&lt;/a&gt; 1.42&lt;/li&gt;
&lt;li&gt;SPARCStation LX running &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Solaris_(operating_system)"&gt;Solaris&lt;/a&gt; 2.4&lt;/li&gt;
&lt;li&gt;SPARCStation 20 (dual processors!) running &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Solaris_(operating_system)"&gt;Solaris&lt;/a&gt; 2.6&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The OSSM network administrators were gracious enough to allow most
administration of these machines to be handled by the students. A user
group referred to as "GNOSSM" soon formed around these machines.&lt;/p&gt;
&lt;p&gt;Unlike RedHat 6, these machines had no (or extremely limited)
graphical administration tools. If you wanted to make changes to a
configuration (for example, we wanted to share accounts across all of
them using &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Network_Information_Service"&gt;NIS&lt;/a&gt;), you had to edit text files.&lt;/p&gt;
&lt;p&gt;But there was a problem: not all of these machines had Emacs! They
didn't even all have pico! (And let's not even talk about trying to
install new software on all of them. Have you seen the old Solaris
package manager?) On the machines that did have Emacs, it was far too
slow to start for the impatience of youth.&lt;/p&gt;
&lt;p&gt;You see, Emacs was considered to be a large, heavyweight editor. Disk
space and installation media size were factors. Plus, there may have
been licensing concerns for the commercial Unix vendors.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="lowest-common-denominator"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id15"&gt;Lowest Common Denominator&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There was one editor available on all these machines, as well as
Linux &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f5" id="id5"&gt;[5]&lt;/a&gt;: &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Vi"&gt;vi&lt;/a&gt;. It was available &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f6" id="id6"&gt;[6]&lt;/a&gt;, it was fast, and ... it was
completely foreign. The concept of editing "modes," where different
single keys do different things depending on invisible state, was
completely different than Emacs's chorded key binding system. Rather
than continue learning Emacs and also learning a whole new way of
doing things, it was easiest just to drop Emacs. After all, vi turned
out to be a decent programmer's editor too!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="the-status-quo"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id16"&gt;The Status Quo&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And that's where things largely remained for the next decade. I
soldiered on with vi as my Unix text editor of choice for personal and
school projects as well as system administration tasks. I developed a
small customization file for it (&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;~/.vimrc&lt;/span&gt;&lt;/tt&gt;) of about 150 lines,
along with language customizations for the types of files I edited
most frequently &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f7" id="id7"&gt;[7]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was working with a large, distributed team that did most development
in Java and had standardized on &lt;a class="reference external" href="http://www.eclipse.org/ide/"&gt;the Eclipse IDE&lt;/a&gt;, so most of my
professional editing was done in that tool.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="lisp-changes-everything"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id17"&gt;Lisp Changes Everything&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In 2007, I began developing &lt;a class="reference external" href="https://ieeexplore.ieee.org/document/5470881/"&gt;the Gozer workflow system&lt;/a&gt; whose central
feature was a custom &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Lisp_(programming_language)"&gt;Lisp&lt;/a&gt; dialect that ran on the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Java_virtual_machine"&gt;Java virtual
machine&lt;/a&gt; in order to interoperate with the existing Java code. The
core interpreter was implemented in Java, but the majority of the
standard library for Gozer was implemented in Gozer's Lisp dialect.&lt;/p&gt;
&lt;p&gt;Lisp's simple textual structure demands a powerful editor. I was
unsatisfied with what was available for Eclipse and what was available
for vi. Yet by this point, I was so invested in those platforms that I
was reluctant to make any changes to my editing habits, and I
continued to use them for my Lisp code.&lt;/p&gt;
&lt;div class="section" id="slime"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id18"&gt;SLIME&lt;/a&gt;&lt;/h3&gt;
&lt;div class="figure align-left"&gt;
&lt;img alt="SLIME windows in Emacs on macOS" src="https://common-lisp.net/project/slime/images/more-slime.png" style="height: 300px;"&gt;
&lt;p class="caption"&gt;Some of the features that SLIME provides.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Lisp, like Python, is an interactive language, usually featuring a
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop"&gt;REPL&lt;/a&gt; where a programmer can input short code snippets and see
printed results. Gozer originally had a REPL based on &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Telnet"&gt;telnet&lt;/a&gt;: a
programmer would start the Gozer interpreter which in turn would
listen on a socket, and then in a different console window would
telnet in to the Gozer process, where they could type commands and see
textual output. This worked, but was cumbersome, and didn't offer much
in the way of introspection.&lt;/p&gt;
&lt;p&gt;One of the things every language needs is a debugger. The Eclipse IDE
had a very rich debugger for Java programs, capable of setting
breakpoints and inspecting objects. I wanted something like that for
Gozer, but didn't have the time to implement both the necessary
support in Gozer as well as the UI in Eclipse.&lt;/p&gt;
&lt;p&gt;Meanwhile, the Gozer Lisp dialect was evolving to implement a large
subset of the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Common_Lisp"&gt;Common Lisp&lt;/a&gt; standard. This meant that I needed to be
able to write and test programs in a Common Lisp implementation
(&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Steel_Bank_Common_Lisp"&gt;SBCL&lt;/a&gt;) in order to compare them to what Gozer was doing. For a
debugger, REPL and IDE, SBCL used &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Steel_Bank_Common_Lisp"&gt;SLIME&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SLIME, the Superior Lisp Interaction Mode for Emacs, runs in Emacs. To
use it, I would have to start using Emacs again. I grumbled about this
to anyone who would listen, but two factors changed my mind.&lt;/p&gt;
&lt;p&gt;The first was the existence of &lt;a class="reference external" href="http://danmidwood.com/content/2014/11/21/animated-paredit.html"&gt;Paredit&lt;/a&gt;, a way to structurally edit
Lisp in Emacs that takes advantage of Lisp's unique and regular form.
Together with the existing Emacs Lisp editing support, this provided
by far the best way to edit Lisp that I had yet seen.&lt;/p&gt;
&lt;p&gt;The second was the fact that SLIME was (mostly) cleanly separated into
two parts: the frontend that ran in Emacs, and a backend called
"swank" that ran in the Lisp process. This separation is how
SLIME supported almost a dozen widely different Lisp implementations.
With just a little bit of work to implement the swank protocol, Gozer
could have a full featured IDE, REPL, and debugger &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f8" id="id8"&gt;[8]&lt;/a&gt;! This put it
over the top, and I moved all of my Lisp work into Emacs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="journey-s-end"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id19"&gt;Journey's End?&lt;/a&gt;&lt;/h2&gt;
&lt;div class="figure align-right"&gt;
&lt;img alt="My Emacs winow" src="https://seecoresoftware.com/blog/2018/06/jm-emacs-window.png" style="height: 400px;"&gt;
&lt;p class="caption"&gt;Editing this post in Emacs.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Today, I do almost all of my personal and professional editing in
Emacs. I've found Emacs's customizability &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f10" id="id10"&gt;[10]&lt;/a&gt;, power, and broad
language support to be a good fit for my needs.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Python code is edited using the standard &lt;a class="reference external" href="https://www.emacswiki.org/emacs/PythonProgrammingInEmacs"&gt;python.el&lt;/a&gt; mode, together
with the excellent &lt;a class="reference external" href="https://github.com/jorgenschaefer/elpy"&gt;elpy&lt;/a&gt; IDE extension.&lt;/li&gt;
&lt;li&gt;Posts for this site use &lt;a class="reference external" href="http://docutils.sourceforge.net/docs/user/emacs.html"&gt;rst.el&lt;/a&gt; to edit reStructuredText.&lt;/li&gt;
&lt;li&gt;Everything is wrapped up in &lt;a class="reference external" href="http://cedet.sourceforge.net"&gt;CEDET&lt;/a&gt; and &lt;a class="reference external" href="http://ecb.sourceforge.net"&gt;ECB&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The transition wasn't as painful as I feared. I enjoy the fact that on
macOS, GUI text fields have many of the most common Emacs keybindings
enabled by default (e.g., Ctrl-A takes you to the beginning of the
line and Ctrl-E to the end) &lt;a class="footnote-reference" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#f9" id="id11"&gt;[9]&lt;/a&gt;. Console applications that use the
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/GNU_Readline"&gt;readline&lt;/a&gt; library for text entry (including most shells like bash
and the Python REPL) also use these keys.&lt;/p&gt;
&lt;p&gt;In case you were worried, rest assured that I haven't abandoned vi. I
still type &lt;tt class="docutils literal"&gt;view&lt;/tt&gt; by default on the console to quickly look at
files, especially programming language files.&lt;/p&gt;
&lt;p class="rubric"&gt;Footnotes&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="f1" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Which is not very good.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f2" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id2"&gt;[2]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;It was a BSD. Or possibly a SVR4.3.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f3" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id3"&gt;[3]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;em&gt;You&lt;/em&gt; try configuring PPP and a Winmodem on RedHat 5.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f4" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id4"&gt;[4]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;With an early version of Google, launched in 1998.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f5" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id5"&gt;[5]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;On Linux, it would have been &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Vim_(text_editor)"&gt;Vim&lt;/a&gt;, a vastly expanded
version of the original vi.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f6" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id6"&gt;[6]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Having been created by Bill Joy as part of the original BSD
releases. Joy later moved to Sun, creators of Solaris, and
vi followed. It's also standardized by POSIX.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f7" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id7"&gt;[7]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Those file types were C, HTML, Java, LaTeX, Objective-C,
Perl, PHP and SQL.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f8" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id8"&gt;[8]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The nascent &lt;a class="reference external" href="https://www.ibm.com/developerworks/opensource/library/os-eclipse-lispcusp/index.html"&gt;Cusp&lt;/a&gt; Eclipse plugin &lt;em&gt;also&lt;/em&gt; used swank to communicate
between the GUI in Eclispe and the Lisp implementation. By
implementing the protocol, I could offer a full IDE to those
that would use Emacs, and still offer some basic support for
those that wanted to use Eclipse.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f9" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id11"&gt;[9]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;With just a little work, you can get &lt;a class="reference external" href="https://gist.github.com/cheapRoc/9670905"&gt;many more keybindings&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table class="docutils footnote" frame="void" id="f10" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html#id10"&gt;[10]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;I have about 1400 lines of Emacs Lisp code to customize Emacs
to my preferences, and I have dozens of third-party
extensions installed.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;/div&gt;</description><category>editor</category><category>editor wars</category><category>emacs</category><category>series</category><category>vi</category><guid>https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html</guid><pubDate>Fri, 01 Jun 2018 21:26:07 GMT</pubDate></item><item><title>Editor Wars: Violent Delights Have Violent Ends</title><link>https://seecoresoftware.com/blog/editor-wars.html</link><dc:creator>Jason Madden</dc:creator><description>&lt;div&gt;&lt;p&gt;As developers, one of the most important tools in our toolkits is our
editor. Looking around the office, you'll find a wide variety of
editors in use, everything from editors with long pedigrees to the
most recently developed editor boasting the technology du jour.&lt;/p&gt;
&lt;p&gt;The choice of editor can be a very personal thing. While we have no
interest in starting or escalating the actual &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Editor_war"&gt;editor war&lt;/a&gt;, we
thought it would be interesting to survey the office and collect some
stories about editors and the people who use them in this ongoing
(sporadic) series.&lt;/p&gt;

    &lt;!-- Begin post-list post_list_6f9ee7ed74224f45b8bbe2e24c55200b --&gt;
    &lt;div id="post_list_6f9ee7ed74224f45b8bbe2e24c55200b" class="post-list post-list-author"&gt;
        &lt;ul class="post-list"&gt;
            &lt;li class="post-list-item"&gt;
                &lt;a href="https://seecoresoftware.com/blog/2018/06/my-journey-to-emacs.html"&gt;There and Back Again: My Journey to (and From) Emacs&lt;/a&gt;
                — Jason Madden
                  (2018-06-01)
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;
    &lt;!-- End post-list post_list_6f9ee7ed74224f45b8bbe2e24c55200b --&gt;&lt;/div&gt;</description><category>editor</category><category>editor wars</category><category>emacs</category><category>series</category><category>vi</category><guid>https://seecoresoftware.com/blog/editor-wars.html</guid><pubDate>Fri, 01 Jun 2018 21:15:38 GMT</pubDate></item></channel></rss>