MSSL Basic User Note 10:


An Introduction to Emacs

Philip Smith 09/01/96 V0.1 (beta)

This document: http://www.mssl.ucl.ac.uk/www_computing/buns/emacs.html

Contents


TODO

defining a key example

Intro

Why is emacs so good?

If you have trouble with anything more complicated than capital letters then emacs is probably not for you. If you use the cursor keys to go to the bottom of a 30 page document then you probably won't be interested in smart editors and shortcuts. But if you use an editor a lot of the time and particularly if you are a programmer, emacs is normally considered the best editor around (it interacts closely with programming applications such as gcc, gdb, make, etc.).

Emacs has been described as an operating system disguised as an editor. Emacs is not just an editor it's more a way of life: you start it up when you get to work and just leave it going using it for everything from editing to compiling and debugging. There is even a newsgroup called alt.religion.emacs!

Emacs is a really powerful editor which does the things other editors do and then some. It is an acronym for `Editor MACroS' Apart from its functionality, it is also useful because it is so widely available not just on most Unix machines around the world but on many other operating systems too. In fact it is probably the most ported editor.


More infomation about emacs

Emacs Sites

FAQs are lists of Frequently Asked Questions which are available for numerous subject (not necessarily about computers) on the internet. The Emacs FAQ is at http://scwww.ucs.indiana.edu/FAQ/Emacs/ It is really useful and answers most questions about emacs from the very simple to the complicated. Emacs is programmed in the lisp computer language. The Emacs Lisp Archive is at http://www.cs.indiana.edu/LCD/cover.html

Documentation that comes with emacs

Some documentation comes with emacs. This includes

Usenet Newsgroups

The following Usenet newsgroups exist and can be read with nn, Netscape and many other news readers and browsers:

What Emacs does


Other editors

If you don't like or don't want to use emacs there are other Unix editors available:

Setting up

The emacs configuration file is ~/.emacs which contains lisp code. Read the emacs manual for information on how to set up emacs but for now use it without any customization or use pjs1's which knows about a few more languages:
	cp   ~pjs1/.emacs   ~
	mkdir   ~/elisp
	cp   ~pjs1/elisp/*   ~/elisp

Keys

There are a few important keys and typo conventions.

Control This is wither of the keys on the keyboard marked `Control' and is held down while pressing another key so `Control a' would be accomplished by holding down `Control' and pressing the `a' key.

Meta This key depends on the keyboard and choice. It is either the Excape key or the Alt key or some key that has been defined to have the desired effect. If the keyboard being used does not have an escape key, you can define a key to be such or use `Control [' or `Control 3'. On machines running Linux, the `Alt' key will work as well as `Escape' but on some machines only `Escape' will work.

Alt is held down while pressing another key so `Alt a' would mean holding down `Alt' and pressing the `a' key.
Escape is pressed once before pressing another key so `Esc a' would mean pressing the `Escape' key followed by the `a' key.

Terminology

C- means control
so C-a means "hold down `Control' and press lower case `a'"
and C-x C-c means `Control x' followed by `Control c'

M- means Meta
so M-a means `Meta a'

So:

SPC is the Spacebar
DEL is the Delete key
ESC is the Escape key
RET is the return key

Help

Help is started with Control h (C-h). Press `?' then for help on help or if you know what sort of help you want already press the appropriate key.

A tutorial is started with C-h t

Cancel

Control G (C-g) cancels most operations so if emacs is waiting for something you don't want at a prompt or doing something unwanted, try C-g.

Point and Mark

