changeset 83206:b5dee7c1d483

Merged in changes from CVS trunk. Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-547 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-548 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-549 Use symbol-matching for generic-mode keywords * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-550 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-551 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-246
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 16 Sep 2004 13:09:53 +0000
parents 400c4dd06d55 (current diff) 959bd7a4b7df (diff)
children 4df500c93e1d
files lisp/ChangeLog lisp/faces.el lisp/files.el lisp/vc.el src/alloc.c src/fileio.c src/xfaces.c
diffstat 25 files changed, 742 insertions(+), 389 deletions(-) [+]
line wrap: on
line diff
--- a/etc/ETAGS.EBNF	Mon Sep 13 20:39:27 2004 +0000
+++ b/etc/ETAGS.EBNF	Thu Sep 16 13:09:53 2004 +0000
@@ -2,7 +2,7 @@
 
 This file contains two sections:
 
-1) An EBNF (Extended Backus Normal Form) description of the format of
+1) An EBNF (Extended Backus-Naur Form) description of the format of
     the tags file created by etags.c and interpreted by etags.el;
 2) A discussion of tag names and implicit tag names.
 
@@ -81,7 +81,7 @@
 whether it is possible to deduce the tag name from the pattern, and make
 an unnamed tag in those cases.  The name deduced from the pattern of an
 unnamed tag is the implicit name of that tag.
-  When the user looks for a tag, and Emacs founds no explicit tag names
+  When the user looks for a tag, and Emacs finds no explicit tag names
 that match it, Emacs then looks for an tag whose implicit tag name
 matches the request.  etags.c uses implicit tag names when possible, in
 order to reduce the size of the tags file.
--- a/etc/NEWS	Mon Sep 13 20:39:27 2004 +0000
+++ b/etc/NEWS	Thu Sep 16 13:09:53 2004 +0000
@@ -2004,6 +2004,10 @@
 
 * New modes and packages in Emacs 21.4
 
+** The new package dns-mode.el add syntax highlight of DNS master files.
+The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used
+to increment the SOA serial.
+
 ** The new package flymake.el does on-the-fly syntax checking of program
 source files.  See the Flymake's Info manual for more details.
 
--- a/etc/etags.1	Mon Sep 13 20:39:27 2004 +0000
+++ b/etc/etags.1	Thu Sep 16 13:09:53 2004 +0000
@@ -58,7 +58,9 @@
 \fBctags\fP) in the current working directory.
 Files specified with relative file names will be recorded in the tag
 table with file names relative to the directory where the tag table
-resides.  Files specified with absolute file names will be recorded
+resides.  If the tag table is in /dev, however, the file names are made
+relative to the working directory.  Files specified with absolute file
+names will be recorded
 with absolute file names.  Files generated from a source file\-\-like
 a C file generated from a source Cweb file\-\-will be recorded with
 the name of the source file.
