Commit 53c21188 authored by Pierre Neidhardt's avatar Pierre Neidhardt
Browse files

Fix markdown->org conversion artifacts

parent 2640306e
This diff is collapsed.
......@@ -5,9 +5,6 @@ An insight of Hollywood: /Writing movies for fun and profit/ (Thomas Lennon &
Robert Ben Garant, 2012)
* Some uncanny movies
:PROPERTIES:
:CUSTOM_ID: some-uncanny-movies
:END:
- 12 Angry Men
- 3 Idiots
......@@ -57,8 +54,7 @@ Robert Ben Garant, 2012)
- Hunt for the Wilderpeople
- Il buono, il brutto, il cattivo (The Good, the Bad and the Ugly)
- In Bruges
- Jisatsu sâkuru (Suicide Club) and one interesting
[[file:suicideclub.html][decryption]]
- Jisatsu sâkuru (Suicide Club) and one interesting [[file:cinema/suicideclub.html][decryption]]
- Joheunnom nabbeunnom isanghannom (The Good, the Bad, and the Weird)
- L.A. Confidential
- Little Miss Sunshine
......@@ -96,9 +92,6 @@ Robert Ben Garant, 2012)
- Youth
* French age certifications
:PROPERTIES:
:CUSTOM_ID: french-age-certifications
:END:
(U = no restriction)
......@@ -116,42 +109,33 @@ Robert Ben Garant, 2012)
- Watchmen: 12
* Computers in movies
:PROPERTIES:
:CUSTOM_ID: computers-in-movies
:END:
** Jurassic Park
:PROPERTIES:
:CUSTOM_ID: jurassic-park
:END:
When Lex tries to take control of one of the computers in the command centre, we
get to contemplate how she skillfully navigates the system using a (laggy) 3D
file browser. Surprisingly, this is not just an eccentricity of some movie
file browser. Surprisingly, this is not just an eccentricity of some movie
writer, the program, called =fsn=, actually existed by the time the movie was
written. See [[https://en.wikipedia.org/wiki/Fsn][Wikipedia/Fsn]].
written. See [[https://en.wikipedia.org/wiki/Fsn][Wikipedia/Fsn]].
An open source and "modern" clone called [[http://fsv.sourceforge.net/][fsv]]
has been developed, if you'd feel like playing Lex with your computer.
#+BEGIN_QUOTE
"It's a UNIX system! I know this!" -- Lex Murphy
"It's a UNIX system! I know this!" -- Lex Murphy
#+END_QUOTE
** The Social Network
:PROPERTIES:
:CUSTOM_ID: the-social-network
:END:
There is a famous urban legend around M. Zuckerberg who purportedly "hacked" its
campus network while being intoxicated. The myth of the genius struck us one
more time. While some dark arcane of hackerism spread through the collective
There is a famous urban legend around M. Zuckerberg who purportedly "hacked" the
campus network while being intoxicated. The myth of the genius struck us one
more time. While some dark arcane of hackerism spread through the collective
mind, the movie shows a much more realistic version of the petty offense:
- His computer runs KDE3, a Unix desktop environment popular around the events
depicted in the movie.
- He uses some "wget magic". =wget= is a popular command-line network
downloader. It is ideal to write scripts for batch downloads.
- He uses some "wget magic". =wget= is a popular command-line network
downloader. It is ideal to write scripts for batch downloads.
- He subsequently writes some scripts to automate the queries (e.g. when limited
to 20 pictures per page).
- He fires up Emacs, and modifies some Perl script.
......@@ -160,63 +144,60 @@ Despite the lack of details, all the steps happen to be mundane tasks related to
automated network queries.
** Tron: Legacy
:PROPERTIES:
:CUSTOM_ID: tron-legacy
:END:
The movie shows a (surprisingly) witty use of computers.
Around the beginning of the movie, during the meeting with all the executives,
we get a short glimpse at one terminal running an Eshell session, the Elisp
shell of Emacs. Most certainly the top of the world in Geekland...
shell of Emacs. Most certainly the top of the world in Geekland
One subliminal frame in the same scene shows a session of Tetris run from Emacs,
while the command =hanoi-unix= was just entered...
while the command =hanoi-unix= was just entered
When the main character first discovers the secret room with the terminal, his
first reflex is to type the following /meaningful/ commands:
#+BEGIN_EXAMPLE
$ whoami
flynn
#+END_EXAMPLE
#+BEGIN_SRC sh
$ whoami
flynn
#+END_SRC
If you'd be given a computer that has kept running for years, you'd like to know
who was using it last. This is what he is checking.
who was using it last. This is what he is checking.
#+BEGIN_EXAMPLE
$ uname -a
SolarOS 4.0.1 Generic_50203-02 sun4m i386
Unknown.Unknown
#+END_EXAMPLE
#+BEGIN_SRC
$ uname -a
SolarOS 4.0.1 Generic_50203-02 sun4m i386
Unknown.Unknown
#+END_SRC
=uname= is a universal command for showing the type of system the machine is
running. It appropriately shows the OS name (a cross-over between SunOS and
Solaris?), the version, the kernel (Generic...), the machine hardware name
running. It appropriately shows the OS name (a cross-over between SunOS and
Solaris?), the version, the kernel (Generic), the machine hardware name
(i386, a popular architecture by Intel), and possibly the "Unknown" hostname,
which unveils the latent mystery around the machine!
#+BEGIN_EXAMPLE
$ login -n root
Login incorrect
login: backdoor
No home directory specified in password file!
Logging in with home=/
#+END_EXAMPLE
#+BEGIN_SRC sh
$ login -n root
Login incorrect
login: backdoor
No home directory specified in password file!
Logging in with home=/
#+END_SRC
Now this gets a little more creative: login with the =backdoor= name is a very
naive method to hack your way toward full-privileged access to a computer!
#+BEGIN_EXAMPLE
# bin/history
...
#+END_EXAMPLE
#+BEGIN_SRC sh
# bin/history
...
#+END_SRC
=history= is usually a command embedded in the shell, but nevermind... It would
=history= is usually a command embedded in the shell, but never mind It would
have been much more sensible to run the =history= command when logged as
=flynn=, and not as =backdoor=.
It shows the list of the last commands that were typed. Again, it totally makes
It shows the list of the last commands that were typed. Again, it totally makes
sense to do so if you want to investigate how a computer was used the last time.
Among the various history entries, we can recognize the compilation of some
......@@ -225,9 +206,6 @@ execution of the Grid simulator (last command), which projects our hero to a
virtual world.
** Nmap vs. Hollywood
:PROPERTIES:
:CUSTOM_ID: nmap-vs.hollywood
:END:
See [[https://nmap.org/movies/][official website]] for an impressive list of
movies in which Nmap gets to be a rock star!
See the [[https://nmap.org/movies/][official website]] for an impressive list of movies in which Nmap gets to
be a rock star!
#+TITLE: Cinema: Suicide Club
By Manuel-Hoerth.
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../../dark.css" />
#+SUBTITLE: By Manuel-Hoerth
Posted: Thu Oct 13 2011 21:23:43.
......@@ -9,9 +9,6 @@ Post Edited: Fri Oct 14 2011 09:00:58.
Originally from http://www.imdb.com/title/tt0312843/board/nest/189698427.
* For those who after watching it couldn't figure it out
:PROPERTIES:
:CUSTOM_ID: for-those-who-after-watching-it-couldnt-figure-it-out
:END:
So you watched the movie and where like me and thought "What the heck"? I have
to admit i haven't figured out everything either, as i am too lazy to watch the
......
......@@ -8,35 +8,32 @@ Moreover most popular DE have been plagued for decades with unpractical,
non-automated and limited window management.
Positioning and resizing windows does not take much time /per se/, but it stacks
up. Think about how many windows you fire up every day (which, for some obscure
up. Think about how many windows you fire up every day (which, for some obscure
reasons, seem to be spawned at random places all the time on many popular
systems...). Add up all the seconds you spend managing them, moving around,
resizing... Wouldn't it be nice if this were done for us? After all, a computer
systems). Add up all the seconds you spend managing them, moving around,
resizing Wouldn't it be nice if this were done for us? After all, a computer
is an augmented /automata/, it should be able to automate this.
Another side-effect: the classic desktop environment (DE) will bundle more than
you want... As such, they will always require more disk space and virtual memory
than you actually need. The following advises will make things lighter and
you want As such, they will always require more disk space and virtual memory
than you actually need. The following advises will make things lighter and
faster.
* Dynamic Tiling Window Managers
:PROPERTIES:
:CUSTOM_ID: dynamic-tiling-window-managers
:END:
There are ways to automate window management: tiling window managers. Once we
There are ways to automate window management: tiling window managers. Once we
have gotten used to them, it gets hard to bear with the waste of time incurred
by the "regular, user-friendly" window managers. (Like those featured in Gnome
and KDE.) The latter are called stacking window managers. I find the concept of
by the "regular, user-friendly" window managers. (Like those featured in Gnome
and KDE.) The latter are called stacking window managers. I find the concept of
stacking fairly questionable: why would the user want to /cover/ part of other
windows? Either you want to have a full look at some of the currently opened
windows, or you just want to focus on one windows. Which means either tile the
windows or go fullscreen. In other words, unused screen space is wasted screen
space. I know how badly we like to look at our wallpaper, but that is not the
windows, or you just want to focus on one windows. Which means either tile the
windows or go fullscreen. In other words, unused screen space is wasted screen
space. I know how badly we like to look at our wallpaper, but that is not the
primary use we should make of our computer.
This leads us to the antagonists of the stacking window managers: the tiling
window managers. Windows do not "float" anymore, i.e. their position and size is
window managers. Windows do not "float" anymore, i.e. their position and size is
not controlled manually but automatically so that it fits the screen space best.
Understand that tiling managers do no deprive you from manual control over the
windows: they are, by definition, a superset of stacking WMs, and thus you can
......@@ -48,130 +45,114 @@ See how mobile devices work: the restricted screen space does not allow for
stacking windows, so all applications go fullscreen.
TWMs allow the user to relay full window management to the WM independently of
the application capabilities. For instance a good WM will let you go fullscreen
or use tabs with any program. This is part of the
[[http://en.wikipedia.org/wiki/Unix_philosophy][Unix philosophy]]: instead of
the application capabilities. For instance a good WM will let you go fullscreen
or use tabs with any program. This is part of the [[http://en.wikipedia.org/wiki/Unix_philosophy][Unix philosophy]]: instead of
duplicating functionalities across programs, write it once and for all where it
is meant to be. File browsers and Internet browsers should not have tabs: WMs
is meant to be. File browsers and Internet browsers should not have tabs: WMs
will do a better job (grouping, sorting) while keeping consistent behaviour and
key bindings across programs.
Last but not least, there is a subcategory among tiling WMs: the dynamic ones.
The tiling is done whenever a window is fired up.
In theory, the concept of a window manager is rather simple. In practice, they
mainly differ by their configuration. Some WM will offer little tweaking
In theory, the concept of a window manager is rather simple. In practice, they
mainly differ by their configuration. Some WM will offer little tweaking
possibilities to the user, while other will allow programmable modifications.
The former is easier to get started with, while the latter will allow for the
exact desired behaviour.
In my opinion, the most powerful WM would be a DTWM with a Turing-complete
configuration. Such popular DTWMs include /Awesome/ and /i3/. Awesome's
configuration. Such popular DTWMs include /Awesome/ and /i3/. Awesome's
configuration is in Lua, i.e. it allows virtually unlimited tweaking, while i3
relies on external shell scripts. Another possibly more powerful example is
relies on external shell scripts. Another possibly more powerful example is
[[../emacs-everywhere/index.html][EXWM]] which is extensible in Emacs Lisp.
* Keyboard control
:PROPERTIES:
:CUSTOM_ID: keyboard-control
:END:
The use of the mouse has become so widespread with the advent of desktop
computers that it now seems "intuitive" to associate the use of a mouse together
with desktop environments. All the desktop management (windows, firing up
with desktop environments. All the desktop management (windows, firing up
programs, monitoring the system, etc.) are /discrete actions/, they do not
require the continuous movement of a mouse pointer. As such, everything can be
bound to a keybinding. Go fullscreen? Keybinding. Change the window layout?
require the continuous movement of a mouse pointer. As such, everything can be
bound to a keybinding. Go fullscreen? Keybinding. Change the window layout?
Keybinding.
Keep in mind we say "keyboard shortcut": the word /shortcut/ is there for a
reason. See my article on [[../keymap/index.html][mastering the keyboard]].
reason. See my article on [[../keymap/index.html][mastering the keyboard]].
* Building from bricks
:PROPERTIES:
:CUSTOM_ID: building-from-bricks
:END:
Refraining from using a full-featured desktop environment means that you will
have to install the components one by one and configure it all to your liking.
Which is the only way to fully tailor a computer to your needs. While it may
Which is the only way to fully tailor a computer to your needs. While it may
seem daunting at first, this is a one-time task: it is straightforward to re-use
the configuration across systems when it is stored in text files.
** Text configuration
:PROPERTIES:
:CUSTOM_ID: text-configuration
:END:
Most desktop environments come with a configuration panel: a program that is
meant to centralize configuration. In practice, this is an additional layer of
meant to centralize configuration. In practice, this is an additional layer of
complexity that is not really needed.
Editing a text file has many advantages:
- It is just as fast. Even faster with a good text editor.
- It is just as fast. Even faster with a good text editor.
- A GUI may not be exhaustive: a text file guarantees full access to the
options.
- It is more reliable since it removes the extra layer of complexity. (The GUI
- It is more reliable since it removes the extra layer of complexity. (The GUI
might introduce bugs.)
- You keep control over configuration file updates.
- The configuration can be saved and even put under version control.
This last point is key: it allows you to watch over the evolution of your
configuration changes (diffs); it also lets you deploy and sync a configuration
across several computers in an instant. Last but not least, it lets you share
across several computers in an instant. Last but not least, it lets you share
the configuration!
** Independent power-apps
:PROPERTIES:
:CUSTOM_ID: independent-power-apps
:END:
Desktop environments push for developing "desktop-specific" applications, such
as the K* programs for KDE vs. the G* programs for Gnome. I find this very
as the K* programs for KDE vs. the G* programs for Gnome. I find this very
embarrassing: why would we spend months and years developing a program for a
sub-group of people? Why not spreading it to the world? Is it a form of
sub-group of people? Why not spreading it to the world? Is it a form of
geek-racism?
Our favorite programs should not have to do with the desktop environment. If the
Our favorite programs should not have to do with the desktop environment. If the
latter goes out of fashion and gets unmaintained, does it mean we are supposed
to change the whole set of our programs, possibly losing some functionalities in
the process?
A "desktop" in my sense is just the WM with a launcher. The rest should be the
A "desktop" in my sense is just the WM with a launcher. The rest should be the
user favorite programs: a terminal emulator, a desktop monitor, a text editor,
etc. Every feature from a desktop environment is a program. Missing this volume
icon? Add key bindings. Want to tweak the network configuration? Fire-up the
etc. Every feature from a desktop environment is a program. Missing this volume
icon? Add key bindings. Want to tweak the network configuration? Fire-up the
appropriate tool with a keybinding, or go edit the text file full of endless
possibilities...
possibilities
See my [[../power-apps/index.html][list of power-user applications]] for some
inspiration.
* Black & White
:PROPERTIES:
:CUSTOM_ID: black-white
:END:
When the mere mortals have a glimpse at my computer, I would expect their first
reaction to be "What system is it?" or "Why is it so barren?". No, it is
reaction to be "What system is it?" or "Why is it so barren?". No, it is
invariably "Maaaah, why is it all black?!?"
I find it interesting that black has become shocking. Black used to be the
standard back in the days. The white-dominant background may have been
I find it interesting that black has become shocking. Black used to be the
standard back in the days. The white-dominant background may have been
popularized by the "user-friendliness" marketing of Apple and Microsoft in the
1980s as a reaction against the "hard-to-use" Unix and friends: the color was
here to mark the difference. The association of ideas was easily made: white is
here to mark the difference. The association of ideas was easily made: white is
brightness, it is light, as opposed to the uncomfortable, insecure darkness of
Mr. Black.
Now if we are rational, it is just a color. But there is more to it. Working on
a dark background will not strain the eye as much. The whole industry is warning
Now if we are rational, it is just a color. But there is more to it. Working on
a dark background will not strain the eye as much. The whole industry is warning
its professional, intensive users against the possible eye strains and headaches
resulting from staring at a screen for too many hours.
Solutions are developed: take a break, use eye drops, and whatnot. While it
would be so much easier to eliminate the problem in the first place... Listen to
the wisdom of our forefathers, they were bright people! Working on a dark
Solutions are developed: take a break, use eye drops, and whatnot. While it
would be so much easier to eliminate the problem in the first place Listen to
the wisdom of our forefathers, they were bright people! Working on a dark
background will solve the problems all at once. To the point that once you get
used to it, switching to a bright background will stun you on the spot!
#+TITLE: Eshell as a main shell
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../dark.css" />
/This article was initially posted on
[[https://www.reddit.com/r/emacs/comments/6y3q4k/yes_eshell_is_my_main_shell/][Reddit]].
I've revised some arguments by taking the community feedback into account./
/This article was initially posted on [[https://www.reddit.com/r/emacs/comments/6y3q4k/yes_eshell_is_my_main_shell/][Reddit]]. I've revised some arguments by
taking the community feedback into account./
Since its inception, Eshell has suffered from an arguably low popularity. See
what the community says:
......@@ -15,42 +14,35 @@ Hell, even the official manual gives a fair warning against its use:
- https://www.gnu.org/software/emacs/manual/html\_mono/eshell.html#Introduction
I'm not arguing that those arguments are not valid. (To most extent, they are.)
I'm not arguing that those arguments are not valid. (To most extent, they are.)
I want to argue that the issue is not so much that Eshell is not a proper /Unix
shell/ (in the sense of POSIX =sh= and derivatives), but rather perhaps we do
not need a /Unix shell/ and all its historical limitations.
In other words: the non-Unix-ness of Eshell is more of a step forward than a
hindrance. Let's review the situation.
hindrance. Let's review the situation.
* "State of the art"
:PROPERTIES:
:CUSTOM_ID: state-of-the-art
:END:
Take this typical scenario: I've got a long running process which finally
outputs pages of relevant information. Only then I realize that it would have
been smart saving that somewhere. Now I want to copy it to the clipboard. How do
outputs pages of relevant information. Only then I realize that it would have
been smart saving that somewhere. Now I want to copy it to the clipboard. How do
I do that?
/By clumsily mouse-selecting pages of terminal output, assuming my terminal can
handle it./
#+BEGIN_QUOTE
Why can't I (fuzzy-)search the shell output?
#+END_QUOTE
Why can't I (fuzzy-)search the shell output?
#+BEGIN_QUOTE
Why can't I browse the different prompts of my shell session?
#+END_QUOTE
Why can't I browse the different prompts of my shell session?
#+BEGIN_QUOTE
Why can't I copy/paste without a mouse?
Why can't I copy/paste without a mouse?
#+END_QUOTE
Back in the days, VT-like terminals were our main mean of communicating with a
machine. Decades went by, our desktop computers can now handle gigabytes of
machine. Decades went by, our desktop computers can now handle gigabytes of
buffering and display in 24-bit colors, and yet we still stick to terminal
/emulators/, that is, programs that emulate the /restrictions/ of those ancient
machines.
......@@ -59,7 +51,7 @@ machines.
- Limited colors.
- Terminal capabilities are neither simple nor portable. See termcap(5).
- Terminal capabilities are neither simple nor portable. See termcap(5).
- Formatting (e.g. colors) needs ugly escape codes that are not even portable.
......@@ -67,13 +59,13 @@ machines.
Say I run this command:
#+BEGIN_EXAMPLE
$ cat file-list.txt
/path/to/foo
/other/path/to/bar
#+END_EXAMPLE
#+BEGIN_SRC sh
$ cat file-list.txt
/path/to/foo
/other/path/to/bar
#+END_SRC
Now I want to see what's in /foo/. How do I do that?
Now I want to see what's in /foo/. How do I do that?
1. Either I mouse-select the file, hoping I'll not be off-by-one on one side.
Then I paste to the prompt.
......@@ -82,34 +74,31 @@ Now I want to see what's in /foo/. How do I do that?
soon enough.
3. Or I resort to re-call the command from a subcommand and program some output
manipulation to extract the filename and then open it with my editor. This is
not nearly universal nor even convenient.
manipulation to extract the filename and then open it with my editor. This
is not nearly universal nor even convenient.
All this is terribly backwards and it is high time we moved on.
* Terminals vs. shells
:PROPERTIES:
:CUSTOM_ID: terminals-vs.shells
:END:
It's important to understand that shells are not (or should not be) semantically
bound to terminal emulator restrictions. Shells are a textual interface to the
machine. They just need /input, evaluation, execution, output/. GTK/Qt/Tk/etc.
are absolutely capable of handling such a task. Not mentioning Emacs...
bound to terminal emulator restrictions. Shells are a textual interface to the
machine. They just need /input, evaluation, execution, output/. GTK/Qt/Tk/etc.
are absolutely capable of handling such a task. Not mentioning Emacs
So why do shells /de facto/ need a terminal? One thing: curses-like interfaces.
Those libraries need terminal capabilities to render. Do we still really need
Those libraries need terminal capabilities to render. Do we still really need
that?
- It's most limited in terms of user experience. Mouse selection simply won't
- It's most limited in terms of user experience. Mouse selection simply won't
do.
- It's not beautiful.
- It cannot render anything beside text. (Without clumsy hacks at least.)
- It cannot render anything beside text. (Without clumsy hacks at least.)
- "It works on low-end systems": there is not much hardware out there that
cannot take Wayland or X. Anyways, my case is about desktop computers.
cannot take Wayland or X. Anyways, my case is about desktop computers.
- It's not even fast: in fact terminals can be pretty slow at rendering.
(Emulators also emulate the baud-rate, etc.)
......@@ -117,57 +106,52 @@ that?
- Since it's character-based, it cannot render fonts of different sizes nor,
say, thin lines.
- "Efficiency on remote systems": that's almost a fair statement. But then...
- "Efficiency on remote systems": that's almost a fair statement. But then
TRAMP! ;)
* Enter Eshell
:PROPERTIES:
:CUSTOM_ID: enter-eshell
:END:
Back to my initial example of the long-running process: want to copy that output
somewhere? 3 key-strokes with Eshell. And better: could be even 1 if you want to
program it your way. The /interface/ is extensible. (Terminals usually aren't,
URxvt and its Perl scripts are not a proud example of /extensibility/.)
somewhere? 3 key-strokes with Eshell. And better: could be even 1 if you want
to program it your way. The /interface/ is extensible. (Terminals usually
aren't, URxvt and its Perl scripts are not a proud example of /extensibility/.)
Eshell breaks up with the "terminal-interface" paradigm: the user interface of
the Eshell /commandline-interface/ is Emacs itself. The pager is the Emacs
buffer. The input is Emacs keystrokes. The extension language is Elisp.
the Eshell /commandline-interface/ is Emacs itself. The pager is the Emacs
buffer. The input is Emacs keystrokes. The extension language is Elisp.
Consequences:
- No need for pagers like less. You won't ever re-run a long-output command by
- No need for pagers like less. You won't ever re-run a long-output command by
appending =| less= to it.
- Little need for output ad-hoc minipulations (e.g. =grep= trial-and-error
queries--=grep= is not a search tool): output the result to an Emacs buffer,
use some Lisp functions, use Evil ex commands, iedit, swiper, helm-moccur or
multiple-cursors...
multiple-cursors
- Eshell supports TRAMP! Which means you don't have to put aside your powerful
- Eshell supports TRAMP! Which means you don't have to put aside your powerful
environment when switching to root or connecting to a remote host: all the
power of /your/ Emacs can be used anywhere, the shell included.
- Find file/URL at point. Or list them all with Ivy/Helm and fuzzy-search them!
- Find file/URL at point. Or list them all with Ivy/Helm and fuzzy-search them!
- No need for [[http://github.com/junegunn/fzf][fzf]]. "Hey! =fzf= is awesome!"
I know, but even =fzf= cannot compete with Emacs.
- No need for [[http://github.com/junegunn/fzf][fzf]]. "Hey! =fzf= is awesome!" I know, but even =fzf= cannot
compete with Emacs.
- At last, done with the clumsy Bash and sh-inspired shell languages! No more
nasty word-splitting, no more unexpected expansion. You don't even need =calc=
or =bc= when you have Elisp or Emacs' calc at hand.
nasty word-splitting, no more unexpected expansion. You don't even need
=calc= or =bc= when you have Elisp or Emacs' calc at hand.
- No need for half-implemented vi-bindings when you can have Evil to edit your
command-line. (Some shells like [[http://fishshell.com][fish]] can call an
editor to edit the commandline. Well, with Eshell it's one step less.)
command-line. (Some shells like [[http://fishshell.com][fish]] can call an editor to edit the
commandline. Well, with Eshell it's one step less.)
- You can even edit the output directly!
- You can redirect output to several buffers(!), they don't even need to be
existing files.
- Eshell has loads of
[[https://www.masteringemacs.org/article/complete-guide-mastering-eshell][fancy
features]] for globbing, filtering, and editing.
- Eshell has loads of [[https://www.masteringemacs.org/article/complete-guide-mastering-eshell][fancy features]] for globbing, filtering, and editing.
- Programmable completion with =pcomplete=, which is arguably easier and yet
more powerful than its Bash/Zsh/fish counterparts.
......@@ -175,28 +159,27 @@ Consequences:
Finally, some Helm niceties:
- =helm-find-files= has =M-e= to switch to Eshell in the currently browsed
folder. Bye-bye =cd=, hello fuzzy-browsing!
folder. Bye-bye =cd=, hello fuzzy-browsing!
- The previous technique makes it very convenient to go up the hierarchy to some
parent folder (=C-l= by default). Seriously, bye-bye annoying little =cd ..=.
parent folder (=C-l= by default). Seriously, farewell, annoying little =cd ..=.
- Still with =helm-find-files=, =M-p= will trigger the "cd history", so you can
fuzzy-find the history of your shell paths. Make it persistent with
fuzzy-find the history of your shell paths. Make it persistent with
=(add-to-list 'desktop-globals-to-save 'helm-ff-history))=.
- Use Helm as a menu for completion. Awesome for completing big file names or
- Use Helm as a menu for completion. Awesome for completing big file names or
packages!
- =helm-find-files= has =C-c i= (and =C-u C-c i=, etc.) to insert the selected
relative/absolute file names at point, that is, in the commandline. This
relative/absolute file names at point, that is, in the commandline. This
sometimes proves more convenient than file completion.
In terms of extensibility, it's key to understand that (as of
[[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27405][Emacs 26]]) all prompts
are properly /identified/ by Emacs. This opens the door to infinite