Emacs key Commands - Conveyor-Belt Sushi

25 March 2007

Guide to Emacs Key-bindings

The normal Emacs convention is that Control is represented by the large C. The small c is the 'c key', i.e. the third letter of the alphabet. So C-y means to press Control and the 'y key' at the same time.

M means Meta, which is a key on 1970s Unix keyboards, called Alt on the mass- produced IBM PC-compatible keyboards that we have today. As an alternative to 'Alt', you can use escape and then take a little breath before pressing the next key; this is handy to know in a couple of situations:

  • Some graphical terminals use Alt for their own shortcuts, i.e. shortcuts controlling the box rather than passing the key commands to the application inside. You can use ESC in this situation or (better) edit the preferences of the terminal.
  • When connected to a remote terminal, especially if it is running a more traditional Unix, sometimes Alt commands cannot reach the remote server.

Emacs Terminology

Emacs has its roots in another age, its terminology is based on the reality of bits and bytes, disks and processors, and so on. Rather than most modern programmes that, post Apple Lisa, are based on metaphorical concepts of a paper based office. You are either a person that finds it really romantic, or you find it really annoying. It also means that the key commands do not follow the later X-Windows/MS Office style. You can set the key commands to this style, but very few people do. Most people learn the Emacs way. You can then often use these same bindings with lots of other programs, especially command-line applications.

'Cut' and 'Paste' have not been invented yet, we have kill and yank instead. There is no clipboard, there are superior concepts called the 'mark' and the 'kill ring'.

The Mark

One way to understand it is that instead of one point that you have in the graphical world, imagine that you have two points. You have one that you drop somewhere - the mark, and a cursor that you move around as normal. Another way to think of it is what happens when you select text in a graphical program. You hold shift (or click the mouse) and then move the cursor away, highlighting the text in the process; the initial point that that you click on is the 'mark'. So you place the mark with C-Space. Now as you move the cursor away, imagine that the text is being highlighted.

When you cut text (with C-w), everything between where your cursor is now and the mark goes into the kill-ring, this is a type of list. It is like a stack, but when you get to the bottom, it goes back to the start. Therefore unlike the X-Windows clipboard, which has one item, the kill ring can have lots of different items, all that can be retrieved, or 'yanked', from the ring. To yank the first item off the kill ring, you use C-y. To non-destructively copy an item into the kill ring, you use M-w (analogous to 'Copy' in X-Windows).

Conveyor-belt sushi

http://commandline.org.uk/images/posts/other/KuruKuruSushiRestaurant.jpg

So at posh Japanese restaurants, you sit down for lunch and there is a conveyor-belt, it goes round and all different types of fish pass by. Now this is a really posh sushi bar frequented by ecological types, and there is a small handle in front of you that moves the belt around. Somewhere is a chef is killing fish, while someone else wraps them up nicely and puts them on the conveyor belt. You turn the handle until you can grab whatever you want off it. Then you pretend you can use chop sticks so you do not embarrass yourself in front of the posh people who brought you here.

So you kill text (using C-w or M-w) and add it to the Conveyor-belt (the kill ring), C-y puts your hand out ready to grab the next thing, while M-y rotates the Conveyor belt.

Now the analogy starts to fall apart a little, I know, but imagine that the dishes are stacked up on the conveyor-belt, so when the Makizushi rolls come around, you can take one dish, or two or three. Yanking something from the kill ring does not stop you getting the same piece of text again.

Once you have got that sorted, you can do more complex tricks, C-u 8 M-y would rotate the conveyor belt 8 dishes. Taking it one-step further, C-u 5 C-y would automatically yank the fifth item from the kill ring, equivalent to leaning over your friends and grabbing a dish.

There are more complex ways to manipulate the kill ring (i.e. the person wrapping the fish) but lets move on to more pressing matters first.

1 Zeth says...

Hello World

Posted at 2:45 p.m. on September 13, 2007


2 Zeth says...

Hello World.

Posted at 3:10 p.m. on September 14, 2007


3 Zeth says...

Hello World again!

Posted at 3:13 p.m. on September 14, 2007


4 Zeth says...

Arrrrrrhhmmm

Posted at 3:20 p.m. on September 14, 2007


What do you have to say?

Show Editing Help

Europython

About