The point is the current location of the cursor.
The mark is the last mark (there can be many.

Minibuffer

The minibuffer is the mini buffer at the bottom of the window into which commands are typed.

Searching

The normal search is the incremental search using C-s. After typing control-s the following keys will form a growing sequence of characters to search for and the point will jump to the first occurence of the sequence so far after each key press. So if you type C-s h e l l o emacs will first move the point (text cursor) to the first occurence of `h', then the first occurence of `he', then `hel' and so on.

To replace, use M-x replace-string to replace without questioning. Use M-% or M-x query-replace to replace after asking yes/no.


A Short List of Good keys

See the Emacs Quick Reference card for a list of keys.
Here is another list of keys which might be useful. It assumes you know the really simple keys.

The cursor keys work as you would expect.
If you don't understand some of the following key descriptions don't worry - it is probably for some language you don't know and so you will probably not need that key.

Moving

M-f move forward one word
M-b move backward one word
M-x goto-line read n and go to line n
M-a beginning of sentence
M-e end of sentence
M-[ beginning of paragraph
M-] end of paragraph
C-M-f forward-sexp
C-M-b backward-sexp
C-M-u back up list
C-M-d down list
C-M-n forward over list
C-M-p backward over list

Macros

C-x ( start macro
C-x ) end macro
C-x e execute macro
C-x q query in keyboard macro
C-x name-last-keyboard-macro name-last-keyboard-macro
C-x insert-kbd-macro RET macronameRET insert keyboard macro

Deleting, Killing, Yanking

M-d kill word
M-DEL kill-previous word
C-w kill-region
C-x DEL kill to beginning of sentence
M-k kill to end of sentence
C-M-k kill sexp
C-y yank
M-y yank previous
M-w save region
C-M-w append next kill
M-^ join, deleting spaces, indentation
M-\ delete spaces/tabs around point
C-o open line
C-x C-o kill black lines

Marking

C-SPC set mark
C-@ set mark
M-h mark-paragraph
C-M-@ mark-sexp
C-M-h mark-defun
C-x h mark-whole-buffer
C-u C-SPC return to mark
C-u C-@ return to mark

Minibuffer

C-x ESC re-execute
M-p previous
M-n next
M-x list-command-historylist-command-history
M-r search previous minibuffer

Search

C-s forward
C-r backward
C-s ESC string RET non-incremental search
C-r ESC string RET non-incremental search backward
C-s ESC C-w words RET ignore spaces, punctuation
C-r ESC C-w words RET ignore spaces, punctuation backward
M-% or M-x query-replace query-replace
M-x replace-string replace-string

Case

M-- M-l downcase previous word
M-- M-u upcase previous word
M-- M-c capitalize previous word
C-x C-l downcase-region
ESC-l downcase-word
C-x C-u upcase-region
ESC-u upcase-word

Files

C-x C-f find-file
C-x 4 C-f find-file-other-window
C-x C-s save-buffer
C-x s save-some-buffers
C-x 4 b select buffer in other window
C-x 2 split window vertically
C-x 3 split window horizontally
C-x ^ enlarge window vertically
C-x } enlarge window horizontally

Indent

TAB indent
C-M-o split at point
C-M-\ indent-region
C-u TAB shift list rigidly
C-M-q indent-sexp

More keys

Misc

C-x C-n semipermanent goal
C-u C-x C-ncancel
C-o insert line
C-x C-o delete blank lines
M-= count lines in region
C-x u undo
M-h mark paragraph
C-M-h mark defun
C-x h mark buffer
C-x C-p mark page
C-u C-SPC
M-^ join line
M-y replace ynaked text with previous
C-x a buffer append region to buffer
M-x x insert-buffer insert buffer
C-x x reg copy region to register
C-x g reg insert register
C-x r reg copy rectangle to register
C-x C-v find alternate file
M-~ forget file has been modified
C-M-a beginning of function
C-M-e end of function
M-( open ()
M-) close ()
C-x n narrow to region
C-x w widen
M-! shell
C-x load-file load lisp program

Query-replace

M-% query-replace
C-r recursive editing level
C-M-c exit recursive editing level
n go back
! all
ESC get out
SPC replace
DEL don't replace
M-x occur list occurences

Visibility

C-x $ arg = number of cols, no arg = cancel

Dired

f visit file
o visit file other window
q quit

Buffer list

1 edit
2 edit 2 win

Other things

These capabilities should be remembered. The information here is only to act as a reminder. Full descriptions can be found in the manual.

Modes

There are many modes available for languages and the like. You can use M-x c-mode to go into C-mode which makes emacs work in a useful way for C programmers. Modes are normally picked up automatically from the filename. Other properties can be attached, for example, wrapping can be linked to the text-mode so when editing any normal text (not programs!), emacs will wrap the text. Some keys will work differently depending on the mode. For example, the tab key will produce a tab in fundamental-mode but indent correctly in C-mode.

Fontification