--- a/lib-src/ChangeLog	Mon Sep 13 20:39:27 2004 +0000
+++ b/lib-src/ChangeLog	Thu Sep 16 13:09:53 2004 +0000
@@ -1,3 +1,9 @@
+2004-09-13  Francesco Potort,Al(B  <pot@gnu.org>
+
+	* etags.c (main): When relative file names are given as argument,
+	make them relative to the current working dir, rather than
+	relative to the output tags file, if the latter is in /dev.
+
 2004-09-13  Francesco Potort,Al(B  <pot@gnu.org>
 
 	* etags.c [EXIT_SUCCESS, EXIT_FAILURE]: Define them when no
--- a/lib-src/etags.c	Mon Sep 13 20:39:27 2004 +0000
+++ b/lib-src/etags.c	Thu Sep 16 13:09:53 2004 +0000
@@ -40,7 +40,7 @@
  * configuration file containing regexp definitions for etags.
  */
 
-char pot_etags_version[] = "@(#) pot revision number is 17.4";
+char pot_etags_version[] = "@(#) pot revision number is 17.5";
 
 #define	TRUE	1
 #define	FALSE	0
@@ -1314,7 +1314,9 @@
       cwd = concat (oldcwd, "/", "");
       free (oldcwd);
     }
-  if (streq (tagfile, "-"))
+  /* Relative file names are made relative to the current directory. */
+  if (streq (tagfile, "-")
+      || strneq (tagfile, "/dev/", 5))
     tagfiledir = cwd;
   else
     tagfiledir = absolute_dirname (tagfile, cwd);
--- a/lisp/ChangeLog	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/ChangeLog	Thu Sep 16 13:09:53 2004 +0000
@@ -1,9 +1,53 @@
+2004-09-15  Thien-Thi Nguyen  <ttn@gnu.org>
+
+	* vc.el (annotate-time): Document point handling.
+	(vc-annotate-display-autoscale): Doc fix.
+
+2004-09-15  Miles Bader  <miles@gnu.org>
+
+	* generic.el (generic-make-keywords-list): Use symbol rather than
+	word anchors in regexp.
+
+2004-09-14  Sean O'Rourke  <sorourke@cs.ucsd.edu>
+
+	* ibuf-ext.el (define-ibuffer-filter filename): If buffer has
+	no file name consider `dired-directory'.
+
+2004-09-14  Kim F. Storm  <storm@cua.dk>
+
+	* faces.el (cursor): Add face-no-inherit property.  Doc fix.
+
+2004-09-14  Simon Josefsson  <jas@extundo.com>
+
+	* files.el (auto-mode-alist): Map .soa and .zone to dns-mode.
+
+	* textmodes/dns-mode.el: Add.
+
+2004-09-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* novice.el (disabled-command-hook): Use shorthand for obsolescence.
+	(disabled-command-function): Make the ?\  char more obvious.
+
+	* vc-arch.el (vc-arch-root, vc-arch-registered):
+	* vc-mcvs.el (vc-mcvs-root, vc-mcvs-registered): Use vc-find-root.
+
+2004-09-13  Hovav Shacham  <hovav@sha1.stanford.edu>
+
+	* windmove.el (windmove-frame-edges): Report coordinates of
+	outside edges of frame, not inside edges.
+	(windmove-coordinates-of-position): Convert into wrapper to new
+	function `windmove-coordinates-of-window-position';
+	`compute-motion' always applies to selected window.
+	(windmove-coordinates-of-position): Update documentation to refer
+	to Emacs 21 Lisp Reference Manual.
+	(windmove-find-other-window): Fix off-by-one errors for max x,y.
+
 2004-09-13  Kim F. Storm  <storm@cua.dk>
 
 	* isearch.el (isearch-resume-in-command-history): Rename from
 	isearch-resume-enabled and change default to nil.
 
-2004-09-12  Stefan  <monnier@iro.umontreal.ca>
+2004-09-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* vc-hooks.el (vc-ignore-dir-regexp): New var.
 	(vc-registered): Use it.
@@ -109,7 +153,7 @@
 	* desktop.el (desktop-clear-preserve-buffers):
 	Remove make-obsolete-variable.
 
-2004-09-08  Stefan  <monnier@iro.umontreal.ca>
+2004-09-08  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* vc-arch.el (vc-arch-state): Fix parsing for `names' method.
 
@@ -196,7 +240,7 @@
 	window system if overflow-newline-into-fringe is enabled.
 	(term-mode): Don't disable overflow-newline-into-fringe.
 
-2004-09-07  Stefan  <monnier@iro.umontreal.ca>
+2004-09-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* term/xterm.el (function-key-map): Add bindings for C- and S- cursor
 	motion as seen on my Mac OS X xterms.
@@ -453,8 +497,8 @@
 
 2004-08-29  Kim F. Storm  <storm@cua.dk>
 
-	* emulation/cua-base.el (cua-auto-expand-rectangles): Remove
-	automatic rectangle padding feature; replace by non-destructive
+	* emulation/cua-base.el (cua-auto-expand-rectangles):
+	Remove automatic rectangle padding feature; replace by non-destructive
 	virtual rectangle edges feature.
 	(cua-virtual-rectangle-edges): New defcustom.
 	(cua-auto-tabify-rectangles): New defcustom.
@@ -937,8 +981,8 @@
 	key-translation-map.
 	(encoded-kbd-setup-keymap): Setup key-translation-map.
 	(saved-key-translation-map): New variable.
-	(encoded-kbd-mode): Save/restore key-translation-map.  Adjusted
-	for the change of encoded-kbd-setup-keymap.
+	(encoded-kbd-mode): Save/restore key-translation-map.
+	Adjust for the change of encoded-kbd-setup-keymap.
 
 2004-08-02  Kim F. Storm  <storm@cua.dk>
 
@@ -1101,12 +1145,11 @@
 
 	Sync with Tramp 2.0.43.
 
-	* net/tramp.el (tramp-handle-verify-visited-file-modtime): Remove
-	outdated comment.
+	* net/tramp.el (tramp-handle-verify-visited-file-modtime):
+	Remove outdated comment.
 	(tramp-locked, tramp-locker): New variables for implementing a
 	global lock.
-	(tramp-sh-file-name-handler): Use them to implement the global
-	lock.
+	(tramp-sh-file-name-handler): Use them to implement the global lock.
 
 2004-07-13  Michael Albinus  <michael.albinus@gmx.de>
 
@@ -1141,14 +1184,15 @@
 	* emacs-lisp/testcover.el: New category "potentially-1valued" for
 	functions that are not erroneous if either 1-valued or
 	multi-valued.  Detect functions in this class.
-	(testcover-1value-functions, testcover-compose-functions,
-	testcover-progn-functions) Added some additional functions to lists.
+	(testcover-1value-functions, testcover-compose-functions)
+	(testcover-progn-functions) Added some additional functions to lists.
 	(testcover-mark): Bugfix when marking up the definition for an
 	empty function.
 
 2004-07-17  Richard M. Stallman  <rms@gnu.org>
 
-	* replace.el (occur-read-primary-args): Pass default to read-from-minibuffer.
+	* replace.el (occur-read-primary-args): Pass default to
+	read-from-minibuffer.
 
 	* mail/footnote.el (footnote-section-tag): Use defcustom.
 
@@ -1257,8 +1301,8 @@
 
 2004-07-09  John Paul Wallington  <jpw@gnu.org>
 
-	* emacs-lisp/re-builder.el (reb-update-overlays): Distinguish
-	between one and several matches in message.
+	* emacs-lisp/re-builder.el (reb-update-overlays):
+	Distinguish between one and several matches in message.
 
 2004-07-09  Richard M. Stallman  <rms@gnu.org>
 
@@ -1296,11 +1340,11 @@
 	Do not treat double clicks and triple clicks specially in the
 	scroll bar (preventing strange repositioning problems)
 
-2004-07-06  Stefan  <monnier@iro.umontreal.ca>
+2004-07-06  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* replace.el (query-replace-regexp-eval): Fix last change.
 
-2004-07-05  Stefan  <monnier@iro.umontreal.ca>
+2004-07-05  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* replace.el (query-replace-descr): New fun.
 	(query-replace-read-from, query-replace-read-args): Default to the
--- a/lisp/calc/calc-embed.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/calc/calc-embed.el	Thu Sep 16 13:09:53 2004 +0000
@@ -557,7 +557,7 @@
 	       (not (eq (cdr found) 'default)))
 	  (progn
 	    (if (eq (setq value (cdr (car v))) 'default)
-		(setq value (cdr (assq (car (car v)) calc-mode-var-list))))
+		(setq value (list (nth 1 (assq (car (car v)) calc-mode-var-list)))))
 	    (equal (symbol-value (car (car v))) value))
 	  (progn
 	    (setq changed t)
--- a/lisp/calc/calc.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/calc/calc.el	Thu Sep 16 13:09:53 2004 +0000
@@ -3,8 +3,7 @@
 ;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: David Gillespie <daveg@synaptics.com>
-;; Maintainers: D. Goel <deego@gnufans.org>
-;;              Colin Walters <walters@debian.org>
+;; Maintainer: Jay Belanger <belanger@truman.edu>
 ;; Keywords: convenience, extensions
 ;; Version: 2.02g
 
@@ -237,7 +236,7 @@
 (defvar calc-gnuplot-print-command "lp %s"
   "*Name of command for printing GNUPLOT output; %s = file name to print.")
 
-(defvar calc-bug-address "deego@gnufans.org"
+(defvar calc-bug-address "belanger@truman.edu"
   "Address of the author of Calc, for use by `report-calc-bug'.")
 
 (defvar calc-scan-for-dels t
@@ -257,60 +256,145 @@
   "Index into `calc-stack' of \"top\" of stack.
 This is 1 unless `calc-truncate-stack' has been used.")
 
-(defvar calc-always-load-extensions nil
-  "If non-nil, load the calc-ext module automatically when calc is loaded.")
-
-(defvar calc-line-numbering t
-  "If non-nil, display line numbers in Calculator stack.")
-
-(defvar calc-line-breaking t
-  "If non-nil, break long values across multiple lines in Calculator stack.")
-
-(defvar calc-display-just nil
-  "If nil, stack display is left-justified.
+(defvar calc-display-sci-high 0
+  "Floating-point numbers with this positive exponent or higher above the
+current precision are displayed in scientific notation in calc-mode.")
+
+(defvar calc-display-sci-low -3
+  "Floating-point numbers with this negative exponent or lower are displayed
+scientific notation in calc-mode.")
+
+(defvar calc-other-modes nil
+  "List of used-defined strings to append to Calculator mode line.")
+
+(defvar calc-Y-help-msgs nil
+  "List of strings for Y prefix help.")
+
+(defvar calc-loaded-settings-file nil
+  "t if `calc-settings-file' has been loaded yet.")
+
+(defvar calc-always-load-extensions)
+(defvar calc-line-numbering)
+(defvar calc-line-breaking)
+(defvar calc-display-just)
+(defvar calc-display-origin)
+(defvar calc-number-radix)
+(defvar calc-leading-zeros)
+(defvar calc-group-digits)
+(defvar calc-group-char)
+(defvar calc-point-char)
+(defvar calc-frac-format)
+(defvar calc-prefer-frac)
+(defvar calc-hms-format)
+(defvar calc-date-format)
+(defvar calc-float-format)
+(defvar calc-full-float-format)
+(defvar calc-complex-format)
+(defvar calc-complex-mode)
+(defvar calc-infinite-mode)
+(defvar calc-display-strings)
+(defvar calc-matrix-just)
+(defvar calc-break-vectors)
+(defvar calc-full-vectors)
+(defvar calc-full-trail-vectors)
+(defvar calc-vector-commas)
+(defvar calc-vector-brackets)
+(defvar calc-matrix-brackets)
+(defvar calc-language)
+(defvar calc-language-option)
+(defvar calc-left-label)
+(defvar calc-right-label)
+(defvar calc-word-size)
+(defvar calc-previous-modulo)
+(defvar calc-simplify-mode)
+(defvar calc-auto-recompute)
+(defvar calc-display-raw)
+(defvar calc-internal-prec)
+(defvar calc-angle-mode)
+(defvar calc-algebraic-mode)
+(defvar calc-incomplete-algebraic-mode)
+(defvar calc-symbolic-mode)
+(defvar calc-matrix-mode)
+(defvar calc-shift-prefix)
+(defvar calc-window-height)
+(defvar calc-display-trail)
+(defvar calc-show-selections)
+(defvar calc-use-selections)
+(defvar calc-assoc-selections)
+(defvar calc-display-working-message)
+(defvar calc-auto-why)
+(defvar calc-timing)
+(defvar calc-mode-save-mode)
+(defvar calc-standard-date-formats)
+(defvar calc-autorange-units)
+(defvar calc-was-keypad-mode)
+(defvar calc-full-mode)
+(defvar calc-user-parse-tables)
+(defvar calc-gnuplot-default-device)
+(defvar calc-gnuplot-default-output)
+(defvar calc-gnuplot-print-device)
+(defvar calc-gnuplot-print-output)
+(defvar calc-gnuplot-geometry)
+(defvar calc-graph-default-resolution)
+(defvar calc-graph-default-resolution-3d)
+(defvar calc-invocation-macro)
+(defvar calc-show-banner)
+
+(defconst calc-mode-var-list '(
+  (calc-always-load-extensions nil
+   "If non-nil, load the calc-ext module automatically when calc is loaded.")
+
+  (calc-line-numbering t
+   "If non-nil, display line numbers in Calculator stack.")
+
+  (calc-line-breaking t
+   "If non-nil, break long values across multiple lines in Calculator stack.")
+
+  (calc-display-just nil
+   "If nil, stack display is left-justified.
 If `right', stack display is right-justified.
 If `center', stack display is centered.")
 
-(defvar calc-display-origin nil
-  "Horizontal origin of displayed stack entries.
+  (calc-display-origin nil
+   "Horizontal origin of displayed stack entries.
 In left-justified mode, this is effectively indentation.  (Default 0).
 In right-justified mode, this is effectively window width.
 In centered mode, center of stack entry is placed here.")
 
-(defvar calc-number-radix 10
-  "Radix for entry and display of numbers in calc-mode, 2-36.")
-
-(defvar calc-leading-zeros nil
-  "If non-nil, leading zeros are provided to pad integers to calc-word-size.")
-
-(defvar calc-group-digits nil
-  "If non-nil, group digits in large displayed integers by inserting spaces.
+  (calc-number-radix 10
+   "Radix for entry and display of numbers in calc-mode, 2-36.")
+
+  (calc-leading-zeros nil
+   "If non-nil, leading zeros are provided to pad integers to calc-word-size.")
+
+  (calc-group-digits nil
+   "If non-nil, group digits in large displayed integers by inserting spaces.
 If an integer, group that many digits at a time.
 If t, use 4 for binary and hex, 3 otherwise.")
 
-(defvar calc-group-char ","
-  "The character (in the form of a string) to be used for grouping digits.
+  (calc-group-char ","
+   "The character (in the form of a string) to be used for grouping digits.
 This is used only when calc-group-digits mode is on.")
 
-(defvar calc-point-char "."
-  "The character (in the form of a string) to be used as a decimal point.")
-
-(defvar calc-frac-format '(":" nil)
-  "Format of displayed fractions; a string of one or two of \":\" or \"/\".")
-
-(defvar calc-prefer-frac nil
-  "If non-nil, prefer fractional over floating-point results.")
-
-(defvar calc-hms-format "%s@ %s' %s\""
-  "Format of displayed hours-minutes-seconds angles, a format string.
+  (calc-point-char "."
+   "The character (in the form of a string) to be used as a decimal point.")
+  
+  (calc-frac-format (":" nil)
+   "Format of displayed fractions; a string of one or two of \":\" or \"/\".")
+
+  (calc-prefer-frac nil
+   "If non-nil, prefer fractional over floating-point results.")
+
+  (calc-hms-format "%s@ %s' %s\""
+   "Format of displayed hours-minutes-seconds angles, a format string.
 String must contain three %s marks for hours, minutes, seconds respectively.")
 
-(defvar calc-date-format '((H ":" mm C SS pp " ")
-			   Www " " Mmm " " D ", " YYYY)
-  "Format of displayed date forms.")
-
-(defvar calc-float-format '(float 0)
-  "Format to use for display of floating-point numbers in calc-mode.
+  (calc-date-format ((H ":" mm C SS pp " ")
+                     Www " " Mmm " " D ", " YYYY)
+   "Format of displayed date forms.")
+
+  (calc-float-format (float 0)
+   "Format to use for display of floating-point numbers in calc-mode.
 Must be a list of one of the following forms:
  (float 0)      Floating point format, display full precision.
  (float N)      N > 0: Floating point format, at most N significant figures.
@@ -323,54 +407,54 @@
  (eng N)        N > 0: Engineering notation, N significant figures.
  (eng -N)       -N < 0: Engineering notation, calc-internal-prec - N figs.")
 
-(defvar calc-full-float-format '(float 0)
-  "Format to use when full precision must be displayed.")
-
-(defvar calc-complex-format nil
-  "Format to use for display of complex numbers in calc-mode.  Must be one of:
+  (calc-full-float-format (float 0)
+   "Format to use when full precision must be displayed.")
+
+  (calc-complex-format nil
+   "Format to use for display of complex numbers in calc-mode.  Must be one of:
   nil            Use (x, y) form.
   i              Use x + yi form.
   j              Use x + yj form.")
 
-(defvar calc-complex-mode 'cplx
-  "Preferred form, either `cplx' or `polar', for complex numbers.")
-
-(defvar calc-infinite-mode nil
-  "If nil, 1 / 0 is left unsimplified.
+  (calc-complex-mode cplx
+   "Preferred form, either `cplx' or `polar', for complex numbers.")
+
+  (calc-infinite-mode nil
+   "If nil, 1 / 0 is left unsimplified.
 If 0, 1 / 0 is changed to inf (zeros are considered positive).
 Otherwise, 1 / 0 is changed to uinf (undirected infinity).")
 
-(defvar calc-display-strings nil
-  "If non-nil, display vectors of byte-sized integers as strings.")
-
-(defvar calc-matrix-just 'center
-  "If nil, vector elements are left-justified.
+  (calc-display-strings nil
+   "If non-nil, display vectors of byte-sized integers as strings.")
+
+  (calc-matrix-just 'center
+   "If nil, vector elements are left-justified.
 If `right', vector elements are right-justified.
 If `center', vector elements are centered.")
 
-(defvar calc-break-vectors nil
-  "If non-nil, display vectors one element per line.")
-
-(defvar calc-full-vectors t
-  "If non-nil, display long vectors in full.  If nil, use abbreviated form.")
-
-(defvar calc-full-trail-vectors t
-  "If non-nil, display long vectors in full in the trail.")
-
-(defvar calc-vector-commas ","
-  "If non-nil, separate elements of displayed vectors with this string.")
-
-(defvar calc-vector-brackets "[]"
-  "If non-nil, surround displayed vectors with these characters.")
-
-(defvar calc-matrix-brackets '(R O)
-  "A list of code-letter symbols that control \"big\" matrix display.
+  (calc-break-vectors nil
+   "If non-nil, display vectors one element per line.")
+
+  (calc-full-vectors t
+   "If non-nil, display long vectors in full.  If nil, use abbreviated form.")
+
+  (calc-full-trail-vectors t
+   "If non-nil, display long vectors in full in the trail.")
+
+  (calc-vector-commas ","
+   "If non-nil, separate elements of displayed vectors with this string.")
+
+  (calc-vector-brackets "[]"
+   "If non-nil, surround displayed vectors with these characters.")
+
+  (calc-matrix-brackets '(R O)
+   "A list of code-letter symbols that control \"big\" matrix display.
 If `R' is present, display inner brackets for matrices.
 If `O' is present, display outer brackets for matrices (above/below).
 If `C' is present, display outer brackets for matrices (centered).")
 
-(defvar calc-language nil
-  "Language or format for entry and display of stack values.  Must be one of:
+  (calc-language nil
+   "Language or format for entry and display of stack values.  Must be one of:
   nil		Use standard Calc notation.
   flat		Use standard Calc notation, one-line format.
   big		Display formulas in 2-d notation (enter w/std notation).
@@ -383,38 +467,23 @@
   math		Use Mathematica(tm) notation.
   maple		Use Maple notation.")
 
-(defvar calc-language-option nil
-  "Numeric prefix argument for the command that set `calc-language'.")
-
-(defvar calc-function-open "("
-  "Open-parenthesis string for function call notation.")
-
-(defvar calc-function-close ")"
-  "Close-parenthesis string for function call notation.")
-
-(defvar calc-language-output-filter nil
-  "Function through which to pass strings after formatting.")
-
-(defvar calc-language-input-filter nil
-  "Function through which to pass strings before parsing.")
-
-(defvar calc-radix-formatter nil
-  "Formatting function used for non-decimal numbers.")
-
-(defvar calc-left-label ""
-  "Label to display at left of formula.")
-
-(defvar calc-right-label ""
-  "Label to display at right of formula.")
-
-(defvar calc-word-size 32
-  "Minimum number of bits per word, if any, for binary operations in calc-mode.")
-
-(defvar calc-previous-modulo nil
-  "Most recently used value of M in a modulo form.")
-
-(defvar calc-simplify-mode nil
-  "Type of simplification applied to results.
+  (calc-language-option nil
+   "Numeric prefix argument for the command that set `calc-language'.")
+
+  (calc-left-label ""
+   "Label to display at left of formula.")
+
+  (calc-right-label ""
+   "Label to display at right of formula.")
+
+  (calc-word-size 32
+   "Minimum number of bits per word, if any, for binary operations in calc-mode.")
+
+  (calc-previous-modulo nil
+   "Most recently used value of M in a modulo form.")
+
+  (calc-simplify-mode nil
+   "Type of simplification applied to results.
 If `none', results are not simplified when pushed on the stack.
 If `num', functions are simplified only when args are constant.
 If nil, only fast simplifications are applied.
@@ -423,119 +492,112 @@
 If `ext', `math-simplify-extended' is applied.
 If `units', `math-simplify-units' is applied.")
 
-(defvar calc-auto-recompute t
-  "If non-nil, recompute evalto's automatically when necessary.")
-
-(defvar calc-display-raw nil
-  "If non-nil, display shows unformatted Lisp exprs.  (For debugging)")
-
-(defvar calc-internal-prec 12
-  "Number of digits of internal precision for calc-mode calculations.")
-
-(defvar calc-inverse-flag nil
-  "If non-nil, next operation is Inverse.")
-
-(defvar calc-hyperbolic-flag nil
-  "If non-nil, next operation is Hyperbolic.")
-
-(defvar calc-keep-args-flag nil
-  "If non-nil, next operation should not remove its arguments from stack.")
-
-(defvar calc-angle-mode 'deg
-  "If deg, angles are in degrees; if rad, angles are in radians.
+  (calc-auto-recompute t
+   "If non-nil, recompute evalto's automatically when necessary.")
+
+  (calc-display-raw nil
+   "If non-nil, display shows unformatted Lisp exprs.  (For debugging)")
+
+  (calc-internal-prec 12
+   "Number of digits of internal precision for calc-mode calculations.")
+
+  (calc-angle-mode deg
+   "If deg, angles are in degrees; if rad, angles are in radians.
 If hms, angles are in degrees-minutes-seconds.")
 
-(defvar calc-algebraic-mode nil
-  "If non-nil, numeric entry accepts whole algebraic expressions.
+  (calc-algebraic-mode nil
+   "If non-nil, numeric entry accepts whole algebraic expressions.
 If nil, algebraic expressions must be preceded by \"'\".")
 
-(defvar calc-incomplete-algebraic-mode nil
-  "Like calc-algebraic-mode except only affects ( and [ keys.")
-
-(defvar calc-symbolic-mode nil
-  "If non-nil, inexact numeric computations like sqrt(2) are postponed.
+  (calc-incomplete-algebraic-mode nil
+   "Like calc-algebraic-mode except only affects ( and [ keys.")
+
+  (calc-symbolic-mode nil
+   "If non-nil, inexact numeric computations like sqrt(2) are postponed.
 If nil, computations on numbers always yield numbers where possible.")
 
-(defvar calc-matrix-mode nil
-  "If `matrix', variables are assumed to be matrix-valued.
+  (calc-matrix-mode nil
+   "If `matrix', variables are assumed to be matrix-valued.
 If a number, variables are assumed to be NxN matrices.
 If `scalar', variables are assumed to be scalar-valued.
 If nil, symbolic math routines make no assumptions about variables.")
 
-(defvar calc-shift-prefix nil
-  "If non-nil, shifted letter keys are prefix keys rather than normal meanings.")
-
-(defvar calc-window-height 7
-  "Initial height of Calculator window.")
-
-(defvar calc-display-trail t
-  "If non-nil, M-x calc creates a window to display Calculator trail.")
-
-(defvar calc-show-selections t
-  "If non-nil, selected sub-formulas are shown by obscuring rest of formula.
+  (calc-shift-prefix nil
+   "If non-nil, shifted letter keys are prefix keys rather than normal meanings.")
+
+  (calc-window-height 7
+   "Initial height of Calculator window.")
+
+  (calc-display-trail t
+   "If non-nil, M-x calc creates a window to display Calculator trail.")
+
+  (calc-show-selections t
+   "If non-nil, selected sub-formulas are shown by obscuring rest of formula.
 If nil, selected sub-formulas are highlighted by obscuring the sub-formulas.")
 
-(defvar calc-use-selections t
-  "If non-nil, commands operate only on selected portions of formulas.
+  (calc-use-selections t
+   "If non-nil, commands operate only on selected portions of formulas.
 If nil, selections displayed but ignored.")
 
-(defvar calc-assoc-selections t
-  "If non-nil, selection hides deep structure of associative formulas.")
-
-(defvar calc-display-working-message 'lots
-  "If non-nil, display \"Working...\" for potentially slow Calculator commands.")
-
-(defvar calc-auto-why 'maybe
-  "If non-nil, automatically execute a \"why\" command to explain odd results.")
-
-(defvar calc-timing nil
-  "If non-nil, display timing information on each slow command.")
-
-(defvar calc-display-sci-high 0
-  "Floating-point numbers with this positive exponent or higher above the
-current precision are displayed in scientific notation in calc-mode.")
-
-(defvar calc-display-sci-low -3
-  "Floating-point numbers with this negative exponent or lower are displayed
-scientific notation in calc-mode.")
-
-
-(defvar calc-other-modes nil
-  "List of used-defined strings to append to Calculator mode line.")
-
-(defvar calc-Y-help-msgs nil
-  "List of strings for Y prefix help.")
-
-(defvar calc-loaded-settings-file nil
-  "t if `calc-settings-file' has been loaded yet.")
-
-
-
-(defvar calc-mode-save-mode 'local)
-(defvar calc-standard-date-formats
-  '("N"
-    "<H:mm:SSpp >Www Mmm D, YYYY"
-    "D Mmm YYYY<, h:mm:SS>"
-    "Www Mmm BD< hh:mm:ss> YYYY"
-    "M/D/Y< H:mm:SSpp>"
-    "D.M.Y< h:mm:SS>"
-    "M-D-Y< H:mm:SSpp>"
-    "D-M-Y< h:mm:SS>"
-    "j<, h:mm:SS>"
-    "YYddd< hh:mm:ss>"))
-(defvar calc-autorange-units nil)
-(defvar calc-was-keypad-mode nil)
-(defvar calc-full-mode nil)
-(defvar calc-user-parse-tables nil)
-(defvar calc-gnuplot-default-device "default")
-(defvar calc-gnuplot-default-output "STDOUT")
-(defvar calc-gnuplot-print-device "postscript")
-(defvar calc-gnuplot-print-output "auto")
-(defvar calc-gnuplot-geometry nil)
-(defvar calc-graph-default-resolution 15)
-(defvar calc-graph-default-resolution-3d 5)
-(defvar calc-invocation-macro nil)
-(defvar calc-show-banner t)
+  (calc-assoc-selections t
+   "If non-nil, selection hides deep structure of associative formulas.")
+
+  (calc-display-working-message 'lots
+   "If non-nil, display \"Working...\" for potentially slow Calculator commands.")
+
+  (calc-auto-why 'maybe
+   "If non-nil, automatically execute a \"why\" command to explain odd results.")
+
+  (calc-timing nil
+   "If non-nil, display timing information on each slow command.")
+
+  (calc-mode-save-mode local)
+
+  (calc-standard-date-formats
+   '("N"
+     "<H:mm:SSpp >Www Mmm D, YYYY"
+     "D Mmm YYYY<, h:mm:SS>"
+     "Www Mmm BD< hh:mm:ss> YYYY"
+     "M/D/Y< H:mm:SSpp>"
+     "D.M.Y< h:mm:SS>"
+     "M-D-Y< H:mm:SSpp>"
+     "D-M-Y< h:mm:SS>"
+     "j<, h:mm:SS>"
+     "YYddd< hh:mm:ss>"))
+
+  (calc-autorange-units nil)
+  
+  (calc-was-keypad-mode nil)
+  
+  (calc-full-mode nil)
+
+  (calc-user-parse-tables nil)
+
+  (calc-gnuplot-default-device "default")
+
+  (calc-gnuplot-default-output "STDOUT")
+
+  (calc-gnuplot-print-device "postscript")
+  
+  (calc-gnuplot-print-output "auto")
+
+  (calc-gnuplot-geometry nil)
+
+  (calc-graph-default-resolution 15)
+
+  (calc-graph-default-resolution-3d 5)
+  
+  (calc-invocation-macro nil)
+
+  (calc-show-banner t))
+  "List of variables (and default values) used in customizing GNU Calc.")
+
+(mapcar (function (lambda (v)
+                    (or (boundp (car v))
+                        (set (car v) (nth 1 v)))
+                    (if (nth 2 v)
+                        (put (car v) 'variable-documentation (nth 2 v)))))
+        calc-mode-var-list)
 
 (defconst calc-local-var-list '(calc-stack
 				calc-stack-top
@@ -666,9 +728,23 @@
 (defvar calc-trail-buffer nil)		; Pointer to Calc Trail buffer.
 (defvar calc-why nil)			; Explanations of most recent errors.
 (defvar calc-next-why nil)
-(defvar calc-inverse-flag nil)
-(defvar calc-hyperbolic-flag nil)
-(defvar calc-keep-args-flag nil)
+(defvar calc-inverse-flag nil
+  "If non-nil, next operation is Inverse.")
+(defvar calc-hyperbolic-flag nil
+  "If non-nil, next operation is Hyperbolic.")
+(defvar calc-keep-args-flag nil
+  "If non-nil, next operation should not remove its arguments from stack.")
+(defvar calc-function-open "("
+  "Open-parenthesis string for function call notation.")
+(defvar calc-function-close ")"
+  "Close-parenthesis string for function call notation.")
+(defvar calc-language-output-filter nil
+  "Function through which to pass strings after formatting.")
+(defvar calc-language-input-filter nil
+  "Function through which to pass strings before parsing.")
+(defvar calc-radix-formatter nil
+  "Formatting function used for non-decimal numbers.")
+
 (defvar calc-last-kill nil)		; Last number killed in calc-mode.
 (defvar calc-previous-alg-entry nil)	; Previous algebraic entry.
 (defvar calc-dollar-values nil)		; Values to be used for '$'.
@@ -982,7 +1058,7 @@
   (setq calc-stack-top (- (length calc-stack) calc-stack-top -1))
   (or calc-loaded-settings-file
       (null calc-settings-file)
-      (string-match "\\.emacs" calc-settings-file)
+      (equal calc-settings-file user-init-file)
       (progn
 	(setq calc-loaded-settings-file t)
 	(load calc-settings-file t)))   ; t = missing-ok
--- a/lisp/faces.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/faces.el	Thu Sep 16 13:09:53 2004 +0000
@@ -1954,11 +1954,13 @@
 
 
 (defface cursor '()
-  "Basic face for the cursor color under X."
+  "Basic face for the cursor color under X.
+Note: Other faces cannot inherit from the cursor face."
   :version "21.1"
   :group 'cursor
   :group 'basic-faces)
 
+(put 'cursor 'face-no-inherit t)
 
 (defface mouse '()
   "Basic face for the mouse color under X."
--- a/lisp/files.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/files.el	Thu Sep 16 13:09:53 2004 +0000
@@ -1771,6 +1771,7 @@
      ("\\.g\\'" . antlr-mode)
      ("\\.ses\\'" . ses-mode)
      ("\\.orig\\'" nil t)		; from patch
+     ("\\.\\(soa\\|zone\\)\\'" . dns-mode)
      ("\\.in\\'" nil t)))
   "Alist of filename patterns vs corresponding major mode functions.
 Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION NON-NIL).
--- a/lisp/generic.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/generic.el	Thu Sep 16 13:09:53 2004 +0000
@@ -405,10 +405,10 @@
 The regexp is highlighted with FACE."
   (unless (listp keywords-list)
     (error "Keywords argument must be a list of strings"))
-  (list (concat prefix "\\<"
+  (list (concat prefix "\\_<"
 		;; Use an optimized regexp.
 		(regexp-opt keywords-list t)
-		"\\>" suffix)
+		"\\_>" suffix)
 	1
 	face))
 
--- a/lisp/ibuf-ext.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/ibuf-ext.el	Thu Sep 16 13:09:53 2004 +0000
@@ -1015,7 +1015,10 @@
   "Toggle current view to buffers with filename matching QUALIFIER."
   (:description "filename"
    :reader (read-from-minibuffer "Filter by filename (regexp): "))
-  (ibuffer-awhen (buffer-file-name buf)
+  (ibuffer-awhen (with-current-buffer buf
+		   (or buffer-file-name
+		       (and (boundp 'dired-directory)
+			    dired-directory)))
     (string-match qualifier it)))
 
 ;;;###autoload (autoload 'ibuffer-filter-by-size-gt  "ibuf-ext.el")
--- a/lisp/novice.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/novice.el	Thu Sep 16 13:09:53 2004 +0000
@@ -44,7 +44,7 @@
 (defvaralias 'disabled-command-hook 'disabled-command-function)
 (make-obsolete-variable
  'disabled-command-hook
- "use the variable `disabled-command-function' instead." "21.4")
+ 'disabled-command-function "21.4")
 
 ;;;###autoload
 (defun disabled-command-function (&rest ignore)
@@ -93,7 +93,7 @@
      (message "Type y, n, ! or SPC (the space bar): ")
      (let ((cursor-in-echo-area t))
        (while (not (memq (setq char (downcase (read-char)))
-			 '(?! ?  ?y ?n)))
+			 '(?! ?y ?n ?\ )))
 	 (ding)
 	 (message "Please type y, n, ! or SPC (the space bar): "))))
     (if (= char ?!)
@@ -185,5 +185,5 @@
 
 (provide 'novice)
 
-;;; arch-tag: f83c0f96-497e-4db6-a430-8703716c6dd9
+;; arch-tag: f83c0f96-497e-4db6-a430-8703716c6dd9
 ;;; novice.el ends here
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/textmodes/dns-mode.el	Thu Sep 16 13:09:53 2004 +0000
@@ -0,0 +1,198 @@
+;;; dns-mode.el --- a mode for viewing/editing Domain Name System master files
+;; Copyright (c) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <simon@josefsson.org>
+;; Keywords: DNS master zone file SOA
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Use M-x dns-mode RET to invoke in master files.
+;;
+;; C-c C-s  Increment SOA serial.
+;;          Understands YYYYMMDDNN, Unix time, and serial number formats,
+;;          and complains if it fail to find SOA serial.
+;;
+;; Put something similar to the following in your ~/.emacs to use this file:
+;;
+;; (load "~/path/to/dns-mode.el")
+;; (setq auto-mode-alist (cons '("\\.soa\\'" . dns-mode) auto-mode-alist))
+
+;;; References:
+
+;; RFC 1034, "DOMAIN NAMES - CONCEPTS AND FACILITIES", P. Mockapetris.
+;; RFC 1035, "DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION", P. Mockapetris.
+
+;;; Release history:
+
+;; 2004-09-11  Posted on gnu.emacs.sources.
+;; 2004-09-13  Ported to XEmacs.
+;; 2004-09-14  Installed in Emacs CVS.
+
+;;; Code:
+
+(defgroup dns-mode nil
+  "DNS master file mode configuration.")
+
+(defconst dns-mode-classes '("IN" "CS" "CH" "HS")
+  "List of strings with known DNS classes.")
+
+(defconst dns-mode-types '("A" "NS" "MD" "MF" "CNAME" "SOA" "MB" "MG" "MR"
+			   "NULL" "WKS" "PTR" "HINFO" "MINFO" "MX" "TXT"
+			   "RP" "AFSDB" "X25" "ISDN" "RT" "NSAP" "NSAP"
+			   "SIG" "KEY" "PX" "GPOS" "AAAA" "LOC" "NXT"
+			   "EID" "NIMLOC" "SRV" "ATMA" "NAPTR" "KX" "CERT"
+			   "A6" "DNAME" "SINK" "OPT" "APL" "DS" "SSHFP"
+			   "RRSIG" "NSEC" "DNSKEY" "UINFO" "UID" "GID"
+			   "UNSPEC" "TKEY" "TSIG" "IXFR" "AXFR" "MAILB"
+			   "MAILA")
+  "List of strings with known DNS types.")
+
+;; Font lock.
+
+(defvar dns-mode-control-entity-face 'font-lock-keyword-face
+  "Name of face used for control entities, e.g. $ORIGIN.")
+
+(defvar dns-mode-bad-control-entity-face 'font-lock-warning-face
+  "Name of face used for non-standard control entities, e.g. $FOO.")
+
+(defvar dns-mode-type-face 'font-lock-type-face
+  "Name of face used for DNS types, e.g., SOA.")
+
+(defvar dns-mode-class-face 'font-lock-constant-face
+  "Name of face used for DNS classes, e.g., IN.")
+
+(defcustom dns-mode-font-lock-keywords
+  `(("^$ORIGIN" 0 ,dns-mode-control-entity-face)
+    ("^$INCLUDE" 0 ,dns-mode-control-entity-face)
+    ("^$[a-z0-9A-Z]+" 0 ,dns-mode-bad-control-entity-face)
+    (,(regexp-opt dns-mode-classes) 0 ,dns-mode-class-face)
+    (,(regexp-opt dns-mode-types) 0 ,dns-mode-type-face))
+  "Font lock keywords used to highlight text in DNS master file mode."
+  :type 'sexp
+  :group 'dns-mode)
+
+;; Syntax table.
+
+(defvar dns-mode-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?\; "<   " table)
+    (modify-syntax-entry ?\n ">   " table)
+    table)
+  "Syntax table in use in DNS master file buffers.")
+
+;; Keymap.
+
+(defvar dns-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "\C-c\C-s" 'dns-mode-soa-increment-serial)
+    map)
+  "Keymap for DNS master file mode.")
+
+;; Menu.
+
+(defvar dns-mode-menu nil
+  "Menubar used in DNS master file mode.")
+
+(easy-menu-define dns-mode-menu dns-mode-map
+  "DNS Menu."
+  '("DNS"
+    ["Increment SOA serial" dns-mode-soa-increment-serial t]))
+
+;; Mode.
+
+;;;###autoload
+(define-derived-mode dns-mode text-mode "DNS"
+  "Major mode for viewing and editing DNS master files.
+This mode is inherited from text mode.  It add syntax
+highlighting, and some commands for handling DNS master files.
+Its keymap inherits from `text-mode' and it has the same
+variables for customizing indentation.  It has its own abbrev
+table and its own syntax table.
+
+Turning on DNS mode runs `dns-mode-hook'."
+  (set (make-local-variable 'comment-start) ";")
+  (set (make-local-variable 'comment-end) "")
+  (set (make-local-variable 'comment-start-skip) ";+ *")
+  (unless (featurep 'xemacs)
+    (set (make-local-variable 'font-lock-defaults)
+	 '(dns-mode-font-lock-keywords nil nil ((?_ . "w")))))
+  (easy-menu-add dns-mode-menu dns-mode-map))
+
+;; Tools.
+
+;;;###autoload
+(defun dns-mode-soa-increment-serial ()
+  "Locate SOA record and increment the serial field."
+  (interactive)
+  (save-excursion
+    (goto-char (point-min))
+    (unless (re-search-forward
+	     (concat "^\\(\\(\\([^ \t]+[ \t]+\\)?[^ \t]+"
+		     "[ \t]+\\)?[^ \t]+[ \t]+\\)?SOA") nil t)
+      (error "Cannot locate SOA record"))
+    (if (re-search-forward (concat "\\<\\("
+				   ;; year
+				   "\\(198\\|199\\|20[0-9]\\)[0-9]"
+				   ;; month
+				   "\\(0[0-9]\\|10\\|11\\|12\\)"
+				   ;; day
+				   "\\([012][0-9]\\|30\\|31\\)"
+				   ;; counter
+				   "\\([0-9]\\{1,3\\}\\)"
+				   "\\)\\>")
+			   nil t)
+	;; YYYYMMDDIII format, one to three I's.
+	(let* ((serial (match-string 1))
+	       (counterstr (match-string 5))
+	       (counter (string-to-number counterstr))
+	       (now (format-time-string "%Y%m%d"))
+	       (nowandoldserial (concat now counterstr)))
+	  (if (string< serial nowandoldserial)
+	      (let ((new (format "%s00" now)))
+		(replace-match new nil nil nil 1)
+		(message "Replaced old serial %s with %s" serial new))
+	    (if (string= serial nowandoldserial)
+		(let ((new (format (format "%%s%%0%dd" (length counterstr))
+				   now (1+ counter))))
+		  (replace-match new nil nil nil 1)
+		  (message "Replaced old serial %s with %s" serial new))
+	      (error "Current SOA serial is in the future"))))
+      (if (re-search-forward "\\<\\([0-9]\\{9,10\\}\\)\\>" nil t)
+	  ;; Unix time
+	  (let* ((serial (match-string 1))
+		 (new (format-time-string "%s")))
+	    (if (not (string< serial new))
+		(error "Current SOA serial is in the future")
+	      (replace-match new nil nil nil 1)
+	      (message "Replaced old serial %s with %s" serial new)))
+	(if (re-search-forward "\\<\\([0-9]+\\)\\>" nil t)
+	    ;; Just any serial number.
+	    (let* ((serial (match-string 1))
+		   (new (format "%d" (1+ (string-to-number serial)))))
+	      (replace-match new nil nil nil 1)
+	      (message "Replaced old serial %s with %s" serial new))
+	  (error "Cannot locate serial number in SOA record"))))))
+
+;;;###autoload(add-to-list 'auto-mode-alist '("\\.soa\\'" . dns-mode))
+
+(provide 'dns-mode)
+
+;; arch-tag: 6a179f0a-072f-49db-8b01-37b8f23998c0
+;;; dns-mode.el ends here
--- a/lisp/vc-arch.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/vc-arch.el	Thu Sep 16 13:09:53 2004 +0000
@@ -73,18 +73,10 @@
 (put 'Arch 'vc-functions nil)
 
 ;;;###autoload (defun vc-arch-registered (file)
-;;;###autoload   (let ((dir file))
-;;;###autoload     (while (and (stringp dir)
-;;;###autoload                 (not (equal
-;;;###autoload                       dir (setq dir (file-name-directory dir))))
-;;;###autoload                 dir)
-;;;###autoload       (setq dir (if (file-directory-p
-;;;###autoload                      (expand-file-name "{arch}" dir))
-;;;###autoload                     t (directory-file-name dir))))
-;;;###autoload     (if (eq dir t)
-;;;###autoload          (progn
-;;;###autoload           (load "vc-arch")
-;;;###autoload           (vc-arch-registered file)))))
+;;;###autoload   (if (vc-find-root file "{arch}/=tagging-method")
+;;;###autoload       (progn
+;;;###autoload         (load "vc-arch")
+;;;###autoload         (vc-arch-registered file))))
 
 (defun vc-arch-add-tagline ()
   "Add an `arch-tag' to the end of the current file."
@@ -186,18 +178,10 @@
 (defun vc-arch-root (file)
   "Return the root directory of a Arch project, if any."
   (or (vc-file-getprop file 'arch-root)
-      (vc-file-setprop
-       file 'arch-root
-       (let ((root nil))
-	 (while (not (or root
-			 (equal file (setq file (file-name-directory file)))
-			 (null file)))
-	   ;; Check the =tagging-method, in case someone naively manually
-	   ;; creates a {arch} directory somewhere.
-	   (if (file-exists-p (expand-file-name "{arch}/=tagging-method" file))
-	       (setq root file)
-	     (setq file (directory-file-name file))))
-	 root))))
+      (vc-file-setprop 
+       ;; Check the =tagging-method, in case someone naively manually
+       ;; creates a {arch} directory somewhere.
+       file 'arch-root (vc-find-root file "{arch}/=tagging-method"))))
 
 (defun vc-arch-register (file &optional rev comment)
   (if rev (error "Explicit initial revision not supported for Arch"))
--- a/lisp/vc-mcvs.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/vc-mcvs.el	Thu Sep 16 13:09:53 2004 +0000
@@ -1,6 +1,7 @@
 ;;; vc-mcvs.el --- VC backend for the Meta-CVS version-control system
 
-;; Copyright (C) 1995,98,99,2000,01,02,03,2004  Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+;;           Free Software Foundation, Inc.
 
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Stefan Monnier <monnier@gnu.org>
@@ -114,32 +115,15 @@
 ;;;
 
 ;;;###autoload (defun vc-mcvs-registered (file)
-;;;###autoload   (let ((dir file))
-;;;###autoload     (while (and (stringp dir)
-;;;###autoload                 (not (equal
-;;;###autoload                       dir (setq dir (file-name-directory dir))))
-;;;###autoload                 dir)
-;;;###autoload       (setq dir (if (file-directory-p
-;;;###autoload                      (expand-file-name "MCVS/CVS" dir))
-;;;###autoload                     t (directory-file-name dir))))
-;;;###autoload     (if (eq dir t)
-;;;###autoload          (progn
-;;;###autoload           (load "vc-mcvs")
-;;;###autoload           (vc-mcvs-registered file)))))
+;;;###autoload   (if (vc-find-root file "MCVS/CVS")
+;;;###autoload       (progn
+;;;###autoload         (load "vc-mcvs")
+;;;###autoload         (vc-mcvs-registered file))))
 
 (defun vc-mcvs-root (file)
   "Return the root directory of a Meta-CVS project, if any."
   (or (vc-file-getprop file 'mcvs-root)
-      (vc-file-setprop
-       file 'mcvs-root
-       (let ((root nil))
-	 (while (not (or root
-			 (equal file (setq file (file-name-directory file)))
-			 (null file)))
-	   (if (file-directory-p (expand-file-name "MCVS/CVS" file))
-	       (setq root file)
-	     (setq file (directory-file-name file))))
-	 root))))
+      (vc-file-setprop file 'mcvs-root (vc-find-root file "MCVS/CVS"))))
 
 (defun vc-mcvs-read (file)
   (if (file-readable-p file)
@@ -608,5 +592,5 @@
 
 (provide 'vc-mcvs)
 
-;;; arch-tag: a39c7c1c-5247-429d-88df-dd7187d2e704
+;; arch-tag: a39c7c1c-5247-429d-88df-dd7187d2e704
 ;;; vc-mcvs.el ends here
--- a/lisp/vc.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/vc.el	Thu Sep 16 13:09:53 2004 +0000
@@ -338,7 +338,8 @@
 ;;   in the buffer.  You can safely assume that point is placed at the
 ;;   beginning of each line, starting at `point-min'.  The buffer that
 ;;   point is placed in is the Annotate output, as defined by the
-;;   relevant backend.
+;;   relevant backend.  This function also affects how much of the line
+;;   is fontified; where it leaves point is where fontification begins.
 ;;
 ;; - annotate-current-time ()
 ;;
@@ -2896,7 +2897,7 @@
   (message "Redisplaying annotation...done"))
 
 (defun vc-annotate-display-autoscale (&optional full)
-  "Highlight the output of \\[vc-annotate]] using an autoscaled color map.
+  "Highlight the output of \\[vc-annotate] using an autoscaled color map.
 Autoscaling means that the map is scaled from the current time to the
 oldest annotation in the buffer, or, with argument FULL non-nil, to
 cover the range from the oldest annotation to the newest."
--- a/lisp/windmove.el	Mon Sep 13 20:39:27 2004 +0000
+++ b/lisp/windmove.el	Thu Sep 16 13:09:53 2004 +0000
@@ -324,11 +324,11 @@
   (let* ((frame (if window
 		    (window-frame window)
 		  (selected-frame)))
-	 (top-left (window-inside-edges (frame-first-window frame)))
+	 (top-left (window-edges (frame-first-window frame)))
 	 (x-min (nth 0 top-left))
 	 (y-min (nth 1 top-left))
-	 (x-max (+ x-min (frame-width frame) -1)) ; 1- for last row & col
-	 (y-max (+ x-max (frame-height frame) -1)))
+	 (x-max (1- (frame-width frame))) ; 1- for last row & col
+	 (y-max (1- (frame-height frame))))
     (list x-min y-min x-max y-max)))
 
 ;; it turns out that constraining is always a good thing, even when
@@ -406,7 +406,7 @@
 
 
 ;; `windmove-coordinates-of-position' is stolen and modified from the
-;; Emacs Lisp Reference Manual, section 27.2.5.  It seems to work
+;; Emacs 20 Lisp Reference Manual, section 27.2.5.  It seems to work
 ;; okay, although I am bothered by the fact that tab-offset (the cdr
 ;; of the next-to- last argument) is set to 0.  On the other hand, I
 ;; can't find a single usage of `compute-motion' anywhere that doesn't
@@ -418,28 +418,43 @@
 ;; the number that `window-width' gives, or continuation lines aren't
 ;; counted correctly.  I haven't seen anyone doing this before,
 ;; though.
-(defun windmove-coordinates-of-position (pos &optional window)
-  "Return the coordinates of position POS in window WINDOW.
+;;
+;; Now updated for Emacs 21, based on the Emacs 21 Lisp Reference
+;; Manual, section 30.2.5.  It is no longer necessary to subtract
+;; 1 for the usable width of the window.
+;; TODO: also handle minibuffer case, w/ `minibuffer-prompt-width'.
+(defun windmove-coordinates-of-position (pos)
+  "Return the coordinates of position POS in the current window.
 Return the window-based coodinates in a cons pair: (HPOS . VPOS),
 where HPOS and VPOS are the zero-based x and y components of the
-screen location of POS.  If WINDOW is nil, return the coordinates in
-the currently selected window.
+screen location of POS.
 As an example, if point is in the top left corner of a window, then
 the return value from `windmove-coordinates-of-position' is (0 . 0)
 regardless of the where point is in the buffer and where the window
 is placed in the frame."
-  (let* ((wind (if (null window) (selected-window) window))
-         (big-hairy-result (compute-motion
-                            (window-start)
-                            '(0 . 0)
-                            pos
-                            nil ; (window-width window-height)
-                            nil ; window-width
-                            (cons (window-hscroll)
-                                  0)    ; why zero?
-                            wind)))
-    (cons (nth 1 big-hairy-result)      ; hpos, not vpos as documented
-          (nth 2 big-hairy-result))))   ; vpos, not hpos as documented
+  (let ((big-hairy-result (compute-motion
+                           (window-start)
+                           '(0 . 0)
+                           pos
+                           nil ; (window-width window-height)
+                           nil ; window-width
+                           (cons (window-hscroll)
+                                 0)  ; why zero?
+                           (selected-window))))
+  (cons (nth 1 big-hairy-result)        ; hpos, not vpos as documented
+        (nth 2 big-hairy-result))))     ; vpos, not hpos as documented
+
+(defun windmove-coordinates-of-window-position (pos &optional window)
+  "Return the coordinates of position POS in WINDOW.
+Return the window-based coodinates in a cons pair: (HPOS . VPOS),
+where HPOS and VPOS are the zero-based x and y components of the
+screen location of POS.  If WINDOW is nil, return the coordinates in
+the currently selected window."
+  (if (null window)
+      (windmove-coordinates-of-position pos)
+    (save-selected-window
+      (select-window window)
+      (windmove-coordinates-of-position pos))))
 
 ;; This calculates the reference location in the current window: the
 ;; frame-based (x . y) of either point, the top-left, or the
@@ -467,8 +482,9 @@
        ((= effective-arg 0)
           (windmove-coord-add
              top-left
-             (windmove-coordinates-of-position (window-point window)
-                                               window)))))))
+             (windmove-coordinates-of-window-position
+              (window-point window)
+              window)))))))
 
 ;; This uses the reference location in the current window (calculated
 ;; by `windmove-reference-loc' above) to find a reference location
@@ -491,13 +507,13 @@
             (- (nth 1 edges)
                windmove-window-distance-delta))) ; (x, y0-d)
      ((eq dir 'right)
-      (cons (+ (nth 2 edges)
+      (cons (+ (1- (nth 2 edges))	; -1 to get actual max x
                windmove-window-distance-delta)
-            (cdr refpoint)))            ; (x1+d, y)
-     ((eq dir 'down)
+            (cdr refpoint)))            ; (x1+d-1, y)
+     ((eq dir 'down)			; -1 to get actual max y
       (cons (car refpoint)
-            (+ (nth 3 edges)
-               windmove-window-distance-delta))) ; (x, y1+d)
+            (+ (1- (nth 3 edges))
+               windmove-window-distance-delta))) ; (x, y1+d-1)
      (t (error "Invalid direction of movement: %s" dir)))))
 
 (defun windmove-find-other-window (dir &optional arg window)
--- a/man/maintaining.texi	Mon Sep 13 20:39:27 2004 +0000
+++ b/man/maintaining.texi	Thu Sep 16 13:09:53 2004 +0000
@@ -445,7 +445,8 @@
 directory where the tags file was initially written.  This way, you can
 move an entire directory tree containing both the tags file and the
 source files, and the tags file will still refer correctly to the source
-files.
+files.  If the tags file is in @file{/dev}, however, the file names are
+made relative to the current working directory.
 
   If you specify absolute file names as arguments to @code{etags}, then
 the tags file will contain absolute file names.  This way, the tags file
--- a/src/ChangeLog	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/ChangeLog	Thu Sep 16 13:09:53 2004 +0000
@@ -1,3 +1,27 @@
+2004-09-14  Stefan  <monnier@iro.umontreal.ca>
+
+	* fileio.c (Finsert_file_contents): Fix case of replacement in a
+	narrowed buffer.
+
+2004-09-14  Kim F. Storm  <storm@cua.dk>
+
+	* puresize.h (PURESIZE_RATIO): Define based on BITS_PER_EMACS_INT.
+
+	* xfaces.c (Qface_no_inherit): New var.
+	(syms_of_xfaces): Intern and staticpro it.
+	(Finternal_make_lisp_face, Finternal_set_lisp_face_attribute)
+	(Finternal_copy_lisp_face, update_face_from_frame_parameter):
+	Don't increment face_change_count when face has non-nil
+	face-no-inherit property.
+
+2004-09-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* bytecode.c (BYTE_CODE_QUIT): Add missing AFTER_POTENTIAL_GC.
+	(Fbyte_code): Remove dead code after `wrong_type_argument'.
+
+	* alloc.c (Fgarbage_collect): Mark keyboards, gtk data, and specpdl
+	before doing the mark_stack_check_gcpros since they are not on the stack.
+
 2004-09-12  Kim F. Storm  <storm@cua.dk>
 
 	* editfns.c (Fformat): Handle format strings with multiple text
@@ -12504,7 +12528,7 @@
 
 2002-02-15  Andreas Schwab  <schwab@suse.de>
 
-	* puresize.h (BASE_PURESIZE): Increase to 9/5.
+	* puresize.h (PURESIZE_RATIO): Increase to 9/5.
 
 	* alloc.c (NSTATICS): Increase to 1280.
 
--- a/src/alloc.c	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/alloc.c	Thu Sep 16 13:09:53 2004 +0000
@@ -1,6 +1,6 @@
 /* Storage allocation and gc for GNU Emacs Lisp interpreter.
-   Copyright (C) 1985,86,88,93,94,95,97,98,1999,2000,01,02,03,2004
-      Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999,
+      2000, 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -4455,6 +4455,21 @@
   for (i = 0; i < staticidx; i++)
     mark_object (*staticvec[i]);
 
+  for (bind = specpdl; bind != specpdl_ptr; bind++)
+    {
+      mark_object (bind->symbol);
+      mark_object (bind->old_value);
+    }
+  mark_kboards ();
+  mark_ttys ();
+
+#ifdef USE_GTK
+  {
+    extern void xg_mark_data ();
+    xg_mark_data ();
+  }
+#endif
+
 #if (GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS \
      || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
   mark_stack ();
@@ -4468,11 +4483,6 @@
 #endif
 
   mark_byte_stack ();
-  for (bind = specpdl; bind != specpdl_ptr; bind++)
-    {
-      mark_object (bind->symbol);
-      mark_object (bind->old_value);
-    }
   for (catch = catchlist; catch; catch = catch->next)
     {
       mark_object (catch->tag);
@@ -4484,20 +4494,11 @@
       mark_object (handler->var);
     }
   mark_backtrace ();
-  mark_kboards ();
-  mark_ttys ();
 
 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
   mark_stack ();
 #endif
 
-#ifdef USE_GTK
-  {
-    extern void xg_mark_data ();
-    xg_mark_data ();
-  }
-#endif
-
   /* Everything is now marked, except for the things that require special
      finalization, i.e. the undo_list.
      Look thru every buffer's undo list
--- a/src/bytecode.c	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/bytecode.c	Thu Sep 16 13:09:53 2004 +0000
@@ -1,5 +1,5 @@
 /* Execution of byte code produced by bytecomp.el.
-   Copyright (C) 1985, 1986, 1987, 1988, 1993, 2000, 2001, 2002, 2003
+   Copyright (C) 1985, 1986, 1987, 1988, 1993, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -387,6 +387,7 @@
 	Vquit_flag = Qnil;				\
         BEFORE_POTENTIAL_GC ();				\
 	Fsignal (Qquit, Qnil);				\
+	AFTER_POTENTIAL_GC ();				\
       }							\
   } while (0)
 
@@ -539,9 +540,7 @@
 	      TOP = Qnil;
 	    else
 	      {
-		BEFORE_POTENTIAL_GC ();
-		Fcar (wrong_type_argument (Qlistp, v1));
-		AFTER_POTENTIAL_GC ();
+		wrong_type_argument (Qlistp, v1);
 	      }
 	    break;
 	  }
@@ -574,9 +573,7 @@
 	      TOP = Qnil;
 	    else
 	      {
-		BEFORE_POTENTIAL_GC ();
-		Fcdr (wrong_type_argument (Qlistp, v1));
-		AFTER_POTENTIAL_GC ();
+		wrong_type_argument (Qlistp, v1);
 	      }
 	    break;
 	  }
@@ -907,11 +904,7 @@
 		else if (!NILP (v1))
 		  {
 		    immediate_quit = 0;
-		    BEFORE_POTENTIAL_GC ();
-		    v1 = wrong_type_argument (Qlistp, v1);
-		    AFTER_POTENTIAL_GC ();
-		    immediate_quit = 1;
-		    op++;
+		    wrong_type_argument (Qlistp, v1);
 		  }
 	      }
 	    immediate_quit = 0;
@@ -920,11 +913,7 @@
 	    else if (NILP (v1))
 	      TOP = Qnil;
 	    else
-	      {
-		BEFORE_POTENTIAL_GC ();
-		Fcar (wrong_type_argument (Qlistp, v1));
-		AFTER_POTENTIAL_GC ();
-	      }
+	      wrong_type_argument (Qlistp, v1);
 	    break;
 	  }
 
@@ -1554,11 +1543,7 @@
 		    else if (!NILP (v1))
 		      {
 			immediate_quit = 0;
-			BEFORE_POTENTIAL_GC ();
-			v1 = wrong_type_argument (Qlistp, v1);
-			AFTER_POTENTIAL_GC ();
-			immediate_quit = 1;
-			op++;
+			wrong_type_argument (Qlistp, v1);
 		      }
 		  }
 		immediate_quit = 0;
@@ -1567,11 +1552,7 @@
 		else if (NILP (v1))
 		  TOP = Qnil;
 		else
-		  {
-		    BEFORE_POTENTIAL_GC ();
-		    Fcar (wrong_type_argument (Qlistp, v1));
-		    AFTER_POTENTIAL_GC ();
-		  }
+		  wrong_type_argument (Qlistp, v1);
 	      }
 	    else
 	      {
--- a/src/fileio.c	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/fileio.c	Thu Sep 16 13:09:53 2004 +0000
@@ -1,6 +1,6 @@
 /* File IO for GNU Emacs.
-   Copyright (C) 1985,86,87,88,93,94,95,96,97,98,99,2000,01,03,2004
-     Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998,
+     1999, 2000, 2001, 2003, 2004  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -4329,7 +4329,7 @@
       /* Replace the chars that we need to replace,
 	 and update INSERTED to equal the number of bytes
 	 we are taking from the file.  */
-      inserted -= (Z_BYTE - same_at_end) + (same_at_start - BEG_BYTE);
+      inserted -= (ZV_BYTE - same_at_end) + (same_at_start - BEGV_BYTE);
 
       if (same_at_end != same_at_start)
 	{
@@ -4343,7 +4343,7 @@
 	}
       /* Insert from the file at the proper position.  */
       SET_PT_BOTH (temp, same_at_start);
-      insert_1 (conversion_buffer + same_at_start - BEG_BYTE, inserted,
+      insert_1 (conversion_buffer + same_at_start - BEGV_BYTE, inserted,
 		0, 0, 0);
       if (coding.cmp_data && coding.cmp_data->used)
 	coding_restore_composition (&coding, Fcurrent_buffer ());
--- a/src/puresize.h	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/puresize.h	Thu Sep 16 13:09:53 2004 +0000
@@ -47,7 +47,7 @@
 
 /* Increase BASE_PURESIZE by a ratio depending on the machine's word size.  */
 #ifndef PURESIZE_RATIO
-#if VALBITS + GCTYPEBITS + 1 > 32
+#if BITS_PER_EMACS_INT > 32
 #define PURESIZE_RATIO 9/5	/* Don't surround with `()'. */
 #else
 #define PURESIZE_RATIO 1
--- a/src/xfaces.c	Mon Sep 13 20:39:27 2004 +0000
+++ b/src/xfaces.c	Thu Sep 16 13:09:53 2004 +0000
@@ -388,6 +388,10 @@
 Lisp_Object Qface;
 extern Lisp_Object Qmouse_face;
 
+/* Property for basic faces which other faces cannot inherit.  */
+
+Lisp_Object Qface_no_inherit;
+
 /* Error symbol for wrong_type_argument in load_pixmap.  */
 
 Lisp_Object Qbitmap_spec_p;
@@ -3868,8 +3872,11 @@
      depend on the face, make sure they are all removed.  This is done
      by incrementing face_change_count.  The next call to
      init_iterator will then free realized faces.  */
-  ++face_change_count;
-  ++windows_or_buffers_changed;
+  if (NILP (Fget (face, Qface_no_inherit)))
+    {
+      ++face_change_count;
+      ++windows_or_buffers_changed;
+    }
 
   xassert (LFACEP (lface));
   check_lface (lface);
@@ -3944,8 +3951,11 @@
      depend on the face, make sure they are all removed.  This is done
      by incrementing face_change_count.  The next call to
      init_iterator will then free realized faces.  */
-  ++face_change_count;
-  ++windows_or_buffers_changed;
+  if (NILP (Fget (to, Qface_no_inherit)))
+    {
+      ++face_change_count;
+      ++windows_or_buffers_changed;
+    }
 
   return to;
 }
@@ -4302,6 +4312,7 @@
      by incrementing face_change_count.  The next call to
      init_iterator will then free realized faces.  */
   if (!EQ (frame, Qt)
+      && NILP (Fget (face, Qface_no_inherit))
       && (EQ (attr, QCfont)
 	  || NILP (Fequal (old_value, value))))
     {
@@ -4454,6 +4465,7 @@
      struct frame *f;
      Lisp_Object param, new_value;
 {
+  Lisp_Object face = Qnil;
   Lisp_Object lface;
 
   /* If there are no faces yet, give up.  This is the case when called
@@ -4462,17 +4474,10 @@
   if (NILP (f->face_alist))
     return;
 
-  /* Changing a named face means that all realized faces depending on
-     that face are invalid.  Since we cannot tell which realized faces
-     depend on the face, make sure they are all removed.  This is done
-     by incrementing face_change_count.  The next call to
-     init_iterator will then free realized faces.  */
-  ++face_change_count;
-  ++windows_or_buffers_changed;
-
   if (EQ (param, Qforeground_color))
     {
-      lface = lface_from_face_name (f, Qdefault, 1);
+      face = Qdefault;
+      lface = lface_from_face_name (f, face, 1);
       LFACE_FOREGROUND (lface) = (STRINGP (new_value)
 				  ? new_value : Qunspecified);
       realize_basic_faces (f);
@@ -4487,29 +4492,45 @@
       XSETFRAME (frame, f);
       call1 (Qframe_update_face_colors, frame);
 
-      lface = lface_from_face_name (f, Qdefault, 1);
+      face = Qdefault;
+      lface = lface_from_face_name (f, face, 1);
       LFACE_BACKGROUND (lface) = (STRINGP (new_value)
 				  ? new_value : Qunspecified);
       realize_basic_faces (f);
     }
-  if (EQ (param, Qborder_color))
-    {
-      lface = lface_from_face_name (f, Qborder, 1);
+  else if (EQ (param, Qborder_color))
+    {
+      face = Qborder;
+      lface = lface_from_face_name (f, face, 1);
       LFACE_BACKGROUND (lface) = (STRINGP (new_value)
 				  ? new_value : Qunspecified);
     }
   else if (EQ (param, Qcursor_color))
     {
-      lface = lface_from_face_name (f, Qcursor, 1);
+      face = Qcursor;
+      lface = lface_from_face_name (f, face, 1);
       LFACE_BACKGROUND (lface) = (STRINGP (new_value)
 				  ? new_value : Qunspecified);
     }
   else if (EQ (param, Qmouse_color))
     {
-      lface = lface_from_face_name (f, Qmouse, 1);
+      face = Qmouse;
+      lface = lface_from_face_name (f, face, 1);
       LFACE_BACKGROUND (lface) = (STRINGP (new_value)
 				  ? new_value : Qunspecified);
     }
+
+  /* Changing a named face means that all realized faces depending on
+     that face are invalid.  Since we cannot tell which realized faces
+     depend on the face, make sure they are all removed.  This is done
+     by incrementing face_change_count.  The next call to
+     init_iterator will then free realized faces.  */
+  if (!NILP (face)
+      && NILP (Fget (face, Qface_no_inherit)))
+    {
+      ++face_change_count;
+      ++windows_or_buffers_changed;
+    }
 }
 
 
@@ -7767,6 +7788,8 @@
 {
   Qface = intern ("face");
   staticpro (&Qface);
+  Qface_no_inherit = intern ("face-no-inherit");
+  staticpro (&Qface_no_inherit);
   Qbitmap_spec_p = intern ("bitmap-spec-p");
   staticpro (&Qbitmap_spec_p);
   Qframe_update_face_colors = intern ("frame-update-face-colors");