Hello, my name is Zeth, I'll be your host here.

Command Line Warriors is about taking control of your own technology, it looks at our experiences of computing; especially using GNU/Linux, the Python programming language, the command-line and issues such as techno-ethics, best practices and whatever is cool now. If you take control of your technology then you are a Warrior too!

This site is your site too which means that you can contribute and get involved. You can leave comments using the facility provided. For me, the comments and discussions are by far the best part of the site. So please do have your say!

Latest Discussions

QuickSilver

January 5, 2009
Nice! Is there anyway to implement a ServerAliveInterval for long processes? This is because my our firewall keeps closing the connection based on inactive connections. Thanks,
SFTP in Python: Really Simple SSH

Tun

January 5, 2009
Hi, Do You know, haw can i get start date for tasks evolution? If exists the similar way to your example: i.get_due() ? I would like to have sth like ...
Three Useful Python Bindings - ClamAV, Apt and Evolution

Samuel Huckins

January 4, 2009
Great tips! I have had occasion to do a lot of MySQL instance migrations lately, so here is an improvement for Trick 1: mysqldump <DATABASE_NAME> [mysqldump_options] | gzip -c | ...
Five useful command one liners

George Glass

December 31, 2008
I don't really see the point in trying to make linux user-friendly or take over the desktop. We rule the servers the most important element of the entire game. Let ...
Give Linux a chance

bug

December 31, 2008
@Zeth: The hidden field does block some. Not perfect, but it does release some weight from the filtering system, as those are 100% false comments. Acctually, if you would have ...
On Comment Spam

Zeth

December 31, 2008
Hi Eion, Yes that is an interesting approach also. It is the only approach given by default in the stock Django comments module, though it does not stop all comment ...
On Comment Spam

Bug

December 30, 2008
Well... Sadly, and I guess you hate me for it, I use captcha. But at least it's not an image, so even if you visit using w3m [yey!] you can ...
On Comment Spam

Eion

December 30, 2008
Other than server-side processing of comments, I like to add additional <input>'s and hide them in external css. Most of the time the fields are populated by spam-bots, and if ...
On Comment Spam

Nostoc

December 27, 2008
... Mate possible because of the dull Kg8
Ruy Lopez, Berlin defence, open variation

Nostoc

December 27, 2008
My bad, I meant the picture beneath 15, after close inspection my suggestion would be on 18. Instead of 18 : Qe2, I would have taken that knight with my ...
Ruy Lopez, Berlin defence, open variation

Zeth

December 27, 2008
Nostoc, white takes the rook on 15, the rook is a better kill than a knight.
Ruy Lopez, Berlin defence, open variation

Nostoc

December 26, 2008
I'm not that good at chess, but I have a question. At 15, why doesn't white simply take black's knight in C6 with the bishop? It's an easy kill, since ...
Ruy Lopez, Berlin defence, open variation

Zeth

December 26, 2008
CorkyAgain, good question, I don't have a FreeBSD box available at the moment so I can't comment. On Linux at least watch does as I have described.
Five useful command one liners

CorkyAgain

December 25, 2008
Is the watch command you're describing a Linuxism? On my FreeBSD box, "man watch" seems to be describing something completely different.
Five useful command one liners

Binny V A

December 25, 2008
I have actually setup a site to store just short commands... http://txt.binnyva.com/
Five useful command one liners

Bassam essa

December 25, 2008
i try this line command elinks -source "http://www.e51g.com/" > resulthtml.txt its work done :) thx
Command the Web - an ELinks tutorial

Bassam essa

December 25, 2008
thanx man i need to know how i can download html source page from elinks ? i try $ elinks - view HTML "http://www.google.com/" > resulthtml.txt but its dont work ...
Command the Web - an ELinks tutorial

sam

December 25, 2008
Thanks for commenting the game. I'm new to chess and it's great to see your reasoning behind some of the moves. However, how do you know what to call the ...
Ruy Lopez, Berlin defence, open variation

halfpi

December 24, 2008
I have to mention that on my HP nx 6325 Ubuntu install has been done in ~ 1h, but XP SP3 was not ready after 3h of working. Also Fedora ...
Give Linux a chance

tulcod

December 24, 2008
as for the grep problem, it's probably easier to do: grep needle -R .
Five useful command one liners