summaryrefslogtreecommitdiff
path: root/posts/2016-02-14-ilovefs-emacs.skr
blob: 48dec06380a155d7febb2ab383da2d108149af24 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
(post
 :title "#ilovefs: Why GNU Emacs?"
 :date (string->date* "2016-02-14 22:00")
 :tags '("gnu"
         "planet-fsfe-en"
         "free software"
         "ilovefs"
         "emacs")

 (h2 [Why write about Emacs?])

 (p [I don’t usually try to explain tools that I use to other people,
     unless they made an explicit request as to how they could improve
     their workflow.  However, since ,(ref
     "https://fsfe.org/campaigns/ilovefs/2016/" "today is “I love Free
     Software” Day") I think I should seize this opportunity and
     explain what draws me to ,(ref "http://gnu.org/software/emacs"
     "GNU Emacs") and how I use it.])

 (p [Sometimes people who use computers ask me why I would use
     something as “bloated” as Emacs for text editing.  Usually they
     remark that Emacs is a hold-over from a by-gone era, much too
     large compared to editors like “vi”, and that they are quite
     content using a variant of vi or some Notepad-like editor.  They
     may have heard that you can play Tetris inside of Emacs and you
     can tell that they have difficulties hiding the fact that they
     are mildly disgusted by this abomination, a tool that seems to
     ignorantly contradict the Unix philosophy of doing just one thing
     and doing it well.])

 (h2 [Embracing the operating system])

 (p [I cannot help but notice that there’s a misunderstanding; at the
     very least there’s an invalid assumption, namely that we agree on
     terminology.  I do not consider Emacs a mere “editor”.  To some
     this is folk wisdom, a now blunt blade used by the old warriors
     in the ,(ref "https://en.wikipedia.org/wiki/Editor_war" "editor
     wars") of ancient history:])

 (blockquote
     [Emacs is a great operating system, lacking only a decent editor.])

 (p [I contest the second part (as Emacs has a multitude of decent
     editor modes, even for fans of vi), but I do agree with the
     hyperbolic first part: yes, an operating system indeed!])

 (p [Maybe not quite in the sense of the GNU operating system, but
     certainly in the sense that it is a platform to run applications.
     In fact, it is a platform very much like a modern web browser
     resembles an application platform more than it does a mere HTML
     document viewer.])

 (p [Just like a browser is used by many as a platform for running
     applications operating on some HTML document, Emacs is a platform
     for anything that can “reasonably” (this is up for
     interpretation) be mapped to buffers of text.  Applications in
     browsers are written in JavaScript, applications in Emacs are
     written in EmacsLisp (also called “elisp”).])

 (h2 [The universal text environment])

 (p [A text buffer in Emacs could hold the trail of a shell session
     (,(code [shell-mode])), an email (,(code [message-mode])), a TODO
     list (,(code [org-mode])), a directory listing (,(code [dired])),
     a text file on disk, a chat session (,(code [ERC])), a web page
     (,(code [eww])), the output produced by an external command, etc.
     Just like a modern web browser represents an environment in which
     a programming language can be used to manipulate and interact
     with HTML documents, Emacs is an environment for text buffers
     with a language that can be used to manipulate and interact with
     text buffers.])

 (p [If you have used your web browser (or have observed someone use
     their web browser) to play games, listen to music, watch videos,
     read and compose email, edit text (e.g. by contributing to the
     Wikipedia), chat with friends (or chat about foes), read
     documentation, installed an extension,(---)well, then the notion
     of a generic tool as a platform should not be a foreign concept
     to you.  Emacs can be understood as such a generic tool providing
     a text interface (one of which may be a file editor).])

 (h2 [Living in Emacs])

 (p [Emacs is my main user agent,(---)it acts as an assistant on my
     behalf in all matters relating to text,(---), much like the
     browser is the main user agent for documents and applications on
     the web to many people.  This is why I hardly remember when I
     last closed Emacs.  I do not start Emacs to edit a file; I’m
     living in Emacs.])

 (p [Not only am I’m writing this blog post in Emacs (obviously!), I’m
     also keeping track of multiple conversations on IRC in separate
     buffers; I’m ,(ref "http://www.djcbsoftware.nl/code/mu/mu4e.html"
     "reading and composing email"); I manage my GNU Guix software
     profiles with a dedicated Emacs mode; I deal with Git through a
     ,(ref "http://magit.vc/" "convenient two-dimensional text-based
     user interface") rather than using the one-dimensional, terse
     command line interface; when I view man pages I use ,(ref
     "https://www.gnu.org/software/emacs/manual/html_mono/woman.html"
     "woman"), which greatly enhances man page navigation; of course I
     use Emacs as an Info documentation browser as well; my shell
     sessions are in Emacs thanks to ,(code [shell-mode]),(---)I’m not
     one of those who run Emacs in a shell session inside a terminal
     emulator,(---); I view pretty PDF documents in Emacs buffers with
     ,(ref "https://github.com/politza/pdf-tools" "PDF tools"), and
     even my complete personal organisation and calendar needs are
     satisfied by an application running in Emacs (see ,(ref
     "http://orgmode.org" "Org mode")).])

 (h2 [There is no ,(em [one]) Emacs])

 (p [What is crucial to understand is that Emacs is not one and the
     same thing to any two Emacs users.  It is malleable and
     accessible thanks to being written in EmacsLisp.  When ogres are
     like onions, Emacs is probably like a giant cherry: a small solid
     core (written in C) and a delicious mantle of sweet EmacsLisp
     (analogies are not my strong suit).  Since almost every
     conceivable feature provided by Emacs is accessible through
     EmacsLisp and can be tweaked, rewired, or fully replaced, Emacs
     becomes what you want it to be.])

 (p [I probably could not use an Emacs instance that has been shaped
     by the habits of another hacker, and they probably also wouldn’t
     be happy with my configuration.  It’s like a tailor-made shirt in
     that it fits you exactly (if you take some time to take your
     measurements), yet it also fits like the most comfortable sweat
     pants as it won’t punish you if you change your sporty habits and
     gain weight.])

 (h2 [What’s GNU? GNU’s Not Unix!])

 (p [This leads me to the last point I wanted to address: the claim
     that Emacs is bloated and ignores the Unix philosophy of doing
     only one thing and doing it well.  I don’t know what “bloated”
     really means.  Emacs does come with a lot of features but this
     doesn’t make it bloated.])

 (p [I think this claim is rooted in another misunderstanding.  When
     you have a terminal emulator open in which you run a shell
     session (like bash), and you run a command like ,(code [ls]), you
     would not consider the shell to be bloated to allow you to
     interact seamlessly with external commands.  Likewise you
     probably don’t object to builtin commands that cannot easily be
     expressed with external executables or that make the shell more
     convenient to use.])

 (p [Similarly, Emacs is the perfect glue between different text-based
     applications.  When I run a shell inside of Emacs, what Emacs
     really does is spawn an external shell process and redirect input
     and output to talk to it transparently.  Or when I read email in
     mu4e the mail directory and its indexing database are not part of
     Emacs.  Or when I read PDFs they are actually rendered by a
     separate process.  Since many of these features are provided by
     optional extensions there really isn’t much to the claim that
     Emacs is bloated.])

 (p [However, it is true that Emacs does not blindly subscribe to the
     Unix philosophy.  One of its previous logos (my favourite) was an
     ,(ref "http://www.emacswiki.org/pics/static/KitchenSinkWhite.png"
     "overflowing kitchen sink"), acknowledging the fact that Emacs
     rather errs on the side of including more features rather than
     fewer when it is convenient.  The goal of the GNU project never
     was to merely provide a free clone of proprietary Unices, but to
     give users ,(ref "https://www.gnu.org/philosophy/free-sw.html"
     "software freedom").  In the case of Emacs the boundary between
     user and programmer is blurred as adapting the environment to
     one’s needs is ,(ref
     "https://www.gnu.org/software/emacs/emacs-paper.html" "already an
     act of programming with a very low barrier to entry").  Emacs
     provides ,(em [practical]) software freedom and that’s one of the
     main reasons why over the course of many years my perception of
     it has slowly shifted from a belittled tool only old-fashioned
     people use to the centre-piece of most of my daily computing
     activities.])

 (p [Yay for GNU Emacs, yay for free software!]))