From: howard@hasse.ericsson.se (Howard Gayle) Newsgroups: alt.sources Subject: GNU Emacs 8-bit mods part 12 of 12 Message-ID: <1990Apr5.134438.9370@ericsson.se> Date: 5 Apr 90 13:44:38 GMT This is a continuation of part 11. -----cut here----- *************** *** 8151,8157 **** @cindex indentation @findex indent-for-comment ! The comment commands insert, kill and align comments. @c WideCommands @table @kbd --- 8207,8213 ---- @cindex indentation @findex indent-for-comment ! The comment commands insert, kill, and align comments. @c WideCommands @table @kbd *************** *** 8480,8486 **** @cindex etags program The @code{etags} program is used to create a tag table file. It knows ! the syntax of C, Fortran, La@TeX{}, Scheme and Emacs Lisp/Common Lisp. To use @code{etags}, type @example --- 8536,8542 ---- @cindex etags program The @code{etags} program is used to create a tag table file. It knows ! the syntax of C, Fortran, La@TeX{}, Scheme, and Emacs Lisp/Common Lisp. To use @code{etags}, type @example *************** *** 10324,10329 **** --- 10380,10386 ---- @kindex C-c C-c (Mail mode) @findex mail-send @findex mail-send-and-exit + @vindex mail-send-hook There are two ways to send the message. @kbd{C-c C-s} (@code{mail-send}) sends the message and marks the @samp{*mail*} buffer unmodified, but leaves that buffer selected so that you can modify the message (perhaps with new *************** *** 10331,10337 **** sends and then deletes the window (if there is another window) or switches to another buffer. It puts the @samp{*mail*} buffer at the lowest priority for automatic reselection, since you are finished with using it. This is ! the usual way to send the message. @kindex C-c C-f C-t (Mail mode) @findex mail-to --- 10388,10396 ---- sends and then deletes the window (if there is another window) or switches to another buffer. It puts the @samp{*mail*} buffer at the lowest priority for automatic reselection, since you are finished with using it. This is ! the usual way to send the message. If the variable ! @code{mail-send-hook} is bound and non-@code{nil}, then its value ! is called as a function just before the mail is sent.@refill @kindex C-c C-f C-t (Mail mode) @findex mail-to *************** *** 10465,10471 **** @kindex DEL (Rmail) Since the most common thing to do while reading a message is to scroll through it by screenfuls, Rmail makes @key{SPC} and @key{DEL} synonyms of ! @kbd{C-v} (@code{scroll-up}) and @kbd{M-v} (@code{scroll-down}) @kindex . (Rmail) @findex rmail-beginning-of-message --- 10524,10530 ---- @kindex DEL (Rmail) Since the most common thing to do while reading a message is to scroll through it by screenfuls, Rmail makes @key{SPC} and @key{DEL} synonyms of ! @kbd{C-v} (@code{scroll-up}) and @kbd{M-v} (@code{scroll-down}). @kindex . (Rmail) @findex rmail-beginning-of-message *************** *** 10536,10541 **** --- 10595,10605 ---- In Rmail, you can specify a numeric argument by typing the digits. It is not necessary to type @kbd{C-u} first. + @vindex rmail-show-message-hook + If the variable @code{rmail-show-message-hook} is bound and + non-@code{nil}, then its value is called as a function just + before each message is displayed.@refill + @kindex M-s (Rmail) @findex rmail-search The @kbd{M-s} (@code{rmail-search}) command is Rmail's version of search. The *************** *** 10675,10680 **** --- 10739,10749 ---- a crash at the wrong time, this file will continue to exist and will be used as an inbox the next time you get new mail. + @vindex rmail-get-new-mail-hook + If the variable @code{rmail-get-new-mail-hook} is bound and + non-@code{nil}, then its value is called as a function just + after new mail is appended to the Rmail file.@refill + @node Rmail Files, Rmail Output, Rmail Inbox, Rmail @section Multiple Mail Files *************** *** 11329,11337 **** identify a @dfn{sort key} for each record, and then reorder the records into the order determined by the sort keys. The records are ordered so that their keys are in alphabetical order, or, for numeric sorting, in ! numeric order. In alphabetic sorting, all upper case letters `A' through `Z' come before lower case `a', in accord with the ASCII character ! sequence. The various sort commands differ in how they divide the text into sort records and in which part of each record is used as the sort key. Most of --- 11398,11410 ---- identify a @dfn{sort key} for each record, and then reorder the records into the order determined by the sort keys. The records are ordered so that their keys are in alphabetical order, or, for numeric sorting, in ! numeric order. In alphabetic sorting, if the value of the ! variable @code{case-fold-search} is @code{nil}, then all upper ! case letters `A' through `Z' come before lower case `a', in accord with the ASCII character ! sequence. Otherwise, upper and lower case letters sort ! together. The sorting order of characters can be customized. ! @xref{Sort Tables}.@refill The various sort commands differ in how they divide the text into sort records and in which part of each record is used as the sort key. Most of *************** *** 11395,11401 **** @end smallexample @noindent ! then if you apply @kbd{M-x sort-lines} to the entire buffer you get @smallexample On systems where clash detection (locking of files being edited) is --- 11468,11475 ---- @end smallexample @noindent ! then if you apply @kbd{M-x sort-lines} to the entire buffer and ! if the value of @code{case-fold-search} is @code{nil}, you get@refill @smallexample On systems where clash detection (locking of files being edited) is *************** *** 11824,11829 **** --- 11898,11904 ---- By changing them, you can "redefine keys". * Syntax:: The syntax table controls how words and expressions are parsed. + * Customizing Character Sets:: How to edit other character sets than ASCII. * Init File:: How to write common customizations in the @file{.emacs} file. @end menu *************** *** 12057,12064 **** @dfn{per-buffer} variables. Some important variables have been marked per-buffer already. These include ! @code{abbrev-mode}, @code{auto-fill-hook}, @code{case-fold-search}, ! @code{comment-column}, @code{ctl-arrow}, @code{fill-column}, @code{fill-prefix}, @code{indent-tabs-mode}, @code{left-margin}, @code{mode-line-format}, @code{overwrite-mode},@* @code{selective-display-ellipses}, @code{selective-display}, --- 12132,12140 ---- @dfn{per-buffer} variables. Some important variables have been marked per-buffer already. These include ! @code{abbrev-mode}, @code{auto-fill-hook}, @code{buffer-char-table}, ! @code{case-fold-search}, ! @code{comment-column}, @code{fill-column}, @code{fill-prefix}, @code{indent-tabs-mode}, @code{left-margin}, @code{mode-line-format}, @code{overwrite-mode},@* @code{selective-display-ellipses}, @code{selective-display}, *************** *** 12347,12353 **** @menu * Keymaps:: Definition of the keymap data structure. ! Names of Emacs's standard keymaps. * Rebinding:: How to redefine one key's meaning conveniently. * Disabling:: Disabling a command means confirmation is required before it can be executed. This is done to protect --- 12423,12429 ---- @menu * Keymaps:: Definition of the keymap data structure. ! Names of Emacs's standard keymaps. * Rebinding:: How to redefine one key's meaning conveniently. * Disabling:: Disabling a command means confirmation is required before it can be executed. This is done to protect *************** *** 12474,12480 **** @subsection Changing Key Bindings Interactively @cindex key rebinding, this session @cindex rebinding keys, this session - @cindex rebinding keys, this session The way to redefine an Emacs key is to change its entry in a keymap. You can change the global keymap, in which case the change is effective in --- 12550,12555 ---- *************** *** 12575,12581 **** Disabling a command has no effect on calling it as a function from Lisp programs. ! @node Syntax, Init File, Key Bindings, Customization @section The Syntax Table @cindex syntax table --- 12650,12656 ---- Disabling a command has no effect on calling it as a function from Lisp programs. ! @node Syntax, Customizing Character Sets, Key Bindings, Customization @section The Syntax Table @cindex syntax table *************** *** 12687,12693 **** for comments have other variables that tell them where to find comments. And the list and sexp commands notice comments only if @code{parse-sexp-ignore-comments} is non-@code{nil}. This variable is set ! to @code{nil} in modes where comment-terminator sequences are liable to appear where there is no comment; for example, in Lisp mode where the comment terminator is a newline but not every newline ends a comment. --- 12762,12768 ---- for comments have other variables that tell them where to find comments. And the list and sexp commands notice comments only if @code{parse-sexp-ignore-comments} is non-@code{nil}. This variable is set ! to @code{nil} in modes where comment-terminator sequences are likely to appear where there is no comment; for example, in Lisp mode where the comment terminator is a newline but not every newline ends a comment. *************** *** 12743,12748 **** --- 12818,13250 ---- @code{modify-syntax-entry} to set up that character's current syntax, and some English to explain that string if necessary. + @node Customizing Character Sets, Init File, Syntax, Customization + @section Customizing Character Sets + + By default, Emacs uses an eight-bit version of the ASCII + character set, but it can display and edit any eight-bit + character set provided that:@refill + + @enumerate + @item + the space character has octal value 40, + @item + the horizontal tab character has octal value 11, and + @item + the newline character has octal value 12. + @end enumerate + + @noindent + In particular, Emacs can edit all @w{ISO 8859} character sets. + This capability was contributed by Howard Lee Gayle.@refill + + @iftex + This section describes the Lisp objects that hold information + about character sets, and how to manipulate them. + @end iftex + + @menu + * Case Tables:: What is the case of each character? + * Char Tables:: How to customize the display of characters. + * Sort Tables:: How to customize searching and sorting. + * Trans Tables:: How to customize case mapping and character translations. + @end menu + + @node Case Tables, Char Tables,, Customizing Character Sets + @subsection Case Tables + @cindex case table + + A @dfn{case table} is a Lisp object that contains information + about the case of every character in a character set. + Each character has exactly one case:@refill + + @enumerate + @item + caseless, + @item + lower case, or + @item + upper case. + @end enumerate + + @cindex standard case table + @findex case-table + @findex describe-buffer-case-table + @findex set-case-table + @findex set-standard-case-table + @findex standard-case-table + @noindent + A lower case character must have exactly one corresponding + upper case character, and vice versa. + A case table is associated with each buffer. + The function @code{case-table} returns the case table + associated with the current buffer. + The function @code{set-case-table} sets the case table of the + current buffer. + The command @code{describe-buffer-case-table} prints a readable + description of the current buffer's case table. + The description is printed in another buffer. + When a buffer is created, its case table is initialized to the + @dfn{standard case table}. + The function @code{standard-case-table} returns this. + The function @code{set-standard-case-table} sets the standard + case table; this does not change the case tables of any + existing buffers.@refill + + @findex case-table-p + @findex lower-p + @findex nocase-p + @findex upper-p + @findex make-case-table + @findex set-case-table-nocase + @findex set-case-table-pair + The function @code{make-case-table} creates a new case table. + Initially, all characters in it are caseless. + The function @code{set-case-table-pair} marks a pair of + characters as upper and lower case. + The function @code{set-case-table-nocase} marks a character as caseless. + The predicate functions @code{nocase-p}, @code{lower-p}, and + @code{upper-p} return @code{t} if and only if a character has + the corresponding case, otherwise @code{nil}. + The predicate @code{case-table-p} + returns @code{t} if and only if its argument is a case table, + otherwise @code{nil}.@refill + + @node Char Tables, Sort Tables, Case Tables, Customizing Character Sets + @subsection Char Tables + @cindex char table + + A @dfn{char table} is a Lisp object that contains information + about how to display the characters in a character set. + Before discussing char tables, some definitions are required.@refill + + @cindex glyf + @cindex rope + A @dfn{glyf} is something that takes up exactly one position + on the display of a terminal, terminal emulator, or window system. + For example, @samp{a} is a glyf, as is a yellow, blinking, + underlined @samp{7} on a red background. + Note that it may be necessary to transmit many bytes to a + terminal to display one glyf. + A @dfn{rope} is a sequence of glyfs. + (The name is an analogy to @dfn{string}, which is a sequence of characters.) + For example, the glyf @samp{^} followed by the glyf @samp{C} + forms a rope of length 2. + Glyfs are represented as unsigned 16-bit integers. + Ropes are represented as vectors of glyfs. + Some customization details depend on whether Emacs is run on a + terminal (emulator) or on the X window system. + These details are discussed before proceeding with an + explanation of char tables.@refill + + @menu + * Terminal Glyfs:: Glyfs on ordinary terminals. + * X Glyfs:: Glyfs on the X window system. + * More Char:: More about char tables. + @end menu + + @node Terminal Glyfs, X Glyfs,, Char Tables + @subsubsection Terminal Glyfs + + @findex find-glyf + @findex get-glyf + @findex glyf-to-string + @findex new-glyf + The function @code{new-glyf} takes as argument a string of + bytes and returns a glyf. + The bytes are sent to the terminal when the glyf is displayed. + The function @code{find-glyf} returns an existing glyf that + corresponds to the given string of bytes, or @code{nil} if + there is none. + The function @code{get-glyf} is like @code{find-glyf}, but + creates a new glyf if one does not already exist. + The function @code{glyf-to-string} returns the string of bytes + associated with a glyf.@refill + + It is the customizer's responsibility to see to it that the + string of bytes corresponding to each glyf takes up exactly one + display position on the terminal. + Since the bytes are terminal-dependent, Emacs can not check this. + If this does not hold, Emacs's internal information about the + state of the display will not correspond to the actual state of + the display. + For example, the position of the cursor may not correspond to point. + Furthermore, the customizer must see to it that the string of + bytes associated with each glyf leaves the terminal in a + ``normal'' state. + For example, a glyf corresponding to a blinking @samp{3} might + consist of the escape sequence to turn on blinking, @samp{3}, + and finally the escape sequence to turn off blinking.@refill + + @node X Glyfs, More Char, Terminal Glyfs, Char Tables + @subsubsection X Glyfs + + @cindex X window + @cindex graphic context + @cindex GC + @cindex face code + @cindex font + When Emacs is used with the X window system, glyfs have a + slightly different meaning. + Recall that a glyf is represented as an unsigned 16-bit integer. + The low order byte selects one @dfn{face code} in a @dfn{font}, + for example @samp{g} in the font named @file{7x14}. + The high order byte of a glyf is associated with an + X @dfn{graphic context}, abbreviated @dfn{GC}. + There are 255 different GC numbers, since 0 is not used. + For each GC number, there are actually two GCs, one for normal text and + one for highlighted text such as window mode lines. Each GC can specify + a font, a foreground color, and a background color. All fonts must be + fixed-width and must have the same size characters. At present, + multiple GCs are not implemented; GC number 2 should be used for all + glyfs.@refill + + @node More Char,, X Glyfs, Char Tables + @subsubsection More About Char Tables + + A char table contains the following: + + @cindex frame glyf + @cindex truncation glyf + @cindex wrap glyf + @enumerate + @item + The @dfn{frame glyf}: the glyf that separates two side-by-side + windows (default @samp{|}). + @xref{Split Window,, Splitting Windows}.@refill + + @item + The @dfn{truncation glyf}: the glyf that shows that a line + extends beyond the edge of a window (default @samp{$}). + @xref{Continuation Lines}.@refill + + @item + The @dfn{wrap glyf}: the glyf that shows that a line continues + on the next line in a window (default @samp{\}). + @xref{Continuation Lines}.@refill + + @item + The @dfn{selective display character}: the character that marks + invisible lines (default @samp{C-m}). + @xref{Selective Display}.@refill + + @item + The @dfn{selective display rope}: the rope that shows that a + line is followed by one or more invisible lines (default + @samp{... }). + @xref{Selective Display}.@refill + + @item + For each character (except space, tab, and newline), the rope + to be used to display that character.@refill + @end enumerate + + @findex describe-window-char-table + @findex set-window-char-table + @findex window-char-table + A char table is associated with each window. + The function @code{window-char-table} returns the char table of + a window. + The function @code{set-window-char-table} sets the char table + of a window. + Note that it is possible to display the same buffer in several + different windows, using different char tables for each window. + The command @code{describe-window-char-table} displays a + readable description of the char table of the selected window + in another buffer.@refill + + @vindex buffer-char-table + A char table can be associated with each buffer, by + means of the variable @code{buffer-char-table}. + This variable becomes local to the buffer when set. + Its value is the char table to use when displaying the buffer + in a window. + Changing its value has no effect on existing windows.@refill + + @findex char-table-p + @findex copy-char-table + The function @code{copy-char-table} creates a new char table + that is a copy of its argument. + The predicate @code{char-table-p} returns @code{t} if and only + if its argument is a char table, otherwise @code{nil}.@refill + + @findex backslash-char-table + @findex ctl-arrow-char-table + There are two ``standard'' char tables. + They differ only in the way control characters are displayed. + One displays them with ropes consisting of a @samp{^} glyf + followed by a single glyf; the other by a @samp{\} glyf + followed by three glyfs representing an octal number. + The @samp{^} char table is returned by the function + @code{ctl-arrow-char-table}; the @samp{\} char table by the + function @code{backslash-char-table}. + @xref{Unprintables} for information on how to select between + these char tables.@refill + + @findex get-char-table-dispr + @findex get-char-table-frameg + @findex get-char-table-invisc + @findex get-char-table-invisr + @findex get-char-table-truncg + @findex get-char-table-wrapg + @findex put-char-table-dispr + @findex put-char-table-frameg + @findex put-char-table-invisc + @findex put-char-table-invisr + @findex put-char-table-truncg + @findex put-char-table-wrapg + There is a set of functions for accessing and changing the information + stored in a char table. + The function @code{get-char-table-frameg} returns the frame glyf. + The function @code{get-char-table-truncg} returns the truncation glyf. + The function @code{get-char-table-wrapg} returns the wrap glyf. + The function @code{get-char-table-invisc} returns the selective + display character. + The function @code{get-char-table-invisr} returns the selective + display rope. + The function @code{get-char-table-dispr} returns the display + rope for a given character. + Each of these @code{get-} functions has a corresponding + @code{put-} function that changes the value.@refill + + @node Sort Tables, Trans Tables, Char Tables, Customizing Character Sets + @subsection Sort Tables + @cindex equivalence class + @cindex sort table + + A @dfn{sort table} is a Lisp object that holds information + for searching and sorting. + Each character set is partitioned into @dfn{equivalence classes}, + that is, each character in the character set is assigned to + exactly one subset, known as the character's equivalence class. + All of the characters in an equivalence class are equal for the + purposes of searching and sorting. + For example, when the variable @code{case-fold-search} is + non-@code{nil}, the characters @samp{q} and @samp{Q} (and no + others) form an equivalence class. + Each equivalence class has a number. + When comparing two characters @var{x} and @var{y}, @var{x} is + considered to be + greater than @var{y} if and only if the equivalence class + number of @var{x} is greater than the equivalence class number + of @var{y}.@refill + + @findex new-sort-table + The function @code{new-sort-table} creates and returns a new + sort table. + Its argument is a list of the equivalence classes, in increasing order. + There are three ways to denote an equivalence class:@refill + + @enumerate + @item + A single character denotes the equivalence class that contains + just that character and no others.@refill + + @item + A cons cell whose car @var{x} and cdr @var{y} are both characters indicates + that each character in the range from @var{x} up to and + including @var{y} goes into its own equivalence class, alone.@refill + + @item + A list of characters denotes a single equivalence class + containing exactly those characters.@refill + @end enumerate + + @cindex case distinct sort table + @cindex case fold sort table + @findex case-distinct-table + @findex case-fold-table + @findex describe-case-distinct-table + @findex describe-case-fold-table + @findex set-case-distinct-table + @findex set-case-fold-table + Each buffer has two sort tables associated with it: + a @dfn{case distinct} sort table and a @dfn{case fold} sort table. + If the value of the variable @code{case-fold-search} is + @code{nil}, then the case distinct sort table is used, + otherwise the case fold sort table is used. + The function @code{case-distinct-table} returns the case + distinct sort table of the current buffer; + @code{case-fold-table} returns the case fold sort table. + The functions @code{set-case-distinct-table} and + @code{set-case-fold-table} set them. + The case distinct, but not the case fold, sort table may be @code{nil}. + In this case, each character is distinct, and is sorted by its + code in the character set. + The commands @code{describe-case-distinct-table} and + @code{describe-case-fold-table} print descriptions of the + current buffer's respective sort tables in another buffer.@refill + + @findex set-standard-case-distinct-table + @findex set-standard-case-fold-table + @findex standard-case-distinct-table + @findex standard-case-fold-table + When a buffer is created, its sort tables are set to two + standard sort tables. + The functions @code{standard-case-distinct-table} and + @code{standard-case-fold-table} return them. + The functions @code{set-standard-case-distinct-table} and + @code{set-standard-case-fold-table} set them.@refill + + @findex sort-table-p + @findex string-less* + The predicate @code{string-less*} compares two strings + according to a sort table. + The predicate @code{sort-table-p} tests if its argument is a + sort table.@refill + + @node Trans Tables,, Sort Tables, Customizing Character Sets + @subsection Trans Tables + @cindex identity trans table + @cindex trans table + + @findex make-trans-table + @findex set-trans-table-to + @findex trans-table-p + A trans[lation] table is a Lisp object that maps each + character in a character set to some other, possibly identical, + character. + The function @code{make-trans-table} creates a new copy of the + @dfn{identity trans table}. + This is a trans table that maps each character to itself. + The function @code{set-trans-table-to} can then be used to + change the mapping of a character in a trans table. + The predicate @code{trans-table-p} tests if its argument is a + trans table.@refill + + @findex describe-downcase-table + @findex describe-upcase-table + @findex downcase-table + @findex upcase-table + @findex set-downcase-table + @findex set-upcase-table + Associated with each buffer are two trans tables for case conversion. + The function @code{downcase-table} returns a trans table that + maps upper case characters to lower case, and other characters + to themselves. + The function @code{upcase-table} returns a trans table for + mapping to upper case. + The functions @code{set-downcase-table} and + @code{set-upcase-table} set them. + The commands @code{describe-downcase-table} and + @code{describe-upcase-table} print representations of the + respective trans tables in another buffer.@refill + + @findex set-standard-downcase-table + @findex set-standard-upcase-table + @findex standard-downcase-table + @findex standard-upcase-table + When a buffer is created, its trans tables are set to two + standard trans tables. + The functions @code{standard-downcase-table} and + @code{standard-upcase-table} return them. + The functions @code{set-standard-downcase-table} and + @code{set-standard-upcase-table} set them.@refill + + @findex translate-region + The function @code{translate-region} applies a trans table to + a region in the current buffer.@refill + @node Init File,, Syntax, Customization @section The Init File, .emacs @cindex init file *************** *** 13486,13491 **** --- 13988,14007 ---- (@pxref{Command Switches}). Switches eliminated include @samp{-insert} and @samp{-i}, and the alternate names @samp{-funcall}, @samp{-load}, @samp{-user} and @samp{-no-init-file}.@refill + + @item + Customization of character sets has been eliminated. + @xref{Customizing Character Sets}.@refill + + @item + The commands that control the display of control characters + have been eliminated (@pxref{Unprintables}). + Instead, + if the variable @code{ctl-arrow} is @code{nil}, control characters in the + buffer are displayed with octal escape sequences, all except newline and + tab. Altering the value of @code{ctl-arrow} makes it local to the current + buffer; until that time, the default value is in effect. The default is + initially @code{t}.@refill @end itemize @unnumberedsec Changes in Major Modes *************** *** 13625,13631 **** Several built-in variables now are always local to all buffers. ! These variables are @code{tab-width}, @code{ctl-arrow}, @code{truncate-lines}, @code{fill-column}, @code{left-margin}, @code{mode-line-format}, @code{abbrev-mode}, @code{overwrite-mode}, @code{case-fold-search}, @code{auto-fill-hook}, --- 14141,14147 ---- Several built-in variables now are always local to all buffers. ! These variables are @code{tab-width}, @code{truncate-lines}, @code{fill-column}, @code{left-margin}, @code{mode-line-format}, @code{abbrev-mode}, @code{overwrite-mode}, @code{case-fold-search}, @code{auto-fill-hook}, *************** *** 13667,13673 **** GNU, which stands for Gnu's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it. Several other volunteers are helping ! me. Contributions of time, money, programs and equipment are greatly needed. So far we have an Emacs text editor with Lisp for writing editor commands, --- 14183,14189 ---- GNU, which stands for Gnu's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it. Several other volunteers are helping ! me. Contributions of time, money, programs, and equipment are greatly needed. So far we have an Emacs text editor with Lisp for writing editor commands, *************** *** 13850,13856 **** With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on ! distibution arrangements. GNU does not eliminate all the world's problems, only some of them. Meanwhile, the users who know nothing about computers need handholding: --- 14366,14372 ---- With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on ! distribution arrangements. GNU does not eliminate all the world's problems, only some of them. Meanwhile, the users who know nothing about computers need handholding: *************** *** 14121,14127 **** world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required ! tasks such as legislation, family counseling, robot repair and asteroid prospecting. There will be no need to be able to make a living from programming. --- 14637,14643 ---- world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required ! tasks such as legislation, family counseling, robot repair, and asteroid prospecting. There will be no need to be able to make a living from programming. *************** *** 14208,14213 **** --- 14724,14739 ---- Case conversion means changing text from upper case to lower case or vice versa. @xref{Case}, for the commands for case conversion. + @item Case Table + A case table tells Emacs the case of each character in a + character set. + @xref{Case Tables}.@refill + + @item Char Table + A char[acter] table tells Emacs how to display each character + in a character set. + @xref{Char Tables}.@refill + @item Characters Characters form the contents of an Emacs buffer; also, Emacs commands are invoked by keys (q.v.@:), which are sequences of one or more *************** *** 14266,14272 **** do not have graphic images assigned to them. These are the control characters. Any control character can be typed by holding down the @key{CTRL} key and typing some other character; some have special keys ! on the keyboard. @key{RET}, @key{TAB}, @key{ESC}, @key{LFD} and @key{DEL} are all control characters. @xref{Characters}.@refill @item Copyleft --- 14792,14798 ---- do not have graphic images assigned to them. These are the control characters. Any control character can be typed by holding down the @key{CTRL} key and typing some other character; some have special keys ! on the keyboard. @key{RET}, @key{TAB}, @key{ESC}, @key{LFD}, and @key{DEL} are all control characters. @xref{Characters}.@refill @item Copyleft *************** *** 14426,14431 **** --- 14952,14963 ---- that do not have their own local (q.v.@:) values for the variable. @xref{Variables}. + @item Glyf + A glyf is something that a terminal, terminal emulator, or + window system can display. + A glyf takes up exactly one display position. + @xref{Char Tables}.@refill + @item Graphic Character Graphic characters are those assigned pictorial images rather than just names. All the non-Meta (q.v.@:) characters except for the *************** *** 14513,14520 **** @item Local Local means `in effect only in a particular context'; the relevant kind of context is a particular function execution, a particular ! buffer, or a particular major mode. It is the opposite of `global' ! (q.v.@:). Specific uses of `local' in Emacs terminology appear below. @item Local Abbrev A local abbrev definition is effective only if a particular major mode --- 15045,15053 ---- @item Local Local means `in effect only in a particular context'; the relevant kind of context is a particular function execution, a particular ! buffer, a particular window, or a particular major mode. It is ! the opposite of `global' ! (q.v.@:). Specific uses of `local' in Emacs terminology appear below.@refill @item Local Abbrev A local abbrev definition is effective only if a particular major mode *************** *** 14745,14750 **** --- 15278,15286 ---- newline into the text. It is also used to terminate most arguments read in the minibuffer (q.v.@:). @xref{Characters,Return}. + @item Rope + A rope is a sequence of glyfs (q.v.@:). + @item Saving Saving a buffer means copying its text into the file that was visited (q.v.@:) in that buffer. This is the way text in files actually gets *************** *** 14785,14790 **** --- 15321,15331 ---- work. Emacs detects all cases of simultaneous editing and warns the user to investigate them. @xref{Interlocking,,Simultaneous Editing}. + @item Sort Table + A sort table tells Emacs how to perform searching and sorting + for a character set. + @xref{Sort Tables}.@refill + @item String A string is a kind of Lisp data object which contains a sequence of characters. Many Emacs variables are intended to have strings as *************** *** 14834,14839 **** --- 15375,15386 ---- are not in a recursive editing level (q.v.@:) or the minibuffer (q.v.@:), and not in the middle of a command. You can get back to top level by aborting (q.v.@:) and quitting (q.v.@:). @xref{Quitting}. + + @item Trans Table + A trans[lation] table maps every character in a character set + into another (possibly the same) character. + Trans tables can be used, for example, for case conversion. + @xref{Trans Tables}.@refill @item Transposition Transposing two units of text means putting each one into the place