├── images
└── .gitkeep
├── Contents.txt
├── emacsism.pdf
├── readme.md
└── emacsism.md
/images/.gitkeep:
--------------------------------------------------------------------------------
1 | # this directory was conjured with black magic :)
2 |
--------------------------------------------------------------------------------
/Contents.txt:
--------------------------------------------------------------------------------
1 | > These files will be included in your book:
2 |
3 | emacsism.md
4 |
--------------------------------------------------------------------------------
/emacsism.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChillarAnand/emacsism/HEAD/emacsism.pdf
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Emacsism
2 |
3 | A glimpse of divine editing experience with emacs!
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/emacsism.md:
--------------------------------------------------------------------------------
1 | # Prologue
2 |
3 | Emacs was originally written in 1976. It has been almost 40 years since it came into the picture, and yet none of the latest and most advanced software have been able to replace it.
4 |
5 | There is something magnificient about Emacs that draws people to use it, develop it further, and form a cult around it throughout all these years. It is one of the longest living programming applications in the history of computers.
6 |
7 | You might have read a lot of flattery about Emacs. If you try and learn Emacs for a while (maybe few weeks to few months), you will realize that the flattery is actually true. Everything you have read is much less than the actual capabilities of Emacs.
8 |
9 |
10 |
11 |
12 |
13 | # Why This Book?
14 |
15 | I was using PHP for server-side programming, and I was looking for a good IDE. I tried Sublime Text, Eclipse, and Vim for a while, and I settled for Vim.
16 |
17 | After a year or so, I switched from PHP to Python. I found that quite a few people in Python community were using something called Emacs.
18 |
19 | I started digging about Emacs and came across the editor war. There were a few articles which supported Vim, covering why Vim is better than Emacs in many aspects. So I thought Vim was much better than Emacs. When I looked at statistics, Vim was more popular than Emacs. In addition, I had already spent a year learning and customising Vim. I wasn't ready to switch.
20 |
21 | Even though Emacs had a smaller user base, it had a cult following. There were a few good programmers in Python community who used Emacs, and they recommended it. I decided to try it out for a few weeks to figure out for myself what's so great about Emacs.
22 |
23 | For a couple of weeks, I used it almost like a notepad. I started learning Elisp and I customized Emacs a little bit. After a couple of months, I was surprised to find that I was spending almost all the time in Emacs itself. I started wondering what made Emacs such a great text editor and understanding the fundamentals (not just the basics) of Emacs.
24 |
25 | This little book is created to share those things. This book:
26 |
27 | * Explains fundamentals of Emacs and how those fundamentals made Emacs different from other software.
28 |
29 | * Debunks a few popular myths about Emacs such as `Emacs users use a lot of modifier keys like CTRL, ALT`.
30 |
31 | Explaining how to use Emacs itself is beyond the scope of this book.
32 |
33 |
34 |
35 |
36 |
37 | # Cautions
38 |
39 |
40 | ## About Emacs
41 |
42 | If you are a programmer and looking for software readily setup with features such as syntax highlighting, auto-completion, and debuggers to help you write and execute code, then you can stop here and go for an IDE.
43 |
44 | But if you are not satisfied with that and need to start with something much simpler yet more powerful than an IDE, and if you are seeking a divine editing experience, then Emacs might be what you need!
45 |
46 | I see Emacs as an inward spiral. Once you start learning and realizing the power of Emacs, you will start spending more and more time within Emacs. You will run out of reasons to get out of Emacs. You have been warned!
47 |
48 |
49 | ## About Book
50 |
51 | I am neither a professional writer nor an expert in Emacs. I've just tried to put my thoughts about Emacs on a paper. When I got stuck in explaining something, I copied a few ideas from blog posts. Any mistakes are my own.
52 |
53 |
54 |
55 |
56 |
57 | # Why Emacs?
58 |
59 | In this chapter, let's compare Emacs with other editors or IDEs so that we can have better understanding of the fundamental features of Emacs. Note that Emacs is not just a text editor, but an extensible computing environment.
60 |
61 |
62 | ## Real Estate
63 |
64 | If you look at a typical IDE, its layout looks like this:
65 |
66 | ![alt ide][ide]
67 |
68 | [ide]: https://cloud.githubusercontent.com/assets/4463796/8724470/7b7464e2-2bed-11e5-9e90-43b0cc634cbc.png
69 |
70 | Some IDEs have more components. Here is the screenshot of Emacs as I am writing this book:
71 |
72 | ![alt emacs][emacs]
73 |
74 | [emacs]: https://cloud.githubusercontent.com/assets/4463796/8724469/7b6c6b7a-2bed-11e5-8b7c-3017244a8c1a.png
75 |
76 | Pretty neat, huh? Since it is completely distraction-less, you can visually concentrate on getting things done. :D
77 |
78 |
79 | ## Buffers
80 |
81 | Most IDEs use tabs to hold files when a file is opened. One serious disadvantage is that it doesn't scale well. If you open more than ten files, the bar that shows file names will get clogged. It becomes quite difficult to switch between files.
82 |
83 | Emacs uses something called "buffers" to hold files/text. Every time a file is opened or a process is started, a buffer is used to hold text. Buffers can scale to a very large extent. You can open thousands of files and you can switch to any file with just a few key presses.
84 |
85 |
86 | ## Extensibility
87 |
88 | Extensibility lies at the heart of Emacs. What I mean by extensibility is:
89 |
90 | * The end user should be able to change any piece of editor.
91 | * The editor should have the ability to add new functionality, without affecting its internal structure and data flow.
92 |
93 | For example, most editors have fuzzy search to find files in a project. Fuzzy search is awesome. If you have several projects, it would be great if you could fuzzy search project names also. If you are not using Emacs, try to implement this in your editor and see how it goes.
94 |
95 | In Emacs, it is as easy as calling an existing function with a different variable. The same thing applies to most features. With a few lines of code, you can customize or extend any piece of it the way you want.
96 |
97 |
98 | ## Composability
99 |
100 | Composability refers to the inter-relationships of components. In Emacs, every component can be selected and assembled in various combinations according to user requirements.
101 |
102 | Take the previous example of fuzzy search. Most editors combine two pieces to achieve it. They combine their `fuzzy search` code with their `open file` code. You can `search` for a file, press enter, and `open` the file. After searching for a file, instead of `opening` the file, what if you want to `rename` or `delete` it? It's often impossible.
103 |
104 | In Emacs, once you `search` for a file, you can perform any action on it. You can open it, rename it, or delete it, or you can define your own function to do something else.
105 |
106 | This composability allows you to either modify existing features or define new features with very few lines of code.
107 |
108 |
109 | ## DWIM
110 |
111 | Emacs has quite a few DWIM(Do What I Mean) functions. Instead of blindly executing user's input, these functions will try to do the right thing by programmatically responding to past actions and/or document state. This reduces number of keystrokes a user has to use for a particular task.
112 |
113 | A simple example is `comment-dwim-2`[^1]. This function based on past cursor movement & context, figures out whether user is trying to comment a piece of code or inserting an inline comment or uncommenting a piece of code and responds accordingly.
114 |
115 | [^1]: https://github.com/remyferre/comment-dwim-2
116 |
117 | ## Replication
118 |
119 | To customize an IDE, You have to click menus/checkboxes. If You are using IDE, You might also need terminal or terminal multiplexer. You might have some custom configuration for terminal tools also. You might even need some other third party tools for Your development environment.
120 |
121 | Consider some situation where You have to
122 |
123 | * Reinstall Your OS
124 | * Use multiple machines for development
125 | * Use friends system for some quick bug fixing
126 |
127 | In these situations, You need a lot of time just to replicate Your development environment.
128 |
129 | If You are using emacs, You will be using it for most of the tasks. To customize Emacs, You have to write some code(which is a good thing) instead of clicking menus/checkboxes. You can keep all Your config in dot files and use a version control to manage it.
130 |
131 | In above situations I have mentioned, replicating Your environment is as easy as cloning Your Emacs config and restarting Emacs. You can replicate Your development environment in just few minutes.
132 |
133 |
134 | # Why Editor War Is Stupid
135 |
136 | Both Emacs and Vim has cult following and they are the longest lived programming applications of all time. Both groups insist that their editor is best. This has led to many flame wars and lots of jokes about both.
137 |
138 | ## Vim
139 |
140 | Vim is a superior **text editor** and is far better than many editors out there. Most of the systems have Vim pre-installed and You can use Vim with same commands on any system. You can quickly open a file, make bunch of changes and close it.
141 |
142 |
143 | ## Emacs
144 |
145 | Eventhough Emacs is commonly known as text editor, it is somewhat misleading. Emacs is an **extensible computing environment**. So You can use Emacs as
146 |
147 | * Mail Client
148 | * Document Viewer
149 | * Twitter Client
150 | * Irc Client
151 | * Web Browser
152 | * Video Editor
153 | * Blog Editor
154 | * Paint(Yes, You can draw pics)
155 | * Spreadsheet
156 | * Todo List
157 | * Wiki
158 | * Translator
159 | * Terminal Multiplexer
160 | * SSH Client
161 | * Slides Editor
162 | * Stack Exchange client
163 | * Playing Games
164 | * Version Control Interface
165 | * Web server
166 | * Lisp Interpreter
167 | * SQL client
168 | * Writing & Debugging code
169 |
170 | and thousands of other things.
171 |
172 | Basically, You will keep it open 24/7 and live inside it.
173 |
174 | I think comparing both of them is kind of stupid. If we want to compare two things, they have to be atleast in the same category. There is no point in comparing a chair and a projector.
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 | # Why Use Emacs For Everything?
186 |
187 | As explained in previous chapter, Emacs can be used for all sorts of things. There are many advantages of using Emacs everywhere. Lets take a look at some examples.
188 |
189 | ## 1. Write a python script to update table in MySQL.
190 |
191 | **Without Emacs:** For writing Python code, I will be using IDE. Since I dont know how to update table in MySQL, I have to open browser, go to stackoverflow, search for it and find relevant code. Then I have to open a terminal, create a mysql process and test the query. Once I know that it is working fine, I have to go back to editor and use that query in script.
192 |
193 | **With Emacs:** Emacs has stackexchange client. So I can search for it in stackoverflow from Emacs. When I get the results, I can select relevant code and then send that directly to MySQL process which is running in Emacs. If that code works, I can switch back to python script and paste it.
194 |
195 | There is no need to switch between various applications as I can do most of the things in Emacs.
196 |
197 |
198 | ## 2. Play the dark knight movie.
199 |
200 | Lets us assume movie is located in `/home/anand/videos/movies/english/dark-knight/`.
201 |
202 | **Without Emacs:** First I have to open a file manager. By default, it will show home folder `/home/anand`. Now I have to go to `videos`, then `movies`, then `english`, then `dark-knight` and double click the video file. This video will be opened in some media player.
203 |
204 | **With Emacs:** Since I am using [singularity](#singularity), if I just press `fj drk`, Emacs shows me with the relevant video file `dark-knight.mkv`. Now if I just press enter, it will open in a media player.
205 |
206 | By using Emacs I will be able to access any file in the operating system with very little effort.
207 |
208 |
209 | ## 3. Indent code while creating a github issue.
210 |
211 | **Without Emacs:** While creating a github issue if I want a piece of text to be recognised as code, I need to do proper indentation. So I have to manually indent those lines. Alternatively, I can copy that text to IDE, indent there and then copy back.
212 |
213 | **With Emacs:** Emacs has a package which provides an interface to edit text areas directly in Emacs. So, I by calling a single function, I can easily format code part.
214 |
215 | Since Emacs acts as an interface, the entire power of Emacs will be available for any task.
216 |
217 |
218 | These are just a few examples. You can checkout wide variety of packages available for various things for more.
219 |
220 |
221 | # Escaping Meta Alt Control Shift
222 |
223 | > An old joke: Emacs stands for "Escape Meta Alt Control Shift."
224 |
225 | > Emacsism: Emacs stands for "Escaping Meta Alt Control Shift."
226 |
227 | One of major problems with Emacs is that users need to use modifier keys[Shift, Ctrl, Alt/Meta, Super] repetetively. If we look at the key board layout, these keys are placed at extreme right and left. To use a modifier key, we have to use pinky and need to stretch it or move the hand which are not ergonomic/convinient.
228 |
229 |
230 | ### Escaping Ctrl
231 |
232 | `Ctrl` key is located at bottom corners and is hard to reach. To avoid using it, users often bind caps lock to ctrl. This reduces little stretching. Still you have to use pinky everytime. If I have to press `C-x C-s`, I have to hold `caps lock` with left pinky and then press `x` & `s` with remaining fingers which is inconvinient. An alternate solution is to use right `ctrl` with pinky and press `x` & `s` with left hand which leads to the original problem.
233 |
234 | Also if we look at strength of our fingers, thumb stands at the top, pinky at bottom and remaining fingers somewhere in the middle. So binding caps lock to ctrl doesn't solve the problem ergonomically.
235 |
236 | The best alternative is to use `space` as `space` and `ctrl`. If you press and leave space, it will act as space. If you hold it longer, it is equivalent to holding ctrl.
237 |
238 | This might feel bizzare at first. Once you get used to it, you will never go back and you don't have to worry about pinky pains.
239 |
240 | To modify space, there is a package called `xcape` for linux. You can use [this script](https://github.com/ChillarAnand/01/blob/master/ubuntu/bin/xcape.sh) for it.
241 |
242 |
243 | ### Escaping Shift
244 |
245 | Lets look at some common situations where we use shift most and how to avoid it Emacs.
246 |
247 | #### Special characters:
248 |
249 | You can track keyboard usage with tools like [WhatPulse](https://whatpulse.org/). If usage of symbols is more than that of numbers, you can interchange keys and symbols.
250 |
251 | #### Casing
252 |
253 | If You are writing a book or documenting something, You need to capitalize words after a sentence/paragraph, always capitilize few characters/words e.t.c. You can use [auto-capitalize](https://www.emacswiki.org/emacs/auto-capitalize.el) package mode which automatically does that for You.
254 |
255 | Based on the programming language, You have to case the identifiers(as per language - snake case for python, camel case for java, capitalized keywords for SQL). Emacs has a package called [electric-case](https://github.com/zk-phi/electric-case) which automatically does that for You. If You are using Emacs for SQL database access, there is a package called sql-up mode, which automatically upcases SQL keywords.
256 |
257 | This reduces shift usage to a great extent.
258 |
259 | ### Escaping Meta/Alt
260 |
261 | Alt key is not a big deal as we use thumb to press it. However if You are willing to rebind, You can do it. Most of the times meta is used only to invoke `M-x`. There is a package called [key-chord](http://www.Emacswiki.org/Emacs/key-chord.el)[^1] which lets You to rebind any key combination to any two keys pressed automatically. So You can rebind `M-x` to `mx`.
262 |
263 | I do recommend using key-chord, to rebind most used key bindings. It saves a lot of key presses. For example, instead of typing `C-c C-p r` everytime, You can just bind it to `pr`.
264 |
265 | ### Escaping Other Modifiers
266 |
267 | We don't have to worry about enter, tab and backspace keys as default emacs bindings `C-m`, `C-i`, `C-d` do the appropriate job.
268 |
269 |
270 | All these key modification we were dicussing will work in terminal also once you set editing mode as emacs. To set mode in terminal use
271 |
272 | ```sh
273 | set -o emacs
274 | ```
275 |
276 | Once you get used to this, you can use emacs and terminal with just alphabets, special symbols and space key without worrying about modifier keys.
277 |
278 | [^1]: http://www.Emacswiki.org/Emacs/key-chord.el
279 |
280 |
281 |
282 |
283 | # Emacs Singularity
284 |
285 | > Singularity is an era in which our intelligence will become increasingly nonbiological and trillions of times more powerful than it is today—the dawning of a new civilization that will enable us to transcend our biological limitations and amplify our creativity.
286 |
287 | Let us try to move to a directory called `Emacsism` which is present in `/home/anand/projects/books/lisp/Emacs/`.
288 |
289 |
290 | ## Level 0: Typing
291 |
292 | If I want to go to that directory using a bash shell, I have to type `cd /home/anand/projects/books/lisp/Emacs/Emacsism`. It will be difficult since I have to type such a long path. It even becomes annoying if I have to type it everytime I have to go to that directory.
293 |
294 |
295 | ## Level 1: Autocompletion
296 |
297 | If I use `zsh` instead of `bash`, I will get autocompletion for the path `/home/anand/projects/books/lisp/Emacs/Emacsism`. Now it becomes much easier to go to that directory as the amount of typing is decreased.
298 |
299 |
300 | ## Level 2: Selection Narrowing
301 |
302 | If I use a plugin called `jump` on top of `zsh`, I can use selection narrowing for path. By this, I can run `j Emacsism` on terminal, which takes me directly to that directory. Since it uses selection narrowing, I don't even need to type entire folder name. So instead of typing `j Emacsism` I can just type `j ism` which takes me to `Emacsism` as `ism` is unique to that directory. Thus selection narrowing tries to narrow down all available options based on few characters given by user.
303 |
304 | This selection narrowing greatly improves productivity. However the method explained above is **not** interactive. Consider a case where I have two directories `Emacsism1` and `Emacsism2`. Now if I run `j ism` it will take me to recent visited of `Emacsism1` & `Emacsism2`.
305 |
306 | On the other other hand Emacs selection narrowing(using Helm) is interactive. To change a directory in Emacs, I will call a command which is responsible for changing directories. By default it shows all the options so that I can navigate through them. If I type `i`, it narrows all the directories whose path has `i` in them. If I type `ism`, it filters down to two directories `Emacsism1` & `Emacsism2` and I can select any one. Thus by having interactive selection narrowing, Emacs will steer in the right direction.
307 |
308 | Selection narrowing is not just limited to switching directories in Emacs. You can use it for anything.
309 |
310 | If You have opened lot of files, just by typing a few characters, You can open that file.
311 |
312 | Emacs has lots of commands. Some of them have keybindings. Most of them wont have keybindings. So selection narrowing can be used to narrow down commands.
313 |
314 | If You have bookmarked lots of urls in Your browser, You can do selection narrowing on them from Emacs and when You select one, it will automatically takes You to browser with that page opened.
315 |
316 | If You have starred thousands or repositories in github, You can do selection narrowing on them too.
317 |
318 | You can define Your own commands which does selection narrowing on any items You want and this can be done with just one line of code.
319 |
320 |
321 |
322 | ## Level 3: Singularity
323 |
324 | > `Emacs singularity` is a hypothetical function, which is capable of doing anything!!
325 |
326 | Singularity is a higher order of selection narrowing. In previous section, I have used selection narrowing for one set of options. To take if further, I can do selection narrowing on anything(buffers, files, commands, dirs, bookmarks).
327 |
328 | selected one command & I have used selection narrowing for the argument. In addition to arguments, I can even do selection narrowing on commands. In addition to performing selection narrowing individually on arguments or commands, I can do selection narrowing on a combination of command & argument. This is where singularity comes into picture.
329 |
330 | Lets see how some general actions that are performed in Emacs.
331 |
332 | If I want to activate a mode in a buffer, I have to run `M-x `.
333 |
334 | If I want to switch from one buffer to another, I have to run `M-x switch-to-buffer `. Since `switch-to-buffer` function is binded to `C-x b`, I can run `C-x b `.
335 |
336 | If I want to go to a file called `test.py` in some project, I have to run `M-x projectile-find-file ` or `C-c p f `.
337 |
338 | If I want to install a package in Emacs, I have to run `M-x package-install `.
339 |
340 |
341 | So most functions are invoked with `M-x ` or using a keybinding for that function. Then required arguments are passed to the function to perform some action.
342 |
343 | Performing actions like this has some limitations.
344 |
345 | * I have to remember quite a few keybindings.
346 | * If I want to troubleshoot something in others Emacs, I don't know key bindings for that configuration.
347 | * Its not possible to interchange order of command name and arguments.
348 |
349 |
350 | Sometimes it will be much easier to specify argument to a command first and then specify command name. For example, if I have opened a file called `test.py`, it will be opened in a buffer called `test.py`. Lets say I am in some other buffer and I want to switch back to `test.py` buffer, I have to run `M-x switch-to-buffer test.py`. After typing `M-x switch-to-buffer tes`, I have realized that buffer was killed. Now I need to cancel this command and I have to use `M-x projectile-find-file test.py` to open `test.py` file. On the other hand I could have typed argument to a function first which is `test.py` and then if buffer is present I can run `switch-to-buffer` or if it is not present I could run `projectile-find-file`.
351 |
352 |
353 | Now, lets see how above actions can be performed with Singularity. Since I have bounded singularity to `fj` keys, I can invoke singularity by pressing `f` & `j` simultaneously.
354 |
355 | If I want to activate a mode, I have to run `fj `.
356 |
357 | If I want to switch from one buffer to another, I have to run `fj `.
358 |
359 | If I want to go to a file called `test.py` in some project, I have to run `fj `.
360 |
361 | If I want to install a package in Emacs, I have to run `fj ins `(no need to type `package-install` as I am using selection narrowing). Commands will be narrowed down to `package-install` after typing `ins`.
362 |
363 | Since singularity is capable of interacting with large set of options, it becomes much easier to interact with Emacs with very very few keys.
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 | # Lisp
373 |
374 | Emacs is written in a programming language called Emacs Lisp, a variant of Lisp. There have been attempts to port Emacs to other languages, but none of them have been successful because those programming languages weren't as powerful as Lisp, thereby losing all the power of Emacs. Before diving into Emacs, it is good to have a brief introduction to Lisp features to see how it differs from traditional languages like C, Python, or Perl.
375 |
376 |
377 | ## Expressions
378 |
379 | Lisp is an expression-oriented programming language, which means almost everything is an expression. "Hello world" in Lisp looks like this:
380 |
381 | ```commonlisp
382 | (message "Hello, World!")
383 | ```
384 |
385 | To add `x` and the higher value of either `y` or `z`, we can use a **single** expression to do it.
386 |
387 | ```commonlisp
388 | (if (> y z) (+ x y) (+ x z))
389 | ```
390 |
391 | That might look bit odd because Lisp uses prefix notation. What's more
392 | interesting is, in Lisp, it is possible to compose the same expression in
393 | many ways. The expression above can also be written as:
394 |
395 | ```commonlisp
396 | (+ x (if (> y z) y z))
397 | ```
398 |
399 | That's because `(if ...)` is an expression, and it can be used inside other expressions.
400 |
401 | By making everything an expression, Lisp expands the possibilites for combining the parts of the language in unusual ways.
402 |
403 |
404 | ## Evaluation
405 |
406 | The syntax is the set of rules which define the combinations of symbols that are considered to be a correctly structured document. Programming languages like C and Python and markup languages like HTML, XML, and TeX have their own syntax.
407 |
408 | Lisp has hardly any syntax at all. Everything is an expression. Every expression can be evaluated. If you don't want it evaluated, add a quote to it. That's it.
409 |
410 |
411 | ## Availability
412 |
413 | Traditional programming language have read-time, compile-time, and runtime. In Lisp, the whole language is always available. There is no real distinction between read-time, compile-time, and runtime. You can compile or run code while reading, read or run code while compiling, and read or compile code at runtime.
414 |
415 |
416 | ## Extensibility
417 |
418 | A macro is a piece of code that treats code as data and generates new code. Macros are used by the compiler to generate code that will be compiled just before its evaluation. Most programming languages are not capable of this manipulation, or advise against using this technique. For example, consider a simple macro in the C language:
419 |
420 | ```c
421 | #define square(x) x*x
422 | ```
423 |
424 | It is almost impossible to get it work across all the different contexts where it could be called. It is also difficult (or even impossible) to modify the language itself in order to add new syntax. You would need to modify the grammar and the abstract syntax tree, and then recompile to get new syntax.
425 |
426 | Lisp makes it easy to write reliable macros that can be used in different situations. People sometimes simplify their code by adding new features to Lisp through macros.
427 |
428 | These features set Lisp apart from traditional languages.
429 |
430 |
431 | ### References
432 |
433 | http://gigamonkeys.com/book/
434 |
435 | http://www.paulgraham.com/diff.html
436 |
437 | http://practicaltypography.com/why-racket-why-lisp.html
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 | # Epilogue
446 |
447 | I would like to conclude this with a zen story by Osho which relates to emacs.
448 |
449 |
450 | ## The Mysterious Wall
451 |
452 | There was an ancient mysterious wall(Emacs) which stood at the edge of a village, and whenever anyone climbed the wall to look onto the other side, instead of coming back he or she smiled and would jump to the other side, never to return.
453 |
454 | The inhabitants of the village became curious as to what could draw these people to the other side of the wall. After all, their village had all the necessities(IDE's and other software) of living a comfortable life.
455 |
456 | They made an arrangement to where they would tie a person's feet, so that when he or she looked over and wished to jump, they could be pulled back. The next time someone tried to climb the wall to see what was on the other side, they chained her feet so that she could not go over.
457 |
458 | She looked on the other side and was delighted at what she saw(lisp enlightment), and smiled. Those standing below grew curious to question her and pulled her back, but to their great disappointment she had lost the power of speech.
459 |
460 | "Those who have seen cannot say. That which has been seen cannot be painted, cannot be reduced to words. But still each one has to give a try - and the world goes on becoming more and more beautiful because of these efforts."
461 |
462 |
463 | Happy Emacsing & Lisping!!
464 |
--------------------------------------------------------------------------------