NAME¶
mg —
emacs-like text editor
SYNOPSIS¶
mg |
[-n]
[-f mode]
[+number]
[file ...] |
DESCRIPTION¶
mg is intended to be a small, fast, and portable editor for
people who can't (or don't want to) run emacs for one reason or another, or
are not familiar with the
vi(1) editor. It is compatible
with emacs because there shouldn't be any reason to learn more editor types
than emacs or
vi(1).
The options are as follows:
- +number
- Go to the line specified by number (do not insert a space
between the ‘+’ sign and the number). If a negative number is
specified, the line number counts backwards from the end of the file i.e.
+-1 will be the last line of the file, +-2 will be second last, and so
on.
- -f
mode
- Run the mode command for all buffers created from arguments
on the command line, including the scratch buffer and all files.
- -n
- Turn off backup file generation.
WINDOWS AND BUFFERS¶
When a file is loaded into
mg, it is stored in a
buffer. This buffer may be displayed on the screen in more
than one window. At present, windows may only be split horizontally, so each
window is delineated by a modeline at the bottom. If changes are made to a
buffer, it will be reflected in all open windows.
If a buffer name begins and ends with an asterisk, the buffer is considered
throwaway; i.e. the user will not be prompted to save changes when the buffer
is killed.
POINT AND MARK¶
The current cursor location in
mg is called the
point (or
dot). It is possible to define a
window-specific region of text by setting a second location, called the
mark. The
region is the text between point
and mark inclusive. Deleting the character at the mark position leaves the
mark at the point of deletion.
Note: The point and mark are window-specific in
mg, not
buffer-specific, as in other emacs flavours.
DEFAULT KEY BINDINGS¶
Normal editing commands are very similar to GNU Emacs. In the following
examples, C-x means Control-x, and M-x means Meta-x, where the Meta key may be
either a special key on the keyboard or the ALT key; otherwise ESC followed by
the key X works as well.
- C-SPC
- set-mark-command
- C-a
- beginning-of-line
- C-b
- backward-char
- C-d
- delete-char
- C-e
- end-of-line
- C-f
- forward-char
- C-g
- keyboard-quit
- C-h C-h
- help-help
- C-h a
- apropos
- C-h b
- describe-bindings
- C-h c
- describe-key-briefly
- C-j
- newline-and-indent
- C-k
- kill-line
- C-l
- recenter
- RET
- newline
- C-n
- next-line
- C-o
- open-line
- C-p
- previous-line
- C-q
- quoted-insert
- C-r
- isearch-backward
- C-s
- isearch-forward
- C-t
- transpose-chars
- C-u
- universal-argument
- C-v
- scroll-up
- C-w
- kill-region
- C-x C-b
- list-buffers
- C-x C-c
- save-buffers-kill-emacs
- C-x C-f
- find-file
- C-x C-g
- keyboard-quit
- C-x C-l
- downcase-region
- C-x C-o
- delete-blank-lines
- C-x C-q
- toggle-read-only
- C-x C-r
- find-file-read-only
- C-x C-s
- save-buffer
- C-x C-u
- upcase-region
- C-x C-v
- find-alternate-file
- C-x C-w
- write-file
- C-x C-x
- exchange-point-and-mark
- C-x (
- start-kbd-macro
- C-x )
- end-kbd-macro
- C-x 0
- delete-window
- C-x 1
- delete-other-windows
- C-x 2
- split-window-vertically
- C-x 4 C-f
- find-file-other-window
- C-x 4 C-g
- keyboard-quit
- C-x 4 b
- switch-to-buffer-other-window
- C-x 4 f
- find-file-other-window
- C-x =
- what-cursor-position
- C-x ^
- enlarge-window
- C-x `
- next-error
- C-x b
- switch-to-buffer
- C-x d
- dired
- C-x e
- call-last-kbd-macro
- C-x f
- set-fill-column
- C-x g
- goto-line
- C-x i
- insert-file
- C-x k
- kill-buffer
- C-x n
- other-window
- C-x o
- other-window
- C-x p
- previous-window
- C-x s
- save-some-buffers
- C-x u
- undo
- C-y
- yank
- C-z
- suspend-emacs
- M-C-v
- scroll-other-window
- M-SPC
- just-one-space
- M-%
- query-replace
- M-<
- beginning-of-buffer
- M->
- end-of-buffer
- M-\
- delete-horizontal-space
- M-^
- join-line
- M-b
- backward-word
- M-c
- capitalize-word
- M-d
- kill-word
- M-f
- forward-word
- M-l
- downcase-word
- M-m
- back-to-indentation
- M-q
- fill-paragraph
- M-r
- search-backward
- M-s
- search-forward
- M-u
- upcase-word
- M-v
- scroll-down
- M-w
- copy-region-as-kill
- M-x
- execute-extended-command
- M-{
- backward-paragraph
- M-}
- forward-paragraph
- M-~
- not-modified
- M-DEL
- backward-kill-word
- C-_
- undo
- )
- blink-and-insert
- DEL
- delete-backward-char
For a complete description of
mg commands, see
MG COMMANDS. To see the active
keybindings at any time, type “M-x describe-bindings”.
MG COMMANDS¶
Commands are invoked by “M-x”, or by binding to a key. Many commands
take an optional numerical parameter,
n. This parameter
is set either by M-<n> (where
n is the numerical
argument) before the command, or by one or more invocations of the universal
argument, usually bound to C-U. When invoked in this manner, the value of the
numeric parameter to be passed is displayed in the minibuffer before the M-x.
One common use of the parameter is in mode toggles (e.g. make-backup-files).
If no parameter is supplied, the mode is toggled to its alternate state. If a
positive parameter is supplied, the mode is forced to on. Otherwise, it is
forced to off.
- apropos
- Help Apropos. Prompt the user for a string, open the *help*
buffer, and list all mg commands that contain that
string.
- auto-execute
- Register an auto-execute hook; that is, specify a filename
pattern (conforming to the shell's filename globbing rules) and an
associated function to execute when a file matching the specified pattern
is read into a buffer.
- auto-fill-mode
- Toggle auto-fill mode (sometimes called mail-mode), where
text inserted past the fill column is automatically wrapped to a new
line.
- auto-indent-mode
- Toggle indent mode, where indentation is preserved after a
newline.
- back-to-indentation
- Move the dot to the first non-whitespace character on the
current line.
- backward-char
- Move cursor backwards one character.
- backward-kill-word
- Kill text backwards by n words.
- backward-paragraph
- Move cursor backwards n paragraphs.
Paragraphs are delimited by <NL><NL> or <NL><TAB>
or <NL><SPACE>.
- backward-word
- Move cursor backwards by the specified number of
words.
- beginning-of-buffer
- Move cursor to the top of the buffer.
- beginning-of-line
- Move cursor to the beginning of the line.
- blink-and-insert
- Self-insert a character, then search backwards and blink
its matching delimeter. For delimeters other than parenthesis, brackets,
and braces, the character itself is used as its own match.
- bsmap-mode
- Toggle bsmap mode, where DEL and c-H are swapped.
- c-mode
- Toggle a KNF-compliant mode for editing C program
files.
- call-last-kbd-macro
- Invoke the keyboard macro.
- capitalize-word
- Capitalize n words; i.e. convert the
first character of the word to upper case, and subsequent letters to lower
case.
- cd
- Change the global working directory. See also
global-wd-mode.
- copy-region-as-kill
- Copy all of the characters in the region to the kill
buffer, clearing the mark afterwards. This is a bit like a kill-region
followed by a yank.
- count-matches
- Count the number of lines matching the supplied regular
expression.
- count-non-matches
- Count the number of lines not matching the supplied regular
expression.
- define-key
- Prompts the user for a named keymap (mode), a key, and an
mg command, then creates a keybinding in the appropriate
map.
- delete-backward-char
- Delete backwards n characters. Like
delete-char, this actually does a kill if presented with an argument.
- delete-blank-lines
- Delete blank lines around dot. If dot is sitting on a blank
line, this command deletes all the blank lines above and below the current
line. Otherwise, it deletes all of the blank lines after the current
line.
- delete-char
- Delete n characters forward. If any
argument is present, it kills rather than deletes, saving the result in
the kill buffer.
- delete-horizontal-space
- Delete any whitespace around the dot.
- delete-leading-space
- Delete leading whitespace on the current line.
- delete-trailing-space
- Delete trailing whitespace on the current line.
- delete-matching-lines
- Delete all lines after dot that contain a string matching
the supplied regular expression.
- delete-non-matching-lines
- Delete all lines after dot that contain a string matching
the supplied regular expression.
- delete-other-windows
- Make the current window the only window visible on the
screen.
- delete-window
- Delete current window.
- describe-bindings
- List all global and local keybindings, putting the result
in the *help* buffer.
- describe-key-briefly
- Read a key from the keyboard, and look it up in the keymap.
Display the name of the function currently bound to the key.
- digit-argument
- Process a numerical argument for keyboard-invoked
functions.
- downcase-region
- Set all characters in the region to lower case.
- downcase-word
- Set characters to lower case, starting at the dot, and
ending n words away.
- emacs-version
- Return an mg version string.
- end-kbd-macro
- Stop defining a keyboard macro.
- end-of-buffer
- Move cursor to the end of the buffer.
- end-of-line
- Move cursor to the end of the line.
- enlarge-window
- Enlarge the current window by shrinking either the window
above or below it.
- eval-current-buffer
- Evaluate the current buffer as a series of
mg commands. Useful for testing mg
startup files.
- eval-expression
- Get one line from the user, and run it. Useful for testing
expressions in mg startup files.
- exchange-point-and-mark
- Swap the values of "dot" and "mark" in
the current window. Return an error if no mark is set.
- execute-extended-command
- Invoke an extended command; i.e. M-x. Call the message line
routine to read in the command name and apply autocompletion to it. When
it comes back, look the name up in the symbol table and run the command if
it is found, passing arguments as necessary. Print an error if there is
anything wrong.
- fill-paragraph
- Justify a paragraph, wrapping text at the current fill
column.
- find-file
- Select a file for editing. First check if the file can be
found in another buffer; if it is there, just switch to that buffer. If
the file cannot be found, create a new buffer, read in the file from disk,
and switch to the new buffer.
- find-file-read-only
- Same as find-file, except the new buffer is set to
read-only.
- find-alternate-file
- Replace the current file with an alternate one. Semantics
for finding the replacement file are the same as find-file, except the
current buffer is killed before the switch. If the kill fails, or is
aborted, revert to the original file.
- find-file-other-window
- Opens the specified file in a second buffer. Splits the
current window if necessary.
- forward-char
- Move cursor forwards (or backwards, if
n is negative) n characters.
Returns an error if the end of buffer is reached.
- forward-paragraph
- Move forward n paragraphs. Paragraphs
are delimited by <NL><NL> or <NL><TAB> or
<NL><SPACE>.
- forward-word
- Move the cursor forward by the specified number of
words.
- global-set-key
- Bind a key in the global (fundamental) key map.
- global-unset-key
- Unbind a key from the global (fundamental) key map; i.e.
set it to 'rescan'.
- global-wd-mode
- Toggle global working-directory mode. When enabled,
mg defaults to opening files (and executing commands
like compile and grep) relative to the global working directory. When
disabled, a working directory is set for each buffer.
- goto-line
- Go to a specific line. If an argument is present, then it
is the line number, else prompt for a line number to use.
- help-help
- Prompts for one of (a)propos, (b)indings, des(c)ribe key
briefly.
- insert
- Insert a string, mainly for use from macros.
- insert-buffer
- Insert the contents of another buffer at dot.
- insert-file
- Insert a file into the current buffer at dot.
- insert-with-wrap
- Insert the bound character with word wrap. Check to see if
we're past the fill column, and if so, justify this line.
- isearch-backward
- Use incremental searching, initially in the reverse
direction. isearch ignores any explicit arguments. If invoked during macro
definition or evaluation, the non-incremental search-backward is invoked
instead.
- isearch-forward
- Use incremental searching, initially in the forward
direction. isearch ignores any explicit arguments. If invoked during macro
definition or evaluation, the non-incremental search-forward is invoked
instead.
- join-line
- Join the current line to the previous. If called with an
argument, join the next line to the current one.
- just-one-space
- Delete any whitespace around dot, then insert a space.
- keyboard-quit
- Abort the current action.
- kill-buffer
- Dispose of a buffer, by name. If the buffer name does not
start and end with an asterisk, prompt the user if the buffer has been
changed.
- kill-line
- Kill line. If called without an argument, it kills from dot
to the end of the line, unless it is at the end of the line, when it kills
the newline. If called with an argument of 0, it kills from the start of
the line to dot. If called with a positive argument, it kills from dot
forward over that number of newlines. If called with a negative argument
it kills any text before dot on the current line, then it kills back
abs(n) lines.
- kill-paragraph
- Delete n paragraphs starting with the
current one.
- kill-region
- Kill the currently defined region.
- kill-word
- Delete forward n words.
- line-number-mode
- Toggle whether line and column numbers are displayed in the
modeline.
- list-buffers
- Display the list of available buffers.
- load
- Prompt the user for a filename, and then execute commands
from that file.
- local-set-key
- Bind a key mapping in the local (topmost) mode.
- local-unset-key
- Unbind a key mapping in the local (topmost) mode.
- make-backup-files
- Toggle generation of backup files.
- meta-key-mode
- When disabled, the meta key can be used to insert
extended-ascii (8-bit) characters. When enabled, the meta key acts as
usual.
- negative-argument
- Process a negative argument for keyboard-invoked
functions.
- newline
- Insert a newline into the current buffer.
- newline-and-indent
- Insert a newline, then enough tabs and spaces to duplicate
the indentation of the previous line. Assumes tabs are every eight
characters.
- next-line
- Move forward n lines.
- no-tab-mode
- Toggle notab mode. In this mode, spaces are inserted rather
than tabs.
- not-modified
- Turn off the modified flag in the current buffer.
- open-line
- Open up some blank space. Essentially, insert
n newlines, then back up over them.
- other-window
- The command to make the next (down the screen) window the
current window. There are no real errors, although the command does
nothing if there is only 1 window on the screen.
- overwrite-mode
- Toggle overwrite mode, where typing in a buffer overwrites
existing characters rather than inserting them.
- prefix-region
- Inserts a prefix string before each line of a region. The
prefix string is settable by using 'set-prefix-string'.
- previous-line
- Move backwards n lines.
- previous-window
- This command makes the previous (up the screen) window the
current window. There are no errors, although the command does not do a
lot if there is only 1 window.
- push-shell
- Suspend mg and switch to alternate
screen, if available.
- pwd
- Display current (global) working directory in the status
area.
- query-replace
- Query Replace. Search and replace strings selectively,
prompting after each match.
- replace-string
- Replace string globally without individual prompting.
- query-replace-regexp
- Replace strings selectively. Does a search and replace
operation using regular expressions for both patterns.
- quoted-insert
- Insert the next character verbatim into the current buffer;
i.e. ignore any function bound to that key.
- re-search-again
- Perform a regular expression search again, using the same
search string and direction as the last search command.
- re-search-backward
- Search backwards using a regular expression. Get a search
string from the user, and search, starting at dot and proceeding toward
the front of the buffer. If found, dot is left pointing at the first
character of the pattern [the last character that was matched].
- re-search-forward
- Search forward using a regular expression. Get a search
string from the user and search for it starting at dot. If found, move dot
to just after the matched characters. display does all the hard stuff. If
not found, it just prints a message.
- recenter
- Reposition dot in the current window. By default, the dot
is centered. If given a positive argument (n), the display is repositioned
to line n. If n is negative, it is that line from
the bottom.
- redraw-display
- Refresh the display. Recomputes all window sizes in case
something has changed.
- save-buffer
- Save the contents of the current buffer if it has been
changed, optionally creating a backup copy.
- save-buffers-kill-emacs
- Offer to save modified buffers and quit
mg.
- save-some-buffers
- Look through the list of buffers, offering to save any
buffer that has been changed. Buffers that are not associated with files
(such as *scratch*, *grep*, *compile*) are ignored.
- scroll-down
- Scroll backwards n pages. A two-line
overlap between pages is assumed. If given a repeat argument, scrolls back
lines, not pages.
- scroll-one-line-down
- Scroll the display down n lines
without changing the cursor position.
- scroll-one-line-up
- Scroll the display n lines up without
moving the cursor position.
- scroll-other-window
- Scroll the next window in the window list window forward
n pages.
- scroll-up
- Scroll forward one page. A two-line overlap between pages
is assumed. If given a repeat argument, scrolls back lines, not
pages.
- search-again
- Search again, using the same search string and direction as
the last search command.
- search-backward
- Reverse search. Get a search string from the user, and
search, starting at dot and proceeding toward the front of the buffer. If
found, dot is left pointing at the first character of the pattern (the
last character that was matched).
- search-forward
- Search forward. Get a search string from the user, and
search for it starting at dot. If found, dot gets moved to just after the
matched characters, if not found, print a message.
- self-insert-command
- Insert a character.
- set-case-fold-search
- Set case-fold searching, causing case nopt to matter in
regular expression searches. This is the default.
- set-default-mode
- Append the supplied mode to the list of default modes used
by subsequent buffer creation. Built in modes include: fill, indent,
overwrite, and notab.
- set-fill-column
- Prompt the user for a fill column. Used by
auto-fill-mode.
- set-mark-command
- Sets the mark in the current window to the current dot
location.
- set-prefix-string
- Sets the prefix string to be used by the 'prefix-region'
command.
- shrink-window
- Shrink current window by one line. The window immediately
below is expanded to pick up the slack. If only one window is present,
this command has no effect.
- space-to-tabstop
- Insert enough spaces to reach the next tab-stop position.
By default, tab-stops occur every 8 characters.
- split-window-vertically
- Split the current window. A window smaller than 3 lines
cannot be split.
- start-kbd-macro
- Start defining a keyboard macro. Macro definition is ended
by invoking end-kbd-macro.
- suspend-emacs
- Suspend mg and switch back to alternate
screen, if in use.
- switch-to-buffer
- Prompt and switch to a new buffer in the current
window.
- switch-to-buffer-other-window
- Switch to buffer in another window.
- toggle-read-only
- Toggle the read-only flag on the current buffer.
- transpose-chars
- Transpose the two characters on either side of dot. If dot
is at the end of the line, transpose the two characters before it. Return
with an error if dot is at the beginning of line; it seems to be a bit
pointless to make this work.
- undo
- Undo the most recent action. If invoked again without an
intervening command, move the undo pointer to the previous action and undo
it.
- undo-boundary
- Add an undo boundary. This is not usually done
interactively.
- undo-boundary-toggle
- Toggle whether undo boundaries are generated. Undo
boundaries are often disabled before operations that should be considered
atomically undoable.
- undo-enable
- Toggle whether undo information is kept.
- undo-list
- Show the undo records for the current buffer in a new
buffer.
- universal-argument
- Repeat the next command 4 times. Usually bound to C-u. This
command may be stacked; e.g. C-u C-u C-f moves the cursor forward 16
characters.
- upcase-region
- Upper case region. Change all of the lower case characters
in the region to upper case.
- upcase-word
- Move the cursor forward by the specified number of words.
As it moves, convert any characters to upper case.
- what-cursor-position
- Display a bunch of useful information about the current
location of dot. The character under the cursor (in octal), the current
line, row, and column, and approximate position of the cursor in the file
(as a percentage) is displayed. The column position assumes an infinite
position display; it does not truncate just because the screen does.
- write-file
- Ask for a file name and write the contents of the current
buffer to that file. Update the remembered file name and clear the buffer
changed flag.
- yank
- Yank text from kill-buffer. Unlike emacs, the
mg kill buffer consists only of the most recent kill. It
is not a ring.
CONFIGURATION FILES¶
There are two configuration files,
.mg, and
.mg-TERM. Here,
TERM
represents the
name of the terminal type; e.g., if the terminal type is set to
“vt100”,
mg will use
.mg-vt100
as a startup file. The terminal type startup file is used first.
The startup file format is a list of commands, one per line, as used for
interactive evaluation. Strings that are normally entered by the user at any
subsequent prompts may be specified after the command name; e.g.:
global-set-key ")" self-insert-command
global-set-key "\^x\^f" find-file
global-set-key "\e[Z" backward-char
set-default-mode fill
set-fill-column 72
auto-execute *.c c-mode
FILES¶
- ~/.mg
- normal startup file
- ~/.mg-TERM
- terminal-specific startup file
- /usr/share/doc/mg/tutorial
- concise tutorial
SEE ALSO¶
vi(1)
CAVEATS¶
Since it is written completely in C, there is currently no language in which
extensions can be written; however, keys can be rebound and certain parameters
can be changed in startup files.
In order to use 8-bit characters (such as German umlauts), the Meta key needs to
be disabled via the “meta-key-mode” command.