Emacs can fontify your document/program which makes different language elements appear in different fonts or colours.

gdb

Emacs works well with the Gnu Debugger (gdb). Just edit your source code and type M-x gdb and run gdb with the executable (compiled appropriately) and a cursor will follow the debugger in your source code window.

info

Emacs can be used to view info documents. Just type M-x info.

Macros

Use C-x ( to start a macro and C-x ) to finish defining a macro then C-x e to execute the macro. To execute it 10 times use C-u 10 C-x e.

Rectangles

Rectangles of text may be cut and pasted. The main rectangle commands are:

ispell

Use M-x ispell-word to check the spelling of the word near the cursor and M-x ispell-buffer to check the whole document.

Abbrevs

Use M-/ to try to complete a word or variable/function name (so if you want long_variable_name, just try
	long_ M-/
and if that variable name has appeared already it will complete it.

Visibility

Emacs can be told to hide deeply indented parts of text (usually a program). Use C-x $.

Shell

Emacs can execute shell command in a window making the output `editable'. Use M-!.

Other utilities

Mouse buttons and Regions

Use the left mouse button to select.
Use the middle mouse button to insert.

Emacs doesn't highlight a marked region because, to put it simply, it is above that sort of thing. Emacs nearly always has a region defined between the last mark and the point (cursor position) but it isn't that simple: there are numerous marks and it would not be appropriate to highlight the region from any one of them to the point.


More configuration

Swapping DEL Backspace

From the FAQ:
  * Under X or on a dumb terminal, it is possible to swap the Backspace and
    Delete keys inside Emacs:

      (keyboard-translate ?\C-h ?\C-?)

    see question 123 for further details of "keyboard-translate".

  * Another approach is to switch key bindings and put help on "C-x h"
    instead:

      (global-set-key [?\C-h] 'delete-backward-char)
      (global-set-key [?\C-x ?h] 'help-command)
                               ;; overrides mark-whole-buffer
(put these in your .emacs file).

Extract from netnews post:

[If you use:, pjs1]

	keycode 22 = BackSpace

in your ~/.Xmodmap file.

This is not good if you want to use emacs. If you want to delete the char
before the cursor, you hit the KEY 22, and it generates BackSpace->^H, then
you get a help screen in emacs.

The fix for emacs is to put the following in your .emacs file:

        ;; Make the bloody backspace key work properly
        (define-key global-map "\C-h" 'backward-delete-char)

        ;; Make sure backspace works in searches, too
        (setq dearch-delete-char (string-to-char "\C-h"))
              ^ 
[think this should be s, pjs1]

Emacs window size and font

If you want to change the font size (which will change the window size accordingly, use
	emacs -fn 10x20
or some other font like the following three:
	7x14
	-*-times-medium-i-*-*-*-120-*-*-*-*-*-*
	-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*

To change the window size but keeping the same font use

	emacs -geometry 80x30
for example where 80 is the number of columns and 30 is the number of rows. You can of course use -fn and -geometry together
	emacs -fn 7x14 -geometry 80x20
and alias this by putting in your .cshrc or .tcshrc file
	alias emacs 'emacs -fn 7x14 -geometry 80x20'

Stopping adding lines at end

Put the following line in your .emacs file:
	(setq next-line-add-newlines nil)

Defining keys

To make C-x SPACE set the mark use
	(define-key ctl-x-map " " 'set-mark-command)
To make M-g goto a line use
	(define-key global-map "\M-g" 'goto-line)
Redefining other keys can be done by following this last example with the appropriate key-code and function name (\M-g and goto-line respectively in this case).

Finally

Try M-x hanoi and watch emacs solve the Tower of Hanoi puzzle. Not exactly useful except as an example of the possible complexity of emacs programs: Hanoi is a lisp program just like any of the other emacs commands, e.g., sort. Just in case you're wondering what garbage colection is see http://www.cs.cmu.edu/Web/Groups/AI/html/faqs/lang/lisp/part2/faq-doc-10.html

You may think emacs has everything but the kitchen sink but you'd be wrong. It has a kitchen sink too: just use

	emacs -i
and when you iconize emacs you will get the kitchen sink icon!


P.J.Smith --- pjs1@mssl.ucl.ac.uk

WebTechs Mozilla Checked!