]> git.eshelyaron.com Git - emacs.git/commitdiff
Merge from trunk
authorMartin Rudalics <rudalics@gmx.at>
Tue, 17 May 2011 15:28:55 +0000 (17:28 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Tue, 17 May 2011 15:28:55 +0000 (17:28 +0200)
60 files changed:
1  2 
doc/lispref/ChangeLog
doc/lispref/display.texi
doc/lispref/elisp.texi
doc/lispref/frames.texi
lisp/ChangeLog
lisp/apropos.el
lisp/bindings.el
lisp/bookmark.el
lisp/buff-menu.el
lisp/calendar/calendar.el
lisp/calendar/solar.el
lisp/cmuscheme.el
lisp/cus-edit.el
lisp/cus-start.el
lisp/dired.el
lisp/electric.el
lisp/erc/ChangeLog
lisp/files.el
lisp/frame.el
lisp/gnus/ChangeLog
lisp/gnus/message.el
lisp/help-mode.el
lisp/help.el
lisp/ielm.el
lisp/isearch.el
lisp/loadup.el
lisp/mail/sendmail.el
lisp/mh-e/ChangeLog
lisp/minibuffer.el
lisp/mouse.el
lisp/net/ange-ftp.el
lisp/pcomplete.el
lisp/play/decipher.el
lisp/proced.el
lisp/progmodes/compile.el
lisp/progmodes/ebrowse.el
lisp/progmodes/etags.el
lisp/progmodes/python.el
lisp/progmodes/vhdl-mode.el
lisp/ps-print.el
lisp/replace.el
lisp/shell.el
lisp/simple.el
lisp/speedbar.el
lisp/textmodes/bibtex.el
lisp/view.el
lisp/window.el
lisp/woman.el
src/ChangeLog
src/buffer.c
src/dispnew.c
src/frame.c
src/indent.c
src/lisp.h
src/minibuf.c
src/w32fns.c
src/window.c
src/window.h
src/xdisp.c
src/xfns.c

index 3ecdfb96336ad49f61fca67493990601c1fec010,593b54d088ba4515679ef6d13adea73912a3f09e..28d466660497d46195b66b724ed3890653c1334e
@@@ -1,16 -1,50 +1,63 @@@
 +2011-05-17  Martin Rudalics  <rudalics@gmx.at>
 +
 +      * windows.texi (Basic Windows): Remove description of
 +      window-internal-p.
 +      (Splitting Windows): New nomenclature for window splitting
 +      commands.
 +
+ 2011-05-14  Eli Zaretskii  <eliz@gnu.org>
+       * nonascii.texi (Character Properties): Fix inconsistencies with
+       implementation.
+       * text.texi (Special Properties): Move @defvar's out of the
+       @table.  (Bug#8652)
+ 2011-05-12  Glenn Morris  <rgm@gnu.org>
+       * display.texi (Image Descriptors): Fix typo.  (Bug#8495)
+ 2011-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * modes.texi (Region to Refontify): Rename from "Region to Fontify".
+       (Multiline Font Lock):
+       * vol2.texi (Top):
+       * vol1.texi (Top):
+       * elisp.texi (Top): Update menu accordingly.
+ 2011-05-12  Drew Adams  <drew.adams@oracle.com>
+       * modes.texi (Region to Fontify): Fix typo.
+ 2011-05-10  Jim Meyering  <meyering@redhat.com>
+       * minibuf.texi: Fix typo "in in -> in".
+ 2011-05-06  Paul Eggert  <eggert@cs.ucla.edu>
+       * numbers.texi (Integer Basics): Large integers are treated as floats.
+ 2011-04-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * processes.texi (Synchronous Processes): Document the (:file
+       "/file-name") syntax for `call-process'.
+ 2011-04-23  Juanma Barranquero  <lekktu@gmail.com>
+       * windows.texi (Choosing Window): Fix typo.
+ 2011-04-23  Chong Yidong  <cyd@stupidchicken.com>
+       * frames.texi (Layout Parameters): Note the difference between
+       querying and setting parameters for left-fringe and right-fringe
+       (Bug#6930).
 +2011-04-09  Martin Rudalics  <rudalics@gmx.at>
 +
 +      * windows.texi (Splitting Windows): Explain window-splits and
 +      window-nest.
 +      (Displaying Buffers): Replace other-visible-frame by other-frame.
 +
  2011-03-21  Stefan Monnier  <monnier@iro.umontreal.ca>
  
        * minibuf.texi (Basic Completion): Be a bit more precise about the
Simple merge
Simple merge
Simple merge
diff --cc lisp/ChangeLog
index 2804e692315711bc1e2f2ae9e32007dcd274ae6a,844fcaad833f37b6559cbfc0ec27260a7f73c872..2f77b6d81e888abdd4fc88d5e8ece653ed65d610
+ 2011-05-17  Glenn Morris  <rgm@gnu.org>
+       * mail/mail-utils.el (mail-dont-reply-to): Silence compiler.
+       * progmodes/idlw-shell.el (idlwave-shell-complete-filename):
+       Replace obsolete function.
+       * shell.el (pcomplete-parse-arguments-function): Declare.
+       * calendar/appt.el (appt-message-warning-time, appt-display-mode-line)
+       (appt-display-diary, appt-display-interval, appt-prev-comp-time)
+       (appt-check): Doc fixes.
+       (appt-disp-window-function, appt-delete-window-function):
+       Remove needless special case in custom :type.
+       (appt-display-count): Default to 0, not nil.
+       (appt-check): Reset appt-display-count to 0, not nil.
+ 2011-05-17  Juanma Barranquero  <lekktu@gmail.com>
+       * progmodes/python.el (python-font-lock-keywords):
+       Add the Python 3.X keyword "nonlocal" (bug#8639).
 +2011-05-16  Martin Rudalics  <rudalics@gmx.at>
 +
 +      * mouse.el (mouse-drag-mode-line-1): Don't use window
 +      configurations any more.
 +
 +      * window.el (window-child-count, normalize-live-frame)
 +      (normalize-any-window, normalize-live-window): Fix doc-strings.
 +      (window-internal-p): Remove.
 +      (window-last-child): New function.
 +      (make-window-atom): Call window-child instead of
 +      window-internal-p.
 +      (window-min-delta, window-min-delta-1, window-max-delta)
 +      (window-max-delta-1, window-resizable, window-resizable-p): Rename
 +      argument SIDE to TRAIL.
 +      (resize-window-reset-1, resize-mini-window): Call set-window-new-total.
 +      (resize-window-safe-window): Remove.
 +      (resize-window): Reword error message.  Use
 +      set-window-new-normal and rewrite associated code.
 +      (resize-subwindows-skip-p): Call window-new-normal.
 +      (resize-subwindows-normal): Major rewrite.  Rename arguments SIDE
 +      and DELTA to TRAIL and THIS-DELTA.  New argument OTHER-DELTA.
 +      (resize-subwindows): Major rewrite.  New arguments WIDNOW and
 +      EDGE.  Rename argument SIDE to TRAIL.
 +      (resize-other-windows): Major rewrite. Rename argument SIDE to
 +      TRAIL.  New argument EDGE.
 +      (resize-this-window): Minor rewrite.  Rename arguments ADD-TOTAL
 +      and SIDE to ADD and TRAIL.  New argument EDGE.
 +      (resize-root-window, resize-root-window-vertically): Clarify
 +      doc-strings.
 +      (adjust-window-trailing-edge): Major rewrite.
 +      (delete-window): Fix doc-string.  Call set-window-new-normal.
 +      (split-window): Rename argument HORIZONTAL to SIDE.  Handle normal
 +      sizes more intuitively.  Call split-window-internal with new
 +      normal-size argument.
 +      (split-window-keep-point): Replace split-window-vertically by
 +      split-window-above-each-other.
 +      (split-window-vertically): Rename to
 +      split-window-above-each-other, provide alias for old name.
 +      (split-window-horizontally): Rename to
 +      split-window-side-by-side.  Provide alias for old name.
 +      (balance-windows-1): Call window-new-total and
 +      set-window-new-total.
 +      (balance-windows-2): Call window-new-total, set-window-new-normal
 +      and set-window-new-total.
 +      (display-buffer-alist): Fix doc-string.
 +      (ctl-x-map): Bind split-window-above-each-other and
 +      split-window-side-by-side instead of split-window-vertically and
 +      split-window-horizontally.
 +
+ 2011-05-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * emacs-lisp/eieio.el (defmethod): Fix quoting of code (bug#8677).
+ 2011-05-16  Kevin Ryde  <user42@zip.com.au>
+       * info-look.el (makefile-automake-mode): New setups, looking in
+       automake manual, then makefile-mode.
+       (makefile-mode): Remove automake manual, have it just in
+       makefile-automake-mode since there's various things different or
+       not relevant to plain make.
+       (makefile-mode): Remove "other-modes" non-existent automake-mode,
+       believe a hypothetical automake-mode would go to makefile-mode,
+       not the other way around.
+ 2011-05-15  Chong Yidong  <cyd@stupidchicken.com>
+       * vc/diff-mode.el (diff-fixup-modifs): Locate correct position for
+       hunk-end tags (Bug#8672).
+       * vc/vc-annotate.el (vc-annotate-mode-map): Bind = to
+       vc-annotate-show-diff-revision-at-line (Bug#8671).
+ 2011-05-14  Glenn Morris  <rgm@gnu.org>
+       * vc/add-log.el (add-change-log-entry): Don't start adding a new entry
+       in the middle of an existing one with multiple authors.  (Bug#8645)
+       (change-log-font-lock-keywords): Also handle multiple author lines
+       with leading tabs.  (Bug#8644)
+       * calendar/appt.el (appt-check): Rename some local variables.
+       Some simplification/reordering.
+       * mail/feedmail.el (feedmail-confirm-outgoing-timeout)
+       (feedmail-sendmail-f-doesnt-sell-me-out)
+       (feedmail-queue-slug-suspect-regexp, feedmail-debug)
+       (feedmail-debug-sit-for, feedmail-queue-express-hook)
+       (feedmail-queue-runner-message-sender): Set :version.
+       (bbdb-search, bbdb-records, smtp-via-smtp, smtp-server)
+       (bbdb-dwim-net-address, vm-mail): Declare.
+       (feedmail-binmail-gnulinuxish-template):
+       Rename from feedmail-binmail-linuxish-template.
+       (feedmail-buffer-to-smtp, feedmail-vm-mail-mode):
+       Use insert-buffer-substring.
+ 2011-05-14  Bill Carpenter  <bill@carpenter.org>
+       * mail/feedmail.el (feedmail-patch-level): Increase.
+       (feedmail-debug): New custom group.
+       (feedmail-confirm-outgoing-timeout)
+       (feedmail-sendmail-f-doesnt-sell-me-out)
+       (feedmail-queue-slug-suspect-regexp, feedmail-debug)
+       (feedmail-debug-sit-for, feedmail-queue-express-hook): New options.
+       (feedmail-sender-line, feedmail-from-line)
+       (feedmail-fiddle-headers-upwardly, feedmail-enable-spray)
+       (feedmail-spray-this-address, )
+       (feedmail-spray-address-fiddle-plex-list)
+       (feedmail-queue-use-send-time-for-date)
+       (feedmail-queue-use-send-time-for-message-id)
+       (feedmail-last-chance-hook, feedmail-queue-runner-mode-setter)
+       (feedmail-buffer-eating-function):
+       Doc fixes.
+       (feedmail-spray-via-bbdb, feedmail-buffer-to-smtp)
+       (feedmail-vm-mail-mode, feedmail-message-action-scroll-up)
+       (feedmail-message-action-scroll-down): New functions.
+       (feedmail-queue-directory, feedmail-queue-draft-directory):
+       Use expand-file-name.
+       (feedmail-prompt-before-queue-standard-alist): Add scroll entries.
+       Remove C-v help entry.
+       (feedmail-queue-buffer-file-name): New variable.
+       (feedmail-mail-send-hook-splitter, feedmail-buffer-to-binmail)
+       (feedmail-buffer-to-smtpmail, feedmail-queue-express-to-draft)
+       (feedmail-message-action-send-strong, feedmail-message-action-edit)
+       (feedmail-message-action-draft, feedmail-message-action-draft-strong)
+       (feedmail-message-action-queue, feedmail-message-action-queue-strong)
+       (feedmail-message-action-toggle-spray)
+       (feedmail-run-the-queue-no-prompts)
+       (feedmail-run-the-queue-global-prompt, feedmail-queue-reminder)
+       (feedmail-look-at-queue-directory, feedmail-queue-subject-slug-maker)
+       (feedmail-create-queue-filename, feedmail-rfc822-time-zone):
+       (feedmail-fiddle-header, feedmail-give-it-to-buffer-eater)
+       (feedmail-envelope-deducer, feedmail-fiddle-from)
+       (feedmail-fiddle-sender, feedmail-default-date-generator)
+       (feedmail-fiddle-date, feedmail-fiddle-message-id)
+       (feedmail-fiddle-spray-address)
+       (feedmail-fiddle-list-of-spray-fiddle-plexes)
+       (feedmail-fiddle-list-of-fiddle-plexes)
+       (feedmail-fill-to-cc-function, feedmail-fill-this-one)
+       (feedmail-one-last-look, feedmail-fqm-p): Add debug calls.
+       (feedmail-queue-runner-message-sender, feedmail-binmail-template):
+       Change default.  Doc fix.
+       (feedmail-queue-runner-cleaner-upper): Use feedmail-say-chatter.
+       (feedmail-binmail-linuxish-template): New constant.
+       (feedmail-buffer-to-sendmail): Doc fix.  Add debug call.
+       Respect feedmail-sendmail-f-doesnt-sell-me-out.
+       (feedmail-send-it): Add debug call.
+       Use feedmail-queue-buffer-file-name, and
+       feedmail-send-it-immediately-wrapper.
+       (feedmail-message-action-send): Add debug call.
+       Use feedmail-send-it-immediately-wrapper.
+       (feedmail-queue-express-to-queue): Add debug call.
+       Run feedmail-queue-express-hook.
+       (feedmail-message-action-help): Add debug call.  Use feedmail-p-h-b-n.
+       (feedmail-message-action-help-blat):
+       Rename from feedmail-queue-send-edit-prompt-help-first.
+       (feedmail-run-the-queue): Add debug call.  Set buffer-file-type.
+       Check line-endings.  Handle errors better.
+       (feedmail-queue-reminder-brief, feedmail-queue-reminder-medium):
+       Doc fix.  Add debug call.
+       (feedmail-queue-send-edit-prompt): Doc fix.  Add debug call.
+       Use feedmail-queue-send-edit-prompt-inner.
+       (feedmail-queue-runner-prompt, feedmail-scroll-buffer): New functions.
+       (feedmail-queue-send-edit-prompt-inner): New function, extracted
+       from feedmail-queue-send-edit-prompt.
+       (feedmail-queue-send-edit-prompt-help)
+       (feedmail-queue-send-edit-prompt-help-later): Remove functions.
+       (feedmail-tidy-up-slug): Add debug call.
+       Respect feedmail-queue-slug-suspect-regexp.
+       (feedmail-queue-subject-slug-maker): Use buffer-substring-no-properties.
+       (feedmail-dump-message-to-queue): Add debug call.
+       Expand queue-directory.
+       (feedmail-dump-message-to-queue): Change message slightly.
+       Use feedmail-say-chatter.
+       (feedmail-rfc822-date): Add debug call.  Bind system-time-locale.
+       (feedmail-send-it-immediately-wrapper): New function.
+       (feedmail-send-it-immediately): Add debug calls.  Use let not let*.
+       Insert empty string rather than newline.  Handle full-frame case.
+       Use catch/throw.  Use feedmail-say-chatter.
+       (feedmail-fiddle-from): Try mail-host-address.
+       (feedmail-default-message-id-generator): Doc fix.
+       Bind system-time-locale.  Handle missing end.
+       (feedmail-fiddle-x-mailer): Add debug call.
+       Handle feedmail-x-mailer-line being nil.
+       (feedmail-accume-n-nuke-header, feedmail-deduce-address-list):
+       Add debug call.  Use buffer-substring-no-properties.
+       (feedmail-say-debug, feedmail-say-chatter): New functions.
+       (feedmail-find-eoh): Give an explicit error.
+ 2011-05-13  Ulf Jasper  <ulf.jasper@web.de>
+       * net/newst-treeview.el (newsticker-treeview-face): Changed default
+       family from helvetica to sans.
+       (newsticker-treeview-tool-bar-map): Moved tool-bar icons to
+       etc/images/newsticker.
+       * net/newst-reader.el (newsticker-feed-face): Changed default
+       family from helvetica to sans.
+       * net/newst-plainview.el (newsticker-new-item-face)
+       (newsticker-old-item-face, newsticker-immortal-item-face)
+       (newsticker-obsolete-item-face, newsticker-date-face)
+       (newsticker-statistics-face): Changed default family from
+       helvetica to sans.
+       (newsticker--plainview-tool-bar-map): Moved tool-bar icons to
+       etc/images/newsticker.
+       * net/newst-backend.el (newsticker--do-run-auto-mark-filter),
+       (newsticker--process-auto-mark-filter-match): : Tell user about
+       auto-marking.
+ 2011-05-13  Didier Verna  <didier@xemacs.org>
+       Common Lisp indentation improvements on defmethod and lambda-lists.
+       * cl-indent.el: Advertise the changes and remove obsolete TODO entries.
+       (lisp-lambda-list-keyword-parameter-indentation)
+       (lisp-lambda-list-keyword-parameter-alignment)
+       (lisp-lambda-list-keyword-alignment): New customizable user options.
+       (lisp-indent-defun-method): Improve docstring.
+       (extended-loop-p): Fix comment.
+       (lisp-indent-lambda-list-keywords-regexp): New variable.
+       (lisp-indent-lambda-list): New function.
+       (lisp-indent-259): Use it.
+       (lisp-indent-defmethod): Support for more than one
+       method qualifier and properly indent methods lambda-lists.
+       (defgeneric): Provide a missing common-lisp-indent-function property.
+ 2011-05-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * thingatpt.el (bounds-of-thing-at-point): Return nil rather than
+       bounds for the empty string (bug#8667).
+ 2011-05-13  Glenn Morris  <rgm@gnu.org>
+       * mail/feedmail.el (feedmail-buffer-to-sendmail): Require sendmail.
+       * mail/sendmail.el (sendmail-program): Try executable-find first.
+       (sendmail-send-it): `sendmail-program' cannot be unbound.
+       * calendar/appt.el (appt-make-list): Simplify.
+       (appt-time-msg-list): Doc fix.
+       (appt-check): Change mode-line message at the time of the appointment.
+ 2011-05-12  Andreas Schwab  <schwab@linux-m68k.org>
+       * progmodes/ld-script.el (ld-script-keywords)
+       (ld-script-builtins): Update keywords list.
+ 2011-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * progmodes/grep.el (grep-filter): Don't trip on partial lines.
+       * shell.el (shell-completion-vars): New function.
+       (shell-mode):
+       * simple.el (read-shell-command): Use it.
+       (blink-matching-open): No need for " [...]" in minibuffer-message.
+ 2011-05-12  Glenn Morris  <rgm@gnu.org>
+       * calendar/appt.el (appt-now-displayed): Remove pointless variable.
+       (appt-check): Simplify.
+ 2011-05-12  Eli Zaretskii  <eliz@gnu.org>
+       * smerge-mode.el (smerge-resolve): Use null-device rather than a
+       literal "/dev/null".
+ 2011-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * emacs-lisp/lisp.el (lisp-complete-symbol, lisp-completion-at-point):
+       Fix typo.
+ 2011-05-12  Ralph Schleicher  <rs@ralph-schleicher.de>
+       * progmodes/which-func.el (which-function):
+       Use add-log-current-defun instead of add-log-current-defun-function,
+       which might not be defined (Bug#8260).
+ 2011-05-12  Glenn Morris  <rgm@gnu.org>
+       * emacs-lisp/bytecomp.el (byte-compile-file-form-defmumble):
+       Let byte-compile-initial-macro-environment always take precedence.
+ 2011-05-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * net/rcirc.el: Add support for SSL/TLS connections.
+       (rcirc-server-alist): New field `encryption'.
+       (rcirc): Check `encryption' settings.
+       (rcirc-connect): New arg `encryption'.  Use open-network-stream.
+       Merge make-local-variable into `set'.
+       (rcirc--connection-open-p): New function.
+       (rcirc-send-string, rcirc-clean-up-buffer): Use it to handle case where
+       the process is not a network process (e.g. running gnutls-cli).
+       (set-rcirc-decode-coding-system, set-rcirc-encode-coding-system):
+       Make rcirc-(en|de)code-coding-system local here.
+       (rcirc-mode): Merge make-local-variable into `set'.
+       (rcirc-parent-buffer): Make permanent buffer-local.
+       (rcirc-multiline-minor-mode): Don't do it here.
+       (rcirc-switch-to-server-buffer): Don't switch to a random buffer if
+       there's no server buffer.
+ 2011-05-11  Glenn Morris  <rgm@gnu.org>
+       * newcomment.el (comment-kill): Prefix "unused" local.
+       * term/w32console.el (get-screen-color): Declare.
+       * emacs-lisp/bytecomp.el (byte-compile-arglist-warn):
+       Handle symbol elements of byte-compile-initial-macro-environment.
+ 2011-05-10  Leo Liu  <sdl.web@gmail.com>
+       * bookmark.el (bookmark-bmenu-mode-map):
+       Bind bookmark-bmenu-search to `/'.
+       * mail/footnote.el: Convert to utf-8 encoding.
+       (footnote-unicode-string, footnote-unicode-regexp): New variable.
+       (Footnote-unicode): New function.
+       (footnote-style-alist): Add unicode style to the list.
+       (footnote-style): Doc fix.
+ 2011-05-10  Jim Meyering  <meyering@redhat.com>
+       Fix doubled-word typos.
+       * international/quail.el (quail-insert-kbd-layout): and and -> and
+       * kermit.el: and and -> and
+       * net/ldap.el (ldap-search-internal): to to -> to
+       * progmodes/vhdl-mode.el (vhdl-offsets-alist): Likewise.
+       * progmodes/js.el (js-mode): and and -> and
+       * textmodes/artist.el (artist-move-to-xy): at at -> at
+       (artist-draw-region-trim-line-endings): if if -> if
+       And Safetyc -> Safety.
+       * textmodes/reftex-dcr.el (reftex-view-crossref): at at -> at a
+ 2011-05-10  Glenn Morris  <rgm@gnu.org>
+          Stefan Monnier  <monnier@iro.umontreal.ca>
+       * files.el (hack-one-local-variable-eval-safep):
+       Consider "eval: (foo-mode)" to be safe.  (Bug#8613)
+ 2011-05-10  Glenn Morris  <rgm@gnu.org>
+       * calendar/diary-lib.el (diary-list-entries-hook)
+       (diary-mark-entries-hook, diary-nongregorian-listing-hook)
+       (diary-nongregorian-marking-hook, diary-list-entries)
+       (diary-include-other-diary-files, diary-mark-entries)
+       (diary-mark-included-diary-files): Doc fixes.
+ 2011-05-09  Juanma Barranquero  <lekktu@gmail.com>
+       * misc.el: Require tabulated-list.el during compilation.
+ 2011-05-09  Chong Yidong  <cyd@stupidchicken.com>
+       * progmodes/compile.el (compilation-start):
+       Run compilation-filter-hook for the async case too.
+       (compilation-filter-hook): Doc fix.
+ 2011-05-09  Deniz Dogan  <deniz@dogan.se>
+       * wdired.el: Remove outdated installation comment.  Fix usage
+       comment.
+ 2011-05-09  Juanma Barranquero  <lekktu@gmail.com>
+       * misc.el: Implement new command `list-dynamic-libraries'.
+       (list-dynamic-libraries--loaded-only-p): New variable.
+       (list-dynamic-libraries--refresh): New function.
+       (list-dynamic-libraries): New command.
+ 2011-05-09  Chong Yidong  <cyd@stupidchicken.com>
+       * progmodes/compile.el (compilation-error-regexp-alist-alist):
+       Fix the ant regexp to handle end-line and end-column info from jikes.
+       Re-introduce maven regexp.  Give the ruby-Test::Unit regexp a
+       higher priority to avoid clobbering by gnu.
+ 2011-05-08  Chong Yidong  <cyd@stupidchicken.com>
+       * cus-face.el (custom-declare-face): Call custom-theme-recalc-face
+       if the face has existing theme settings (Bug#8454).
+ 2011-05-08  Ralph Schleicher  <rs@ralph-schleicher.de>
+       * progmodes/perl-mode.el (perl-imenu-generic-expression):
+       Only match variables declared via `my' or `our' (Bug#8261).
+       * net/browse-url.el (browse-url-of-dired-file): Allow browsing of
+       special file names `.' and `..' (Bug#8259).
+ 2011-05-08  Chong Yidong  <cyd@stupidchicken.com>
+       * progmodes/grep.el (grep-mode-font-lock-keywords):
+       Remove buffer-changing entries.
+       (grep-filter): New function.
+       (grep-mode): Add it to compilation-filter-hook.
+       * progmodes/compile.el (compilation-filter-hook)
+       (compilation-filter-start): New defvars.
+       (compilation-filter): Call compilation-filter-hook prior to
+       updating the process mark.
+ 2011-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * emacs-lisp/eieio.el (defmethod): Fix typo in last change.
+ 2011-05-07  Eli Zaretskii  <eliz@gnu.org>
+       * mail/sendmail.el (send-mail-function): On MS-Windows, default to
+       mailclient-send-it even if window-system is nil.  (Bug#8595)
+       * term/w32console.el (terminal-init-w32console):
+       Call get-screen-color and use its output to set the frame
+       background-mode.  (Bug#8597)
+ 2011-05-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Make bytecomp.el understand that defmethod defines funs (bug#8631).
+       * emacs-lisp/eieio.el (eieio--defalias, eieio--defgeneric-init-form):
+       New functions.
+       (defgeneric, eieio--defmethod): Use them.
+       (eieio-defgeneric): Remove.
+       (defmethod): Call defgeneric in a way visible to the byte-compiler.
+ 2011-05-07  Glenn Morris  <rgm@gnu.org>
+       * calendar/timeclock.el (timeclock-log-data): Remove unused local.
+       Use let rather than let*.
+       (timeclock-find-discrep): Remove unused local.
+       * calendar/diary-lib.el (diary-comment-start): Doc fix.
+       * calendar/appt.el (appt-time-msg-list): Doc fix.
+ 2011-05-06  Noah Friedman  <friedman@splode.com>
+       * apropos.el (apropos-print-doc): Only use
+       emacs-lisp-docstring-fill-column when it is bound to an integer,
+       per that variable's documentation.
+ 2011-05-06  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * lpr.el (print-region-1): Echo lpr-program's output, so error messages
+       and warnings are not silently discarded (e.g. use -d instead of -P).
+ 2011-05-06  Glenn Morris  <rgm@gnu.org>
+       * calendar/appt.el (appt-message-warning-time): Doc fix.
+       (appt-warning-time-regexp): New option.
+       (appt-make-list): Respect appt-message-warning-time.
+       * calendar/diary-lib.el (diary-comment-start, diary-comment-end):
+       New options.
+       (diary-add-to-list): Strip comments from the displayed string.
+       (diary-mode): Set comment-start and comment-end.
+       * vc/diff-mode.el (smerge-refine-subst): Declare.
+       (diff-refine-hunk): Don't require smerge-mode when compiling.
+ 2011-05-06  Juanma Barranquero  <lekktu@gmail.com>
+       * simple.el (list-processes): Return nil as the docstring says.
+ 2011-05-05  Michael Albinus  <michael.albinus@gmx.de>
+       * net/ange-ftp.el (ange-ftp-binary-file-name-regexp): Set default
+       to "".
+       (ange-ftp-write-region, ange-ftp-insert-file-contents)
+       (ange-ftp-copy-file-internal): Use only `ange-ftp-binary-file' for
+       determining of binary transfer.  (Bug#7383)
+ 2011-05-05  Michael Albinus  <michael.albinus@gmx.de>
+       * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Fix port computation bug.  (Bug#8618)
+ 2011-05-05  Glenn Morris  <rgm@gnu.org>
+       * allout-widgets.el (allout-widgets-mode-inhibit): Declare before use.
+       * simple.el (shell-dynamic-complete-functions)
+       (comint-dynamic-complete-functions): Declare.
+       * net/network-stream.el (gnutls-negotiate):
+       * simple.el (tabulated-list-print): Fix declarations.
+       * progmodes/gud.el (syntax-symbol, syntax-point):
+       Remove unnecessary and incorrect declarations.
+       * emacs-lisp/check-declare.el (check-declare-scan):
+       Handle byte-compile-initial-macro-environment in bytecomp.el
+ 2011-05-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+       Fix earlier half-done eieio-defmethod change (bug#8338).
+       * emacs-lisp/eieio.el (eieio--defmethod): Rename from eieio-defmethod.
+       Streamline and change calling convention.
+       (defmethod): Adjust accordingly and simplify.
+       (eieio-defclass): Fix broken calls to eieio-defmethod and redirect to
+       new eieio--defmethod.
+       (slot-boundp): Minor CSE simplification.
+ 2011-05-05  Milan Zamazal  <pdm@zamazal.org>
+       * progmodes/glasses.el (glasses-separate-capital-groups): New option.
+       (glasses-make-readable): Use glasses-separate-capital-groups.
+ 2011-05-05  Juanma Barranquero  <lekktu@gmail.com>
+       * emacs-lisp/warnings.el (warning-level-aliases): Reflow docstring.
+       (warning-series): Doc fix.
+       (display-warning): Don't try to create the buffer if we just found it.
+ 2011-05-04  Chong Yidong  <cyd@stupidchicken.com>
+       * emacs-lisp/autoload.el (generated-autoload-file): Set to nil.
+       (autoload-find-generated-file): New function.
+       (generate-file-autoloads): Bind generated-autoload-file to
+       buffer-file-name.
+       (update-file-autoloads, update-directory-autoloads):
+       Use autoload-find-generated-file.  If called interactively, prompt for
+       output file (Bug#7989).
+       (batch-update-autoloads): Doc fix.
+ 2011-05-04  Juanma Barranquero  <lekktu@gmail.com>
+       * term/w32-win.el (dynamic-library-alist): Add `gnutls'.
+ 2011-05-04  Glenn Morris  <rgm@gnu.org>
+       * calendar/diary-lib.el (diary-fancy-date-pattern): Turn it into a
+       function, so it follows changes in calendar-date-style.
+       (diary-fancy-date-matcher): New function.
+       (diary-fancy-font-lock-keywords): Use diary-fancy-date-matcher.
+       (diary-fancy-font-lock-fontify-region-function):
+       Use diary-fancy-date-pattern as a function.
+       * calendar/diary-lib.el (diary-fancy-date-pattern): Do not use
+       non-numbers for `year' etc pseudo-variables.  (Bug#8583)
+ 2011-05-04  Teodor Zlatanov  <tzz@lifelogs.com>
+       * net/gnutls.el (gnutls-negotiate): Use CL-style keyword arguments
+       instead of positional arguments.  Allow :keylist and :crlfiles
+       arguments.
+       (open-gnutls-stream): Call it.
+       * net/network-stream.el (network-stream-open-starttls): Adjust to
+       call `gnutls-negotiate' with :process and :hostname arguments.
+ 2011-05-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * minibuffer.el (completion--message): New function.
+       (completion--do-completion, minibuffer-complete)
+       (minibuffer-force-complete, minibuffer-complete-word): Use it.
+       (completion--do-completion): Don't ignore completion-auto-help when in
+       icomplete-mode.
+       * whitespace.el (whitespace-trailing-regexp): Don't rely on the
+       internal encoding (e.g. tibetan zero is not whitespace).
+       (global-whitespace-mode): Prefer save-current-buffer.
+       (whitespace-trailing-regexp): Remove useless save-match-data.
+       (whitespace-empty-at-bob-regexp): Minor simplification.
+ 2011-05-03  Chong Yidong  <cyd@stupidchicken.com>
+       * emacs-lisp/autoload.el (generated-autoload-file): Doc fix (Bug#7989).
+ 2011-05-03  Agustín Martín Domingo  <agustin.martin@hispalinux.es>
+       * textmodes/ispell.el (ispell-add-per-file-word-list):
+       Use `concat' to create string for insertion.
+ 2011-05-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * textmodes/bibtex.el (bibtex-fill-field-bounds, bibtex-fill-entry):
+       Avoid open-line which runs post-self-insert-hook.
+       (bibtex-fill-entry): Remove unused `end' var.
+ 2011-05-03  Dirk Ullrich  <dirk.ullrich@googlemail.com>  (tiny change)
+       * textmodes/ispell.el (ispell-add-per-file-word-list):
+       Protect against `nil' value of `comment-start' (Bug#8579).
+ 2011-05-03  Leo Liu  <sdl.web@gmail.com>
+       * isearch.el (isearch-yank-pop): New command.
+       (isearch-mode-map): Bind it to `M-y'.
+       (isearch-forward): Mention it.
+ 2011-05-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * simple.el (minibuffer-complete-shell-command): Remove.
+       (minibuffer-local-shell-command-map): Use completion-at-point.
+       (read-shell-command): Setup completion vars here instead.
+       (read-expression-map): Bind TAB to symbol completion.
+       * textmodes/ispell.el (lookup-words): Use with-temp-buffer; signal
+       error directly rather via storing it into `results'.
+ 2011-05-02  Leo Liu  <sdl.web@gmail.com>
+       * vc/diff.el: Fix description.
+ 2011-05-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * server.el (server-eval-at): New function.
+ 2011-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * net/network-stream.el (open-network-stream): Take a :nowait
+       parameter and pass it on to `make-network-process'.
+       (network-stream-open-plain): Ditto.
+ 2011-04-30  Andreas Schwab  <schwab@linux-m68k.org>
+       * faces.el (face-spec-set-match-display): Don't match toolkit
+       options on terminal frames.
+ 2011-04-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * progmodes/pascal.el: Use lexical binding.
+       (pascal-mode-map): Remove author preferences.
+       * pcomplete.el (pcomplete-std-complete): Don't abuse
+       completion-at-point.
+ 2011-04-28  Juanma Barranquero  <lekktu@gmail.com>
+       * calc/calccomp.el (math-comp-to-string-flat-term): Simplify by
+       removing code that has been dead since 1991 or so.
+       * startup.el (command-line): When warning about "_emacs", use a
+       delayed warning to allow the user to filter it out.
+ 2011-04-28  Deniz Dogan  <deniz@dogan.se>
+       * net/rcirc.el (rcirc-handler-353): Fix bug for channels which the
+       user has not joined.
+ 2011-04-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * pcomplete.el (pcomplete-completions-at-point): Return nil if there
+       aren't any completions at point.
+ 2011-04-28  Juanma Barranquero  <lekktu@gmail.com>
+       * subr.el (display-delayed-warnings): New function.
+       (delayed-warnings-hook): New variable.
+ 2011-04-28  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * minibuffer.el (completion-at-point, completion-help-at-point):
+       Don't presume that a given completion-at-point-function will always
+       use the same calling convention.
+       * pcomplete.el (pcomplete-completions-at-point):
+       Obey pcomplete-ignore-case.  Don't call pcomplete-norm-func unless
+       pcomplete-seen is non-nil.
+       (pcomplete-comint-setup): Also recognize the new comint/shell
+       completion functions.
+       (pcomplete-do-complete): Don't call pcomplete-norm-func unless
+       pcomplete-seen is non-nil.
+ 2011-04-27  Niels Giesen  <niels.giesen@gmail.com>
+       * calendar/icalendar.el (diary-lib): Add require statement.
+       (icalendar--create-uid): Read out a uid from a text-property on
+       the first character in the entry.  This allows for code to add its
+       own uid to the entry.
+       (icalendar--convert-float-to-ical): Add export of
+       `diary-float'-entries save for those with the optional DAY
+       argument.
+ 2011-04-27  Daniel Colascione  <dan.colascione@gmail.com>
+       * subr.el (shell-quote-argument): Use alternate escaping strategy
+       when we spot a variable reference in a string.
+ 2011-04-26  Daniel Colascione  <dan.colascione@gmail.com>
+       * cus-start.el (all): Define customization for debug-on-event.
+ 2011-04-26  Daniel Colascione  <dan.colascione@gmail.com>
+       * subr.el (shell-quote-argument): Escape correctly under Windows.
+ 2011-04-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * emulation/cua-base.el (cua-selection-mode): Make it toggle again.
+ 2011-04-25  Michael Albinus  <michael.albinus@gmx.de>
+       * net/tramp.el (tramp-process-actions): Add POS argument.
+       Delete region between POS and (pos).
+       * net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
+       Use `nil' position in `tramp-process-actions' call.
+       (tramp-maybe-open-connection): Call `tramp-process-actions' with pos.
+       * net/tramp-smb.el (tramp-smb-maybe-open-connection): Use `nil'
+       position in `tramp-process-actions' call.
+       * net/trampver.el: Update release number.
+ 2011-04-25  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * custom.el (defcustom): Obey lexical-binding.
+       Fix octave-inf completion problems reported by Alexander Klimov.
+       * progmodes/octave-inf.el (inferior-octave-mode-syntax-table):
+       Inherit from octave-mode-syntax-table.
+       (inferior-octave-mode): Set info-lookup-mode.
+       (inferior-octave-completion-at-point): New function.
+       (inferior-octave-complete): Use it and completion-in-region.
+       (inferior-octave-dynamic-complete-functions): Use it as well, and use
+       comint-filename-completion.
+       * progmodes/octave-mod.el (octave-mode-syntax-table): Use _ syntax for
+       symbol elements which shouldn't be word elements.
+       (octave-font-lock-keywords, octave-beginning-of-defun)
+       (octave-function-header-regexp): Adjust regexps accordingly.
+       (octave-mode-map): Also use info-lookup-symbol for C-c C-h.
+ 2011-04-25  Juanma Barranquero  <lekktu@gmail.com>
+       * net/gnutls.el (gnutls-errorp): Declare before first use.
+ 2011-04-24  Teodor Zlatanov  <tzz@lifelogs.com>
+       * net/gnutls.el (gnutls-negotiate): Add hostname, verify-flags,
+       verify-error, and verify-hostname-error parameters.  Check whether
+       default trustfile exists before going to use it.  Add missing
+       argument to gnutls-message-maybe call.  Return return value.
+       Reported by Claudio Bley <claudio.bley@gmail.com>.
+       (open-gnutls-stream): Add usage example.
+       * net/network-stream.el (network-stream-open-starttls): Give host
+       parameter to `gnutls-negotiate'.
+       (gnutls-negotiate): Adjust `gnutls-negotiate' declaration.
+       * subr.el (shell-quote-argument): Escape correctly under Windows.
+ 2011-04-24  Daniel Colascione  <dan.colascione@gmail.com>
+       * progmodes/cc-engine.el (c-forward-decl-or-cast-1):
+       Use correct match group (bug#8438).
+ 2011-04-24  Chong Yidong  <cyd@stupidchicken.com>
+       * emacs-lisp/package.el (package-built-in-p): Fix typo.
+       (package-menu--generate): New arg specifying packages to show.
+       (package-menu-refresh, package-menu-execute, list-packages):
+       Callers changed.
+       (package-show-package-list): New function, replacing deleted
+       package--list-packages (renamed because it is non-internal).
+       * finder.el (finder-list-matches): Use package-show-package-list
+       instead of deleted package--list-packages.
+       * vc/vc-annotate.el (vc-annotate-goto-line): New command.
+       Based on a previous implementation by Juanma Barranquero (Bug#8366).
+       (vc-annotate-mode-map): Bind it to RET.
+ 2011-04-24  Uday S Reddy  <u.s.reddy@cs.bham.ac.uk>  (tiny change)
+       * progmodes/etags.el (next-file): Don't use set-buffer to change
+       buffers (Bug#8478).
+ 2011-04-24  Chong Yidong  <cyd@stupidchicken.com>
+       * files.el (auto-mode-alist): Use js-mode for .json (Bug#8529).
+       * apropos.el (apropos-label-face): Avoid variable-pitch face.
+       (apropos-accumulator): Doc fix.
+       (apropos-function, apropos-macro, apropos-command)
+       (apropos-variable, apropos-face, apropos-group, apropos-widget)
+       (apropos-plist): Add face property.
+       (apropos-symbols-internal): Fix indentation.
+       (apropos-print): Simplify help, and recognize apropos-multi-type.
+       (apropos-print-doc): Use button-type-get to extract the button's
+       face property.  Fill docstring (Bug#8352).
+ 2011-04-23  Juanma Barranquero  <lekktu@gmail.com>
+       * buff-menu.el (Buffer-menu--buffers): Fix typo in docstring (bug#8535).
+       * play/mpuz.el (mpuz-silent): Doc fix.
+       (mpuz-mode-map): Use mapc.
+       (mpuz-put-number-on-board): Rename parameter L to COLUMNS.
+       (mpuz-letter-to-digit, mpuz-check-all-solved, mpuz-create-buffer):
+       Fix typos in docstrings.
+       * play/doctor.el (doc$, doctor-$, doctor-read-print, doctor-read-token)
+       (doctor-nounp, doctor-pronounp): Fix typos in docstrings.
+       * mouse-drag.el (mouse-drag-throw): Fix typo in docstring.
+ 2011-04-23  Chong Yidong  <cyd@stupidchicken.com>
+       * minibuffer.el (completion--do-completion): Avoid the "Next char
+       not unique" prompt if icomplete-mode is enabled (Bug#5849).
+       * mouse.el (mouse-drag-mode-line-1): Make sure that if we push
+       mouse-2 into unread-command-events, it is interpreted correctly.
+       * image-mode.el (image-type, image-mode-map, image-minor-mode-map)
+       (image-toggle-display): Doc fix.
+ 2011-04-23  Stephen Berman  <stephen.berman@gmx.net>
+       * textmodes/page.el (what-page): Use line-number-at-pos to
+       calculate line number (Bug#6825).
+ 2011-04-22  Juanma Barranquero  <lekktu@gmail.com>
+       * eshell/esh-mode.el (find-tag-interactive): Declare function.
+       (eshell-find-tag): Remove `with-no-warnings', unneeded now.
+       Pass argument NO-DEFAULT to `find-tag-interactive'.
+ 2011-04-22  Juanma Barranquero  <lekktu@gmail.com>
+       Lexical-binding cleanup.
+       * progmodes/ada-mode.el (ada-after-change-function, ada-loose-case-word)
+       (ada-no-auto-case, ada-capitalize-word, ada-untab, ada-narrow-to-defun):
+       * progmodes/ada-prj.el (ada-prj-initialize-values)
+       (ada-prj-display-page, ada-prj-field-modified, ada-prj-display-help)
+       (ada-prj-show-value):
+       * progmodes/ada-xref.el (ada-find-any-references, ada-gdb-application):
+       * progmodes/antlr-mode.el (antlr-with-displaying-help-buffer)
+       (antlr-invalidate-context-cache, antlr-options-menu-filter)
+       (antlr-language-option-extra, antlr-c++-mode-extra, antlr-run-tool):
+       * progmodes/bug-reference.el (bug-reference-push-button):
+       * progmodes/fortran.el (fortran-line-length):
+       * progmodes/glasses.el (glasses-change):
+       * progmodes/octave-mod.el (octave-fill-paragraph):
+       * progmodes/python.el (python-mode, python-pdbtrack-track-stack-file)
+       (python-pdbtrack-grub-for-buffer, python-sentinel):
+       * progmodes/sql.el (sql-save-connection):
+       * progmodes/tcl.el (tcl-indent-command, tcl-popup-menu):
+       * progmodes/xscheme.el (xscheme-enter-debugger-mode):
+       Mark unused parameters.
+       * progmodes/compile.el (compilation--flush-directory-cache)
+       (compilation--flush-parse, compile-internal): Mark unused parameters.
+       (compilation-buffer-name): Rename parameter MODE-NAME to NAME-OF-MODE.
+       (compilation-next-error-function): Remove unused variable `timestamp'.
+       * progmodes/cpp.el (cpp-parse-close): Remove unused variable `begin'.
+       (cpp-signal-read-only, cpp-grow-overlay): Mark unused parameters.
+       * progmodes/dcl-mode.el (dcl-end-of-command):
+       Remove unused variable `start'.
+       (dcl-calc-command-indent-multiple, dcl-calc-cont-indent-relative)
+       (dcl-option-value-basic, dcl-option-value-offset)
+       (dcl-option-value-margin-offset, dcl-option-value-comment-line):
+       Mark unused parameters.
+       (dcl-save-local-variable): Remove unused variable `val'.
+       (mode): Declare.
+       * progmodes/delphi.el (delphi-save-state, delphi-after-change):
+       Mark unused parameters.
+       (delphi-ignore-changes): Move before first use.
+       (delphi-charset-token-at): Remove unused variable `start'.
+       (delphi-else-start): Remove unused variable `if-count'.
+       (delphi-comment-block-start, delphi-comment-block-end):
+       Remove unused variable `kind'.
+       (delphi-indent-line): Remove unused variable `new-point'.
+       * progmodes/ebrowse.el (ebrowse-files-list)
+       (ebrowse-list-of-matching-members, ebrowse-tags-list-members-in-file):
+       Mark unused parameters.  Don't quote `lambda'.
+       (ebrowse-sort-tree-list, ebrowse-same-tree-member-buffer-list):
+       Don't quote `lambda'.
+       (ebrowse-revert-tree-buffer-from-file, ebrowse-tags-choose-class)
+       (ebrowse-goto-visible-member/all-member-lists): Mark unused parameters.
+       (ebrowse-create-tree-buffer): Rename parameter OBARRAY to CLASSES.
+       (ebrowse-toggle-mark-at-point): Remove unused variable `pnt'.
+       Use `ignore-errors'.
+       (ebrowse-frozen-tree-buffer-name, ebrowse-find-source-file)
+       (ebrowse-view/find-file-and-search-pattern)
+       (ebrowse-view/find-member-declaration/definition):
+       Rename parameter TAGS-FILE-NAME to TAGS-FILE.
+       (ebrowse-find-class-declaration, ebrowse-view-class-declaration):
+       Rename parameter PREFIX-ARG to PREFIX.
+       (ebrowse-tags-read-name): Remove unused variables `start' and
+       `member-info'.
+       (ebrowse-display-member-buffer): Rename variable `tags-file-name'
+       to `tags-file'.
+       * progmodes/etags.el (local-find-tag-hook): Declare.
+       (tag-partial-file-name-match-p, tag-any-match-p, list-tags):
+       Mark unused parameters.
+       * progmodes/executable.el (compilation-error-regexp-alist): Declare.
+       (executable-interpret): Mark unused parameter.
+       * progmodes/flymake.el (flymake-process-sentinel)
+       (flymake-after-change-function)
+       (flymake-create-temp-with-folder-structure)
+       (flymake-get-include-dirs-dot): Mark unused parameters.
+       (flymake-safe-delete-directory): Remove unused variable `err'.
+       * progmodes/gdb-mi.el (speedbar-change-initial-expansion-list)
+       (speedbar-timer-fn, speedbar-line-text)
+       (speedbar-change-expand-button-char, speedbar-delete-subblock)
+       (speedbar-center-buffer-smartly): Declare functions.
+       (gdb-find-watch-expression): Remove unused variable `array'.
+       (gdb-edit-value, gdb-gdb, gdb-ignored-notification, gdb-thread-created)
+       (gdb-starting): Mark unused parameters.
+       (gud-gdbmi-marker-filter): Remove unused variable `output-record'.
+       (gdb-table-string): Remove unused variable `res'.
+       (gdb-place-breakpoints): Remove unused variables `flag' and `bptno'.
+       (gdb-disassembly-handler-custom): Remove unused variable `pos'.
+       (gdb-display-buffer): Remove unused variable `cur-size'.
+       * progmodes/gud.el (gud-def): Use `defalias' instead of `defun' to
+       allow lexical-binding compilation.
+       (gud-expansion-speedbar-buttons, gud-gdb-goto-stackframe)
+       (gud-dbx-massage-args, gud-xdb-massage-args, gud-perldb-massage-args)
+       (gud-jdb-massage-args, gud-jdb-find-source, gud-find-class):
+       Mark unused parameters.
+       (gud-gdb-marker-filter): Remove unused variable `match'.
+       (gud-find-class): Bind `syntax-symbol' and `syntax-point' to suitable
+       lambda expressions and funcall them, instead of using `fset'.
+       * progmodes/hideif.el (hif-parse-if-exp): Rename parameter
+       HIF-TOKEN-LIST to TOKEN-LIST and let-bind `hif-token-list'.
+       * progmodes/hideshow.el (hs-hide-block-at-point): Remove unused
+       variable `header-beg'; use `let'.
+       * progmodes/icon.el (indent-icon-exp): Remove unused variables
+       `restart', `last-sexp' and `at-do'.
+       * progmodes/js.el (js--debug): Mark unused parameter.
+       (js--parse-state-at-point): Remove unused variable `bound'; use `let'.
+       (js--splice-into-items): Remove unused variable `item'.
+       (js--read-symbol, js--read-tab): Pass 1/-1 to `ido-mode', not t/nil.
+       * progmodes/make-mode.el (makefile-make-font-lock-keywords):
+       Rename parameter FONT-LOCK-KEYWORDS to FL-KEYWORDS.
+       (makefile-complete): Remove unused variable `try'.
+       (makefile-fill-paragraph, makefile-match-function-end):
+       Mark unused parameters.
+       * progmodes/octave-inf.el (inferior-octave-complete):
+       Remove unused variable `proc'.
+       (inferior-octave-output-digest): Mark unused parameter.
+       * progmodes/perl-mode.el (perl-calculate-indent):
+       Remove unused variable `err'.
+       * progmodes/prolog.el (prolog-mode-keybindings-inferior)
+       (prolog-indent-line): Mark unused parameters.
+       (prolog-indent-line): Remove unused variable `beg'.
+       * progmodes/ps-mode.el (reporter-prompt-for-summary-p)
+       (reporter-dont-compact-list): Declare.
+       * progmodes/sh-script.el (sh-font-lock-quoted-subshell):
+       Remove unused variable `char'.
+       (sh-debug): Mark unused parameter.
+       (sh-get-indent-info): Remove unused variable `start'.
+       (sh-calculate-indent): Remove unused variable `var'.
+       * progmodes/simula.el (simula-popup-menu): Mark unused parameter.
+       (simula-electric-keyword): Remove unused variable `null'.
+       (simula-search-backward, simula-search-forward): Remove unused
+       variables `begin' and `end'.
+       * progmodes/vera-mode.el (vera-guess-basic-syntax):
+       Remove unused variable `pos'.
+       (vera-electric-tab, vera-comment-uncomment-region):
+       Mark unused parameters.
+       (vera-electric-tab): Rename parameter PREFIX-ARG to PREFIX.
+ 2011-04-22  Chong Yidong  <cyd@stupidchicken.com>
+       * emacs-lisp/package.el (package--builtins, package-alist)
+       (package-load-descriptor, package-built-in-p, package-activate)
+       (define-package, package-installed-p)
+       (package-compute-transaction, package-buffer-info)
+       (package--push): Doc fix.  Distinguish more clearly between
+       version strings and version lists.
+ 2011-04-21  Juanma Barranquero  <lekktu@gmail.com>
+       Lexical-binding cleanup.
+       * play/5x5.el (5x5-make-random-solution, 5x5-make-mutate-current)
+       (5x5-make-mutate-best):
+       * play/fortune.el (fortune-in-buffer):
+       * play/gomoku.el (gomoku-init-display):
+       * play/solitaire.el (solitaire, solitaire-do-check):
+       * play/tetris.el (tetris-default-update-speed-function):
+       Mark unused parameters.
+       * play/bubbles.el (bubbles-mode): Set `show-trailing-whitespace'.
+       (bubbles--shift): Remove unused variable `char-org'.
+       (bubbles--set-faces): Remove unused variable `fg-col'.  Simplify.
+       (bubbles--show-images): Remove unused variable `char'.
+       * play/decipher.el (decipher-keypress, decipher-alphabet-keypress)
+       (decipher-get-undo, decipher-set-map, decipher-complete-alphabet)
+       (decipher-resync, decipher-loop-with-breaks, decipher--analyze)
+       (decipher-analyze-buffer): Use ?\s.
+       (decipher-make-checkpoint): Remove unused variable `mapping'.
+       * play/doctor.el (doctor-doc): Rename parameter DOCTOR-SENT to SENT.
+       * play/gamegrid.el (gamegrid-add-score-with-update-game-score):
+       Remove unused variable `result'; use `let'.
+       * play/gametree.el (gametree-current-layout, gametree-apply-layout):
+       Rename parameter TOP-LEVEL to FROM-TOP-LEVEL; use `ignore-errors'.
+       (gametree-children-shown-p, gametree-compute-reduced-score):
+       Use `ignore-errors'.
+       * play/handwrite.el (ps-lpr-switches): Declare.
+       (handwrite): Remove unused variables `pmin' and `lastp'.
+       * play/hanoi.el (hanoi-move-ring): Remove unused variable `total-steps'.
+       * play/landmark.el (landmark-init-display)
+       (landmark-update-naught-weights): Mark unused parameters.
+       (landmark-y): Remove unused variable `noise'.  Simplify.
+       (landmark-human-plays): Remove unused variable `score'.
+       * play/mpuz.el (mpuz-try-letter): Remove unused variable `message'.
+       (mpuz-try-proposal): Remove unused variable `game'.
+       * play/zone.el (life-patterns): Declare.
+ 2011-04-20  Juanma Barranquero  <lekktu@gmail.com>
+       * vc/vc.el (ediff-vc-internal): Declare function.
+ 2011-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * shell.el: Use lexical-binding and std completion UI.
+       (shell-filter-ctrl-a-ctrl-b): Work as a preoutput filter.
+       (shell-mode): Put shell-filter-ctrl-a-ctrl-b on
+       comint-preoutput-filter-functions rather than on
+       comint-output-filter-functions.
+       (shell-command-completion, shell--command-completion-data)
+       (shell-filename-completion, shell-environment-variable-completion)
+       (shell-c-a-p-replace-by-expanded-directory): New functions.
+       (shell-dynamic-complete-functions, shell-dynamic-complete-command)
+       (shell-dynamic-complete-filename, shell-replace-by-expanded-directory)
+       (shell-dynamic-complete-environment-variable): Use them.
+       (shell-dynamic-complete-as-environment-variable)
+       (shell-dynamic-complete-as-command): Remove.
+       (shell-match-partial-variable): Match past point.
+       * comint.el: Clean up use of completion-at-point-functions.
+       (comint-completion-at-point): New function.
+       (comint-mode): Use it completion-at-point-functions.
+       (comint-dynamic-complete): Make it obsolete.
+       (comint-replace-by-expanded-history-before-point): Add dry-run arg.
+       (comint-c-a-p-replace-by-expanded-history): New function.
+       (comint-dynamic-complete-functions)
+       (comint-replace-by-expanded-history): Use it.
+       * minibuffer.el (completion-table-with-terminator): Allow dynamic
+       termination strings.  Try harder to avoid second try-completion.
+       (completion-in-region-mode-map): Disable bindings that don't work yet.
+       * comint.el: Use lexical-binding.  Require CL.
+       (comint-dynamic-complete-functions): Use comint-filename-completion.
+       (comint-completion-addsuffix): Tweak custom type.
+       (comint-filename-completion, comint--common-suffix)
+       (comint--common-quoted-suffix, comint--table-subvert)
+       (comint--complete-file-name-data): New functions.
+       (comint-dynamic-complete-as-filename, comint-dynamic-complete-filename)
+       (comint-dynamic-list-filename-completions): Use them.
+       (comint-dynamic-simple-complete): Make obsolete.
+       * minibuffer.el (completion-in-region-mode):
+       Keep completion-in-region-mode--predicate global.
+       (completion-in-region--postch):
+       Assume completion-in-region-mode--predicate is not null.
+       * progmodes/flymake.el (flymake-start-syntax-check-process):
+       Obey `dir'.  Simplify.
+       * vc/vc.el (vc-version-ediff): Call ediff-vc-internal directly, since
+       we're in VC after all.
+ 2011-04-20  Christoph Scholtes  <cschol2112@googlemail.com>
+       * vc/vc.el (vc-diff-build-argument-list-internal)
+       (vc-version-ediff, vc-ediff): New commands.
+       (vc-version-diff): Use vc-diff-build-argument-list-internal.
+ 2011-04-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * emacs-lisp/byte-opt.el (byte-decompile-bytecode-1): Remove dead code,
+       add sanity check.
+       * obsolete/erc-hecomplete.el: Make obsolete.
+       * obsolete/: Standardize obsolescence info in the header.
+ 2011-04-20  Glenn Morris  <rgm@gnu.org>
+       * calendar/solar.el (solar-horizontal-coordinates):
+       Use the longitude argument rather than `calendar-longitude'.
+       (solar-date-next-longitude): Remove unused locals.
+ 2011-04-20  Vinicius Jose Latorre  <viniciusjl@ig.com.br>
+       * whitespace.el: New version 13.2.1.
+ 2011-04-20  felix  <EmacsWiki>  (tiny change)
+       * whitespace.el (global-whitespace-mode): keep highlight when
+       switching between major modes on a file.
+ 2011-04-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * progmodes/octave-mod.el (octave-in-comment-p, octave-in-string-p)
+       (octave-not-in-string-or-comment-p): Use syntax-ppss so it works with
+       multi-line comments as well.
+ 2011-04-19  Juanma Barranquero  <lekktu@gmail.com>
+       Lexical-binding cleanup.
+       * arc-mode.el (archive-mode-revert):
+       * cmuscheme.el (scheme-interactively-start-process):
+       * custom.el (custom-initialize-delay):
+       * dnd.el (dnd-open-local-file, dnd-open-remote-url):
+       * dos-w32.el (direct-print-region-helper, direct-print-region-function):
+       * emacs-lock.el (emacs-lock-clear-sentinel):
+       * ezimage.el (defezimage):
+       * follow.el (follow-avoid-tail-recenter):
+       * fringe.el (set-fringe-mode-1):
+       * generic-x.el (bat-generic-mode-compile):
+       * help-mode.el (help-info-variable, help-do-xref)
+       (help-mode-revert-buffer):
+       * help.el (view-emacs-todo):
+       * iswitchb.el (iswitchb-completion-help):
+       * jka-compr.el (jka-compr-make-temp-name, jka-compr-load):
+       * kmacro.el (kmacro-cycle-ring-next, kmacro-cycle-ring-previous)
+       (kmacro-delete-ring-head, kmacro-bind-to-key, kmacro-view-macro):
+       * locate.el (locate-update):
+       * longlines.el (longlines-encode-region)
+       (longlines-after-change-function):
+       * outline.el (outline-isearch-open-invisible):
+       * ps-def.el (declare-function, charset-dimension, char-width)
+       (encode-char):
+       * ps-mule.el (ps-mule-plot-string):
+       * recentf.el (recentf-make-menu-items, recentf-cancel-dialog)
+       (recentf-edit-list-select, recentf-edit-list-validate)
+       (recentf-open-files-action):
+       * rect.el (delete-whitespace-rectangle-line)
+       (rectangle-number-line-callback):
+       * register.el (window-configuration-to-register)
+       (frame-configuration-to-register):
+       * scroll-bar.el (scroll-bar-mode, toggle-horizontal-scroll-bar):
+       * select.el (xselect-convert-to-string, xselect-convert-to-length)
+       (xselect-convert-to-targets, xselect-convert-to-delete)
+       (xselect-convert-to-filename, xselect-convert-to-charpos)
+       (xselect-convert-to-lineno, xselect-convert-to-colno)
+       (xselect-convert-to-os, xselect-convert-to-host)
+       (xselect-convert-to-user, xselect-convert-to-class)
+       (xselect-convert-to-name, xselect-convert-to-integer)
+       (xselect-convert-to-atom, xselect-convert-to-identity):
+       * subr.el (declare, ignore, process-kill-without-query)
+       (text-clone-maintain):
+       * terminal.el (te-get-char, te-tic-sentinel):
+       * tool-bar.el (tool-bar-make-keymap):
+       * tooltip.el (tooltip-timeout, tooltip-hide, tooltip-help-tips):
+       * type-break.el (type-break-mode, type-break-noninteractive-query):
+       * view.el (View-back-to-mark):
+       * wid-browse.el (widget-browse-action, widget-browse-widget)
+       (widget-browse-widgets, widget-browse-sexp):
+       * widget.el (define-widget-keywords):
+       * xt-mouse.el (xterm-mouse-translate, turn-off-xterm-mouse-tracking):
+       Mark unused parameters.
+       * align.el (align-adjust-col-for-rule): Mark unused parameter.
+       (align-areas): Remove unused variable `look'.
+       (align-region): Remove unused variables `real-end' and `pos-list'.
+       * apropos.el (apropos-score-doc): Remove unused variable `i'.
+       * bindings.el (mode-line-modified, mode-line-remote):
+       Mark unused parameters.
+       (mode-line-mule-info): Mark unused parameter; don't quote `lambda'.
+       * buff-menu.el (Buffer-menu-revert-function): Mark unused parameters.
+       (Buffer-menu-mode): Mark unused parameter; don't quote `lambda'.
+       * comint.el (comint-history-isearch-pop-state)
+       (comint-postoutput-scroll-to-bottom, comint-truncate-buffer)
+       (comint-strip-ctrl-m, comint-read-noecho): Mark unused parameters.
+       (comint-substitute-in-file-name): Doc fix.
+       * completion.el (cmpl-statistics-block): Mark unused parameter.
+       (add-completions-from-tags-table, add-completions-from-lisp-buffer)
+       (save-completions-to-file, load-completions-from-file):
+       Remove unused local variable `e'.
+       * composite.el (compose-chars): Remove unused variable `len'.
+       (lgstring-insert-glyph): Remove unused variable `g'.
+       (compose-glyph-string): Remove unused variables `ascent',
+       `descent', `lbearing' and `rbearing'.
+       (compose-glyph-string-relative): Remove unused variables
+       `lbearing', `rbearing' and `wadjust'.
+       (compose-gstring-for-graphic): Remove unused variables `header',
+       `wadjust', `xoff' and `yoff'.  Use `let', not `let*'.
+       (compose-gstring-for-terminal): Remove unused variables `header'
+       and `nchars'.  Use `let', not `let*'.
+       * cus-edit.el (Custom-set, Custom-save, custom-reset)
+       (Custom-reset-current, Custom-reset-saved, Custom-reset-standard)
+       (Custom-buffer-done, custom-buffer-create-internal)
+       (custom-browse-visibility-action, custom-browse-group-tag-action)
+       (custom-browse-variable-tag-action, custom-browse-face-tag-action)
+       (widget-magic-mouse-down-action, custom-toggle-parent)
+       (custom-add-parent-links, custom-toggle-hide-variable)
+       (custom-face-edit-value-visibility-action, custom-face-edit-fix-value)
+       (custom-toggle-hide-face, face, hook, custom-group-link-action)
+       (custom-face-menu-create, custom-variable-menu-create, get)
+       (custom-group-menu-create, Custom-no-edit): Mark unused parameters.
+       (custom-reset-standard-save-and-update): Remove unused variable `value'.
+       (customize-apropos): Remove unused variable `tests'.
+       (custom-group-value-create): Remove unused variable `hidden-p'.
+       (sort-fold-case): Declare.
+       * cus-theme.el (custom-reset-standard-faces-list)
+       (custom-reset-standard-variables-list): Declare.
+       (customize-create-theme, custom-theme-revert, custom-theme-write)
+       (custom-theme-choose-mode, customize-themes, custom-theme-save):
+       Mark unused parameters.
+       * dabbrev.el (dabbrev-completion): Remove unused variable `init'.
+       * delim-col.el (delimit-columns-max): Move defvar before first use.
+       * descr-text.el (describe-char-categories): Don't quote `lambda'.
+       (describe-char): Don't quote `lambda'.  Mark unused parameter.
+       * desktop.el (desktop-save-buffer-p): Mark unused parameter.
+       (auto-insert): Declare.
+       (desktop-restore-file-buffer): Rename desktop-* parameters;
+       mark unused ones.
+       (desktop-create-buffer): Rename desktop-* parameters and bind them.
+       (desktop-buffer): Rename desktop-* parameters.
+       * dframe.el (x-sensitive-text-pointer-shape, x-pointer-shape): Declare.
+       (dframe-reposition-frame-xemacs, dframe-help-echo)
+       (dframe-hack-buffer-menu, dframe-set-timer, dframe-set-timer-internal):
+       Mark unused parameters.
+       * dired-aux.el (backup-extract-version-start, overwrite-query)
+       (overwrite-backup-query, rename-regexp-query)
+       (rename-non-directory-query): Declare.
+       (dired-shell-stuff-it, dired-do-create-files): Mark unused parameters.
+       (dired-add-entry): Remove unused variable `orig-file-name'.
+       (dired-copy-file-recursive): Remove unused variable `dirfailed'.
+       Use parameter PRESERVE-TIME instead of accessing dynamic variable
+       `dired-copy-preserve-time' directly.
+       (dired-do-create-files-regexp): Remove unused variable `fn-count'.
+       (dired-insert-subdir-newpos): Rename unused variable `pos'.
+       * dired-x.el (dired-omit-size-limit): Move defcustom before first use.
+       (dired-virtual-revert, dired-make-relative-symlink):
+       Mark unused parameters.
+       (manual-program): Declare.
+       (dired-x-hands-off-my-keys): Rename parameters of lambda expression.
+       (inode, s, mode, nlink, uid, gid, size, time, name, sym): Declare them,
+       wrapped in `with-no-warnings' to avoid replacing one warning by another.
+       * dirtrack.el (dirtrack): Remove unused variable `multi-line'.
+       * dos-fns.el (dos-8+3-filename): Remove unused variable `i'.
+       * echistory.el (electric-history-in-progress, Helper-return-blurb):
+       Declare.
+       * edmacro.el (edmacro-finish-edit): Remove unused variable `kmacro'.
+       * electric.el (Electric-command-loop): Rename parameter
+       INHIBIT-QUIT to INHIBIT-QUITTING and bind `inhibit-quit'.
+       * expand.el (expand-in-literal): Remove unused variable `here'.
+       * facemenu.el (facemenu-add-new-color):
+       Remove unused variable `docstring'.
+       * faces.el (face-id, make-face-bold, make-face-unbold, make-face-italic)
+       (make-face-unitalic, make-face-bold-italic): Mark unused parameters.
+       (face-attr-construct): Mark unused parameter.  Doc fix.
+       (read-color): Remove unused variable `hex-string'.
+       * files.el (parse-colon-path): Rename argument CD-PATH to SEARCH-PATH.
+       (locate-dominating-file): Remove unused vars `prev-file' and `user'.
+       (remote-file-name-inhibit-cache, revert-buffer): Clean up docstrings.
+       (display-buffer-other-frame): Remove unused variable `old-window'.
+       (kill-buffer-hook): Declare.
+       (insert-file-contents-literally, set-auto-mode, risky-local-variable-p):
+       Mark unused parameters.
+       (after-find-file): Pass 1 to `auto-save-mode', not t.
+       * files-x.el (auto-insert): Declare.
+       (modify-file-local-variable-prop-line): Remove unused variable `val'.
+       * find-lisp.el (find-lisp-find-dired-internal): Remove unused
+       variable `buf'.  Mark unused parameter.
+       (find-lisp-insert-directory): Mark unused parameter.
+       * format.el (format-decode-run-method): Mark unused parameter; doc fix.
+       (format-encode-region): Remove unused variables `cur-buf' and `result'.
+       (format-common-tail): Remove, unused.
+       (format-deannotate-region): Remove unused variable `loc'.
+       (format-annotate-region): Remove unused variable `p'.
+       (format-annotate-single-property-change): Remove unused variables
+       `default' and `tail'.
+       * forms.el (read-file-filter): Declare.
+       (forms--iif-hook, forms--revert-buffer): Mark unused parameters.
+       * frame.el (frame-creation-function-alist): Mark unused parameter.
+       (frame-geom-spec-cons): Pass FRAME to `frame-geom-value-cons'.
+       * hilit-chg.el (hilit-chg-cust-fix-changes-face-list, hilit-chg-clear):
+       Remove unused parameters.
+       (hilit-chg-set-face-on-change): Remove unused variable `beg-decr'.
+       (highlight-compare-with-file): Remove unused variable `buf-b-read-only'.
+       * htmlfontify.el (hfy-default-footer, hfy-decor, hfy-invisible)
+       (hfy-parse-tags-buffer, hfy-prepare-index-i, hfy-prepare-index)
+       (hfy-prepare-tag-map): Mark unused parameters.
+       (htmlfontify-buffer): Use `called-interactively-p'.
+       * ibuf-ext.el (ibuffer-do-kill-lines, ibuffer-jump-to-buffer)
+       (ibuffer-copy-filename-as-kill, ibuffer-mark-on-buffer)
+       (ibuffer-do-occur): Mark unused parameters.
+       (ibuffer-forward-next-marked): Remove unused variable `curmark'.
+       (ibuffer-diff-buffer-with-file-1): Remove unused variable `proc'.
+       * ibuffer.el: Don't quote `lambda'.
+       (ibuffer-count-marked-lines, ibuffer-count-deletion-lines)
+       (ibuffer-unmark-all, ibuffer-toggle-marks, ibuffer-redisplay-engine):
+       Mark unused parameters.
+       * ido.el (ido-mode, ido-wide-find-dir-or-delete-dir)
+       (ido-completing-read): Mark unused parameters.
+       (ido-copy-current-word): Mark unused parameters;
+       remove unused variable `name'.
+       (ido-sort-merged-list): Remove unused parameter `dirs'.
+       * ielm.el (ielm-input-sender): Mark unused parameter.
+       (ielm-string, ielm-form, ielm-pos, ielm-result, ielm-error-type)
+       (ielm-output, ielm-wbuf, ielm-pmark): Declare.
+       (ielm-eval-input): Rename argument IELM-STRING to INPUT-STRING to keep
+       `ielm-string' as a dynamic variable accessible from the IELM prompt.
+       Bind `ielm-string' to INPUT-STRING.  Remove unused variable `err'.
+       * image-dired.el (image-dired-display-thumbs): Remove unused
+       variables `curr-file' and `count'.
+       (image-dired-remove-tag): Remove unused variable `start'.
+       (image-dired-tag-files, image-dired-create-thumbs): Remove unused
+       variable `curr-file'
+       (image-dired-rotate-original): Remove unused variable `temp-file'.
+       (image-dired-mouse-select-thumbnail, image-dired-mouse-toggle-mark):
+       Remove unused variable `file'.
+       (image-dired-gallery-generate): Remove unused variable `curr'.
+       (image-dired-dired-edit-comment-and-tags): Mark unused parameters.
+       * indent.el (tab-to-tab-stop): Remove unused variable `opoint'.
+       * info-xref.el (info-xref-goto-node-p): Remove unused variable `err'.
+       * informat.el (texinfo-command-start, texinfo-command-end): Declare.
+       * isearch.el (minibuffer-history-symbol): Declare.
+       (isearch-edit-string): Remove unused variable `err'.
+       (isearch-message-prefix, isearch-message-suffix):
+       Mark unused parameters.
+       * ls-lisp.el (ls-lisp-insert-directory): Remove unused variable `fil'.
+       * macros.el (insert-kbd-macro): Remove unused variable `mods'.
+       * makesum.el (double-column): Remove unused variable `cnt'.
+       * misearch.el (multi-isearch-pop-state): Mark unused parameter.
+       (ido-ignore-item-temp-list): Declare.
+       * mouse-drag.el (mouse-drag-throw): Remove unused variables
+       `mouse-delta', `window-last-row', `mouse-col-delta', `window-last-col',
+       `adjusted-mouse-col-delta' and `adjusted-mouse-delta'.
+       (mouse-drag-drag): Remove unused variables `mouse-delta' and
+       `mouse-col-delta'.
+       * mouse-sel.el (mouse-extend-internal):
+       Remove unused variable `orig-window-frame'.
+       * pcomplete.el (pcomplete-args, pcomplete-begins, pcomplete-last)
+       (pcomplete-index, pcomplete-stub, pcomplete-seen, pcomplete-norm-func):
+       Move declarations before first use.
+       (pcomplete-opt): Mark unused parameters; doc fix.
+       * proced.el (proced-revert): Mark unused parameter.
+       (proced-send-signal): Remove unused variable `err'.
+       * ps-print.el (ps-print-preprint-region, ps-print-preprint):
+       Rename parameter PREFIX-ARG to ARG.
+       (ps-basic-plot-string, ps-basic-plot-whitespace):
+       Mark unused parameters.
+       * replace.el (replace-count): Define.
+       (occur-revert-function): Mark unused parameters.
+       (ido-ignore-item-temp-list, isearch-error, isearch-forward)
+       (isearch-case-fold-search, isearch-string): Declare.
+       (occur-engine): Rename parameter CASE-FOLD-SEARCH to CASE-FOLD and
+       bind `case-fold-search'.  Remove unused variables `beg' and `end',
+       and simplify.
+       (replace-eval-replacement): Rename parameter REPLACE-COUNT to
+       COUNT and bind `replace-count'.
+       (replace-loop-through-replacements): Rename parameter REPLACE-COUNT
+       to COUNT.
+       * savehist.el (print-readably, print-string-length): Declare.
+       * shadowfile.el (shadow-expand-cluster-in-file-name):
+       Remove unused variable `cluster'.
+       (shadow-copy-file): Remove unused variable `i'.
+       (shadow-noquery, shadow-clusters, shadow-site-cluster)
+       (shadow-parse-fullname, shadow-parse-name, shadow-define-cluster)
+       (shadow-define-literal-group, shadow-define-regexp-group)
+       (shadow-make-group, shadow-shadows-of): Clean up docstrings.
+       * shell.el (shell-filter-ctrl-a-ctrl-b): Mark unused parameter.
+       (shell): Use `called-interactively-p'.
+       (shell-directory-tracker): Remove unused variable `chdir-failure'.
+       * simple.el (compilation-context-lines, comint-file-name-quote-list)
+       (comint-file-name-chars, comint-delimiter-argument-list): Declare.
+       (delete-backward-char): Remove unused variable `ocol'.
+       (minibuffer-avoid-prompt, minibuffer-history-isearch-pop-state)
+       (line-move-1, event-apply-alt-modifier, event-apply-super-modifier)
+       (event-apply-hyper-modifier, event-apply-shift-modifier)
+       (event-apply-control-modifier, event-apply-meta-modifier):
+       Mark unused parameters.
+       (undo-make-selective-list): Remove duplicate variable `undo-elt'.
+       (normal-erase-is-backspace-mode): Remove unused variable `old-state'.
+       * speedbar.el (speedbar-ignored-directory-expressions)
+       (speedbar-supported-extension-expressions, speedbar-directory-buttons)
+       (speedbar-find-file, speedbar-dir-follow)
+       (speedbar-directory-buttons-follow, speedbar-tag-find)
+       (speedbar-buffer-buttons, speedbar-buffer-buttons-temp)
+       (speedbar-buffers-line-directory, speedbar-buffer-click):
+       Mark unused parameters.
+       (speedbar-tag-file): Remove unused variable `mode'.
+       (speedbar-buffers-tail-notes): Remove unused variable `mod'; simplify.
+       * strokes.el (strokes-decode-buffer): Remove unused variable `ext'.
+       * talk.el (talk): Remove unused variable `display'.
+       * tar-mode.el (tar-subfile-save-buffer): Remove unused variable `name'.
+       (tar-write-region-annotate): Mark unused parameter.
+       * time.el (now, time, load, mail, 24-hours, hour, 12-hours, am-pm)
+       (minutes, seconds, time-zone, day, year, monthname, month, dayname):
+       Declare them, wrapped in `with-no-warnings' to avoid replacing one
+       warning by another.
+       * time-stamp.el (time-stamp-string-preprocess):
+       Remove unused variable `require-padding'.
+       * tree-widget.el (widget-glyph-enable): Declare.
+       (tree-widget-action): Mark unused parameter.
+       * w32-fns.el (x-get-selection): Mark unused parameter.
+       (autoload-make-program, generated-autoload-file): Declare.
+       * wdired.el (wdired-revert): Mark unused parameters.
+       (wdired-xcase-word): Remove unused variable `err'.
+       * whitespace.el (whitespace-buffer-changed): Mark unused parameters.
+       (whitespace-help-scroll): Remove unused variable `data-help'.
+       * wid-edit.el (widget-mouse-help, widget-overlay-inactive)
+       (widget-image-insert, widget-after-change, default)
+       (widget-default-format-handler, widget-default-notify)
+       (widget-default-prompt-value, widget-info-link-action)
+       (widget-url-link-action, widget-function-link-action)
+       (widget-variable-link-action, widget-file-link-action)
+       (widget-emacs-library-link-action, widget-emacs-commentary-link-action)
+       (widget-field-prompt-internal, widget-field-action, widget-field-match)
+       (widget-choice-mouse-down-action, toggle, widget-radio-button-notify)
+       (widget-insert-button-action, widget-delete-button-action, visibility)
+       (widget-documentation-link-action, widget-documentation-string-action)
+       (widget-const-prompt-value, widget-regexp-match, symbol)
+       (widget-coding-system-prompt-value)
+       (widget-key-sequence-value-to-external, sexp)
+       (widget-sexp-value-to-internal, character, vector, cons)
+       (widget-choice-prompt-value, widget-boolean-prompt-value)
+       (widget-color--choose-action): Mark unused parameters.
+       (widget-item-match-inline, widget-choice-match-inline)
+       (widget-checklist-match, widget-checklist-match-inline)
+       (widget-group-match): Rename parameter VALUES to VALS.
+       (widget-field-value-set): Remove unused variable `size'.
+       (widget-color-action): Remove unused variables `value' and `start'.
+       * windmove.el (windmove-wrap-loc-for-movement): Remove unused
+       variable `dir'.  Doc fix.
+       (windmove-find-other-window): Don't pass it.
+       * window.el (count-windows): Mark unused parameter.
+       (bw-adjust-window): Remove unused variable `err'.
+       * woman.el (woman-file-name): Remove unused variable `default'.
+       (woman-expand-directory-path): Rename parameters WOMAN-MANPATH and
+       WOMAN-PATH to PATH-DIRS and PATH-REGEXPS, respectively.
+       (global-font-lock-mode): Declare.
+       (woman-decode-region): Mark unused parameter.
+       (woman-get-tab-stop): Rename parameter TAB-STOP-LIST to TAB-STOPS.
+       * x-dnd.el (x-dnd-default-test-function, x-dnd-handle-old-kde)
+       (x-dnd-handle-xdnd, x-dnd-handle-motif): Mark unused parameters.
+       (x-dnd-handle-moz-url): Remove unused variable `title'.
+       (x-dnd-handle-xdnd): Remove unused variables `x', `y' and `ret-action'.
+       * xml.el (xml-parse-tag, xml-parse-attlist):
+       Remove unused variable `pos'.
+ 2011-04-19  Glenn Morris  <rgm@gnu.org>
+       * calendar/cal-tex.el (cal-tex-list-holidays, cal-tex-cursor-month)
+       (cal-tex-cursor-week, cal-tex-cursor-week2, cal-tex-cursor-week-iso)
+       (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
+       (cal-tex-cursor-filofax-daily, cal-tex-mini-calendar)
+       * calendar/cal-html.el (cal-html-insert-minical):
+       * calendar/diary-lib.el (diary-list-entries-1, diary-list-entries)
+       (calendar-mark-date-pattern):
+       Prefix "unused" locals.
+       * calendar/cal-dst.el (dst-adjust-time): Remove never-implemented
+       optional argument `style'.
+       * calendar/appt.el (appt-make-list):
+       * calendar/cal-china.el (calendar-chinese-date-string):
+       * calendar/cal-hebrew.el (calendar-hebrew-list-yahrzeits)
+       (diary-hebrew-yahrzeit):
+       * calendar/cal-tex.el (cal-tex-last-blank-p, cal-tex-cursor-week2):
+       * calendar/calendar.el (calendar-generate-window):
+       * calendar/time-date.el (time-to-days):
+       Remove unused local variables.
+ 2011-04-18  Chong Yidong  <cyd@stupidchicken.com>
+       * emacs-lisp/tabulated-list.el (tabulated-list-mode): Use a custom
+       glyphless-char-display table.
+       (tabulated-list-glyphless-char-display): New var.
+ 2011-04-18  Sam Steingold  <sds@gnu.org>
+       * vc/add-log.el (change-log-font-lock-keywords): Add "Thanks to"
+       to acknowledgments.
+ 2011-04-17  Glenn Morris  <rgm@gnu.org>
+       * calendar/diary-lib.el (diary-sexp-entry):
+       * calendar/holidays.el (holiday-sexp):
+       Set debug-on-error rather than the removed stack-trace-on-error.
+ 2011-04-16  Glenn Morris  <rgm@gnu.org>
+       * progmodes/f90.el: Use lexical-binding.
+       (f90-get-correct-indent): Remove unnecessary local variable `cont'.
+ 2011-04-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * mail/sendmail.el (mail-mode-map): Use completion-at-point.
+       (mail-mode): Setup mailalias completion here instead.
+       * mail/mailalias.el: Use lexical-binding.
+       (pattern, mailalias-done): Declare dynamic.
+       (mail-completion-at-point-function): New function, from mail-complete.
+       (mail-complete): Use it.
+       (mail-completion-expand): New function.
+       (mail-get-names): Use it.
+       (mail-directory, mail-directory-process, mail-directory-stream):
+       Don't use `pattern' for lexically bound arg.
+       * emacs-lisp/lisp-mode.el (eval-defun-2): Use eval-sexp-add-defvars.
+       * htmlfontify.el (hfy-etags-cmd): Remove inoperant eval-and-compile.
+       (hfy-e2x-etags-cmd, hfy-etags-cmd-alist-default)
+       (hfy-etags-cmd-alist): Don't eval-and-compile any more.
+       * emacs-lisp/bytecomp.el (byte-temp-output-buffer-show)
+       (byte-save-window-excursion, byte-temp-output-buffer-setup)
+       (byte-interactive-p): Define them again, for use when inlining
+       old code.
+ 2011-04-15  Juanma Barranquero  <lekktu@gmail.com>
+       * loadup.el: Use `string-to-number', not `string-to-int'.
+ 2011-04-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * progmodes/gud.el (gud-gdb): Use completion-at-point instead of
+       gud-gdb-complete-command.
+       (gud-gdb-completions): New function, from gud-gdb-complete-command.
+       (gud-gdb-completion-at-point): New function.
+       (gud-gdb-completions): Remove.
 +2011-04-14  Martin Rudalics  <rudalics@gmx.at>
 +
 +      * window.el (adjust-window-trailing-edge): Assign normal sizes
 +      to the windows affected in window-splits nil case.
 +
+ 2011-04-14  Michael Albinus  <michael.albinus@gmx.de>
+       * net/tramp-sh.el (tramp-sh-handle-file-attributes): Handle the case
+       when the scripts fail.  Use `tramp-do-file-attributes-with-ls' then.
+       (tramp-do-copy-or-rename-file-out-of-band): Do not check any longer
+       whether `executable-find' is bound.
+       * net/tramp-smb.el (tramp-smb-handle-copy-file): Fix docstring.
  2011-04-14  Stefan Monnier  <monnier@iro.umontreal.ca>
  
        * minibuffer.el (completion-in-region-mode-predicate)
diff --cc lisp/apropos.el
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/dired.el
Simple merge
Simple merge
Simple merge
diff --cc lisp/files.el
Simple merge
diff --cc lisp/frame.el
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/help.el
Simple merge
diff --cc lisp/ielm.el
Simple merge
diff --cc lisp/isearch.el
Simple merge
diff --cc lisp/loadup.el
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/mouse.el
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/proced.el
Simple merge
Simple merge
index 0b0bbcaa038663e24164f8a51dc8c44968496cf4,d31a46cc308651d0e2007b6f2def3b3bfa5602a6..849bd02c5214837562d3ebf12ff72b6080e93892
@@@ -1625,10 -1624,11 +1624,10 @@@ The new frame is deleted when you quit 
           (and (not had-a-buf)
                (not (buffer-modified-p buf-to-view))
                'kill-buffer))
 -    (view-mode-enter (cons (selected-window) (cons (selected-window) t))
 -                   'ebrowse-view-exit-fn)))
 +    (view-mode-enter nil 'ebrowse-view-exit-fn)))
  
  (defun ebrowse-view/find-file-and-search-pattern
-   (struc info file tags-file-name &optional view where)
+   (struc info file tags-file &optional view where)
    "Find or view a member or class.
  STRUC is an `ebrowse-bs' structure (or a structure including that)
  describing what to search.
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lisp/replace.el
Simple merge
diff --cc lisp/shell.el
Simple merge
diff --cc lisp/simple.el
Simple merge
Simple merge
Simple merge
diff --cc lisp/view.el
Simple merge
diff --cc lisp/window.el
index 4e3d8b0d4e64cbe94b1feb0c4967bd7c9219abf6,9ea00442628c361127fc504904a11aa0bd3a9768..ef9c1869dfe84c987252bc1706ef42dc38f8d08a
@@@ -3528,19 -469,6 +3528,19 @@@ This is used by `balance-windows-area'
  Changing this globally has no effect.")
  (make-variable-buffer-local 'window-area-factor)
  
-     (condition-case err
 +(defun balance-windows-area-adjust (window delta horizontal)
 +  "Wrapper around `resize-window' with error checking.
 +Arguments WINDOW, DELTA and HORIZONTAL are passed on to that function."
 +  ;; `resize-window' may fail if delta is too large.
 +  (while (>= (abs delta) 1)
++    (condition-case nil
 +        (progn
 +          (resize-window window delta horizontal)
 +          (setq delta 0))
 +      (error
 +       ;;(message "adjust: %s" (error-message-string err))
 +       (setq delta (/ delta 2))))))
 +
  (defun balance-windows-area ()
    "Make all visible windows the same area (approximately).
  See also `window-area-factor' to change the relative size of
diff --cc lisp/woman.el
Simple merge
diff --cc src/ChangeLog
index 3d95cb3f4be69e39fa84e16962b3804fc2785af2,ceb45afebc50ed3184cff2e9268656091b8293e3..e4a537a22d16a46c3942d82919f2ffe85e041bd1
 +2011-05-16  Martin Rudalics  <rudalics@gmx.at>
 +
 +      * frame.c (make_frame): Use other_buffer_safely.
 +      (store_frame_param): Just store val in the buffer_list and
 +      buried_buffer_list slots.
 +
 +      * window.c: Remove constant Qset.
 +      (Fwindow_new_total_size): Rename to Fwindow_new_total_size.
 +      (Fwindow_new_normal_size): Rename to Fwindow_new_normal.
 +      (replace_window, make_window): Use floats for normal_lines and
 +      normal_cols.
 +      (run_window_configuration_change_hook): Record current buffer
 +      first and selected frame afterwards to assure that the current
 +      buffer is correctly reestablished.  Rename count1 to count.
 +      (Fresize_window_total): Rename to Fset_window_new_total.
 +      (Fresize_window_normal): Rename to Fset_window_new_normal.
 +      (resize_window_apply): Remove the Qset related branches
 +      (Fsplit_window_internal): Rename horizontal argument to side.
 +      New optional argument normal_size.  Simplify assignment of normal
 +      sizes which is mostly done in split-window itself now.
 +
+ 2011-05-12  Drew Adams  <drew.adams@oracle.com>
+       * textprop.c (Fprevious_single_char_property_change): Doc fix (bug#8655).
+ 2011-05-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+       * w32term.c (w32_draw_fringe_bitmap): Rename local vars `left' and
+       `width' to `bar_area_x' and `bar_area_width', respectively.
+       (x_scroll_run): Take account of fringe background extension.
+       * xterm.c (x_draw_fringe_bitmap) [USE_TOOLKIT_SCROLL_BARS]: Rename
+       local vars `left' and `width' to `bar_area_x' and
+       `bar_area_width', respectively.
+       (x_scroll_run) [USE_TOOLKIT_SCROLL_BARS]: Take account of fringe
+       background extension.
+ 2011-05-10  Jim Meyering  <meyering@redhat.com>
+       * xdisp.c (x_intersect_rectangles): Fix typo "the the -> the".
+ 2011-05-10  Juanma Barranquero  <lekktu@gmail.com>
+       * image.c (Finit_image_library): Return t for built-in image types,
+       like pbm and xbm.  (Bug#8640)
+ 2011-05-09  Andreas Schwab  <schwab@linux-m68k.org>
+       * w32menu.c (set_frame_menubar): Fix submenu allocation.
+ 2011-05-07  Eli Zaretskii  <eliz@gnu.org>
+       * w32console.c (Fset_screen_color): Doc fix.
+       (Fget_screen_color): New function.
+       (syms_of_ntterm): Defsubr it.
+       * callproc.c (call_process_cleanup): Don't close and unlink the
+       temporary file if Fcall_process didn't create it in the first
+       place.
+       (Fcall_process): Don't create tempfile if stdout of the child
+       process will be redirected to a file specified with `:file'.
+       Don't try to re-open tempfile in that case, and set fd[0] to -1 as
+       cue to call_process_cleanup not to close that handle.
+ 2011-05-07  Ben Key  <bkey76@gmail.com>
+       * makefile.w32-in: The bootstrap-temacs rule now makes use of
+       one of two shell specific rules, either bootstrap-temacs-CMD or
+       bootstrap-temacs-SH.  The bootstrap-temacs-SH rule is identical
+       to the previous implementation of the bootstrap-temacs rule.
+       The bootstrap-temacs-CMD rule is similar to the previous
+       implementation of the bootstrap-temacs rule except that it
+       makes use of the ESC_CFLAGS variable instead of the CFLAGS
+       variable.
+       These changes, along with some changes to nt/configure.bat,
+       nt/gmake.defs, and nt/nmake.defs, are required to extend my
+       earlier fix to add support for --cflags and --ldflags options
+       that include quotes so that it works whether make uses cmd or
+       sh as the shell.
+ 2011-05-06  Michael Albinus  <michael.albinus@gmx.de>
+       * dbusbind.c (QCdbus_type_unix_fd): Declare static.
+       (xd_remove_watch): Don't check QCdbus_type_unix_fd for SYMBOLP, it
+       is a constant.
+       (Fdbus_init_bus, xd_read_queued_messages): Bus can be a symbol or
+       a string.  Handle both cases.
+       (Fdbus_call_method_asynchronously, Fdbus_register_signal)
+       (Fdbus_register_method): Use Qinvalid_function.
+ 2011-05-06  Juanma Barranquero  <lekktu@gmail.com>
+       * makefile.w32-in: Update dependencies.
+       (LISP_H): Add inttypes.h and stdin.h.
+       (PROCESS_H): Add unistd.h.
+ 2011-05-06  Eli Zaretskii  <eliz@gnu.org>
+       * lread.c: Include limits.h (fixes the MS-Windows build broken by
+       2011-05-06T07:13:19Z!eggert@cs.ucla.edu).
+ 2011-05-06  Paul Eggert  <eggert@cs.ucla.edu>
+       * image.c (Finit_image_library) [!HAVE_NTGUI]: Omit unused local.
+       * term.c (vfatal): Remove stray call to va_end.
+       It's not needed and the C Standard doesn't allow it here anyway.
+       Use C99's va_copy to avoid undefined behavior on x86-64 GNU/Linux.
+       * eval.c (verror): doprnt a copy of ap, not the original.  (Bug#8545)
+       * eval.c (verror): OK to create a string of up to MOST_POSITIVE_FIXNUM
+       bytes.
+       * term.c: Don't include <stdarg.h>, as <lisp.h> does that.
+       * callproc.c (Fcall_process): Use 'volatile' to avoid vfork clobbering.
+       * process.c (Fformat_network_address): Fix typo: args2 -> *args2.
+       * xmenu.c (set_frame_menubar): Fix typo: int * -> int (3 times).
+       * coding.c (detect_coding_charset): Fix typo: * 2 -> *4 (Bug#8601).
+       * charset.h (struct charset.code_space): Now has 15 elements, not 16.
+       * charset.c (Fdefine_charset_internal): Don't initialize
+       charset.code_space[15].  The value was garbage, on hosts with
+       32-bit int (Bug#8600).
+       * lread.c (read_integer): Be more consistent with string-to-number.
+       Use string_to_number to do the actual conversion; this avoids
+       rounding errors and fixes some other screwups.  Without this fix,
+       for example, #x1fffffffffffffff was misread as -2305843009213693952.
+       (digit_to_number): Move earlier, for benefit of read_integer.
+       Return -1 if the digit is out of range for the base, -2 if it is
+       not a digit in any supported base.  (Bug#8602)
+       * doprnt.c (doprnt): Support arbitrary pI values, such as "I64".
+       * dispnew.c (scrolling_window): Return 1 if we scrolled,
+       to match comment at start of function.  This also removes a
+       GCC warning about overflow in a 32+64-bit port.
+       * lisp.h (EMACS_INT, EMACS_UINT, BITS_PER_EMACS_INT, pI): Simplify.
+       * dbusbind.c: Do not use XPNTR on a value that may be an integer.
+       Reported by Stefan Monnier in
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00919.html>.
+       (xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages): Use
+       SYMBOLP-guarded XSYMBOL, not XPNTR.
+       * lisp.h (EMACS_INTPTR): Remove.  All uses changed to intptr_t.
+       (EMACS_UINTPTR): Likewise, with uintptr_t.
+       * lisp.h: Prefer 64-bit EMACS_INT if available.
+       (EMACS_INT, EMACS_UINT, BITS_PER_EMACS_INT, pI): Define to 64-bit
+       on 32-bit hosts that have 64-bit int, so that they can access
+       large files.
+       However, temporarily disable this change unless the temporary
+       symbol WIDE_EMACS_INT is defined.
+       * lread.c, process.c: Do not include <inttypes.h>; lisp.h does it now.
+       Prefer intptr_t/uintptr_t for integers the same widths as pointers.
+       This removes an assumption that EMACS_INT and long are the same
+       width as pointers.  The assumption is true for Emacs porting targets
+       now, but we want to make other targets possible.
+       * lisp.h: Include <inttypes.h>, for INTPTR_MAX, UINTPTR_MAX.
+       (EMACS_INTPTR, EMACS_UINTPTR): New macros.
+       In the rest of the code, change types of integers that hold casted
+       pointers to EMACS_INTPTR and EMACS_UINTPTR, systematically
+       replacing EMACS_INT, long, EMACS_UINT, and unsigned long.
+       (XTYPE): Don't cast arg to EMACS_UINT; normally is not needed.
+       (XSET): Cast type of XTYPE arg to EMACS_INTPTR; it is needed here.
+       No need to cast type when ORing.
+       (XPNTR): Return a value of type EMACS_INTPTR or EMACS_UINTPTR.
+       * alloc.c (lisp_align_malloc): Remove a no-longer-needed cast.
+       * doc.c (store_function_docstring): Use EMACS_INTPTR, so as not to
+       assume EMACS_INT is the same width as char *.
+       * gtkutil.c (xg_gtk_scroll_destroy, xg_tool_bar_button_cb):
+       (xg_tool_bar_callback, xg_tool_bar_help_callback, xg_make_tool_item):
+       Remove no-longer-needed casts.
+       (xg_create_scroll_bar, xg_tool_bar_button_cb, xg_tool_bar_callback):
+       (xg_tool_bar_help_callback, xg_make_tool_item):
+       Use EMACS_INTPTR to hold an integer
+       that will be cast to void *; this can avoid a GCC warning
+       if EMACS_INT is not the same width as void *.
+       * menu.c (find_and_call_menu_selection): Remove no-longer-needed cast.
+       * xdisp.c (display_echo_area_1, resize_mini_window_1):
+       (current_message_1, set_message_1):
+       Use a local to convert to proper width without a cast.
+       * xmenu.c (dialog_selection_callback): Likewise.
+       * sysdep.c (get_random): Don't assume EMACS_INT is no wider than long.
+       Also, don't assume VALBITS / RAND_BITS is less than 5,
+       and don't rely on undefined behavior when shifting a 1 left into
+       the sign bit.
+       * lisp.h (get_random): Change signature to match.
+       * lread.c (hash_string): Use size_t, not int, for hash computation.
+       Normally we prefer signed values; but hashing is special, because
+       it's better to use unsigned division on hash table sizes so that
+       the remainder is nonnegative.  Also, size_t is the natural width
+       for hashing into memory.  The previous code used 'int', which doesn't
+       retain enough info to hash well into very large tables.
+       (oblookup, oblookup_last_bucket_number, Funintern): Likewise.
+       * dbusbind.c: Don't possibly lose pointer info when converting.
+       (xd_remove_watch, Fdbus_init_bus, xd_read_queued_messages):
+       Use XPNTR rather than XHASH, so that the high-order bits of
+       the pointer aren't lost when converting through void *.
+       * eval.c (Fautoload): Don't double-shift a pointer.
+       * fns.c (Frandom): Let EMACS_UINT be wider than unsigned long.
+ 2011-05-06  Juanma Barranquero  <lekktu@gmail.com>
+       * gnutls.c (DEF_GNUTLS_FN):
+       * image.c (DEF_IMGLIB_FN): Make function pointers static.
+ 2011-05-05  Andreas Schwab  <schwab@linux-m68k.org>
+       * lread.c (lisp_file_lexically_bound_p): Stop scanning at end
+       marker.  (Bug#8610)
+ 2011-05-05 Eli Zaretskii  <eliz@gnu.org>
+       * w32heap.c (allocate_heap) [USE_LISP_UNION_TYPE || USE_LSB_TAG]:
+       New version that can reserve upto 2GB of heap space.
+ 2011-05-05  Chong Yidong  <cyd@stupidchicken.com>
+       * nsfns.m (Fns_read_file_name): Doc fix (Bug#8534).
+ 2011-05-05  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnutls.c (fn_gnutls_certificate_set_x509_key_file): Add alias to
+       `gnutls_certificate_set_x509_key_file'.
+ 2011-05-05  Juanma Barranquero  <lekktu@gmail.com>
+       * makefile.w32-in ($(BLD)/image.$(O), $(BLD)/process.$(O)):
+       Update dependencies.
+ 2011-05-04  Juanma Barranquero  <lekktu@gmail.com>
+       * gnutls.h (emacs_gnutls_write, emacs_gnutls_read):
+       * gnutls.c (emacs_gnutls_write, emacs_gnutls_read):
+       Remove unused parameter `fildes'.
+       * process.c (read_process_output, send_process): Don't pass it.
+ 2011-05-04  Juanma Barranquero  <lekktu@gmail.com>
+       Fix previous change: the library cache is defined in w32.c.
+       * image.c (CACHE_IMAGE_TYPE) [!HAVE_NTGUI]: Define to noop.
+       (Finit_image_library): Wrap Vlibrary_cache on "#ifdef HAVE_NTGUI".
+ 2011-05-04  Juanma Barranquero  <lekktu@gmail.com>
+       Implement dynamic loading of GnuTLS on Windows.
+       * gnutls.h (GNUTLS_EMACS_ERROR_NOT_LOADED): New macro.
+       (emacs_gnutls_write, emacs_gnutls_read): Mark as extern.
+       (emacs_gnutls_record_check_pending, emacs_gnutls_transport_set_errno):
+       Declare.
+       * gnutls.c (Qgnutls_dll): Define.
+       (DEF_GNUTLS_FN, LOAD_GNUTLS_FN): New macros.
+       (gnutls_*): Declare function pointers.
+       (init_gnutls_functions): New function to initialize function pointers.
+       (emacs_gnutls_handshake, Fgnutls_error_string, Fgnutls_deinit)
+       (emacs_gnutls_global_init, Fgnutls_bye): Use function pointers.
+       (emacs_gnutls_record_check_pending, emacs_gnutls_transport_set_errno):
+       Wrappers for gnutls_record_check_pending and gnutls_transport_set_errno.
+       (emacs_gnutls_write, emacs_gnutls_read)
+       (emacs_gnutls_handle_error, Fgnutls_error_fatalp)
+       (Fgnutls_available_p): New function.
+       (Fgnutls_boot): Call Fgnutls_available_p.  Use function pointers.
+       (syms_of_gnutls) <Qgnutls_dll>: Initialize and staticpro it.
+       (syms_of_gnutls) <Sgnutls_available_p>: defsubr it.
+       * image.c: Include w32.h.
+       (Vimage_type_cache): Delete.
+       (syms_of_image) <Vimage_type_cache>: Don't initialize and staticpro it.
+       (CACHE_IMAGE_TYPE, Finit_image_library): Use Vlibrary_cache instead.
+       (w32_delayed_load): Move to w32.c.
+       * w32.h (VlibraryCache, QCloaded_from, w32_delayed_load): Declare.
+       * w32.c (QCloaded_from, Vlibrary_cache): Define.
+       (w32_delayed_load): Move from image.c.  When loading a library, record
+       its filename in the :loaded-from property of the library id.
+       (globals_of_w32) <QCloaded_from, Vlibrary_cache>:
+       Initialize and staticpro them.
+       (emacs_gnutls_pull, emacs_gnutls_push): Call emacs_gnutls_* functions.
+       * process.c: Include lisp.h before w32.h, not after.
+       (wait_reading_process_output): Call emacs_gnutls_record_check_pending
+       instead of gnutls_record_check_pending.
+       * callproc.c, emacs.c: Include lisp.h before w32.h, not after.
+ 2011-05-04  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnutls.c (Fgnutls_boot): Support :keylist and :crlfiles options
+       instead of :keyfiles.  Give GnuTLS the keylist and the CRL lists
+       as passed in.
+ 2011-05-03  Jan Djärv  <jan.h.d@swipnet.se>
+       * xterm.c (x_set_frame_alpha): Do not set property on anything
+       else than FRAME_X_OUTER_WINDOW (Bug#8608).
+ 2011-05-02  Juanma Barranquero  <lekktu@gmail.com>
+       * sysdep.c (get_tty_size) [WINDOWSNT]: Implement.  (Bug#8596)
+ 2011-05-02  Juanma Barranquero  <lekktu@gmail.com>
+       * gnutls.c (Qgnutls_log_level, Qgnutls_code, Qgnutls_anon)
+       (Qgnutls_x509pki, Qgnutls_e_interrupted, Qgnutls_e_again)
+       (Qgnutls_e_invalid_session, Qgnutls_e_not_ready_for_handshake)
+       (gnutls_global_initialized, Qgnutls_bootprop_priority)
+       (Qgnutls_bootprop_trustfiles, Qgnutls_bootprop_keyfiles)
+       (Qgnutls_bootprop_callbacks, Qgnutls_bootprop_loglevel)
+       (Qgnutls_bootprop_hostname, Qgnutls_bootprop_verify_flags)
+       (Qgnutls_bootprop_verify_error, Qgnutls_bootprop_verify_hostname_error)
+       (Qgnutls_bootprop_callbacks_verify): Make static.
+ 2011-05-01  Andreas Schwab  <schwab@linux-m68k.org>
+       * callproc.c: Indentation fixup.
+       * sysdep.c (wait_for_termination_1): Make static.
+       (wait_for_termination, interruptible_wait_for_termination): Move
+       after wait_for_termination_1.
+ 2011-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * sysdep.c (interruptible_wait_for_termination): New function
+       which is like wait_for_termination, but allows keyboard
+       interruptions.
+       * callproc.c (Fcall_process): Add (:file "file") as an option for
+       the STDOUT buffer.
+       (Fcall_process_region): Ditto.
+ 2011-04-30  Eli Zaretskii  <eliz@gnu.org>
+       * dosfns.c (Fint86, Fdos_memget, Fdos_memput): Use `ASIZE (FOO)'
+       rather than `XVECTOR (FOO)->size'.
+       * process.c: Remove HAVE_INTTYPES_H condition from inclusion of
+       inttypes.h, as a gnulib replacement is used if it not available in
+       system headers.
+ 2011-04-21  Eli Zaretskii  <eliz@gnu.org>
+       Lift the MOST_POSITIVE_FIXNUM/4 limitation on visited files.
+       * fileio.c (Finsert_file_contents): Don't limit file size to 1/4
+       of MOST_POSITIVE_FIXNUM.  (Bug#8528)
+       * coding.c (coding_alloc_by_realloc): Error out if destination
+       will grow beyond MOST_POSITIVE_FIXNUM.
+       (decode_coding_emacs_mule): Abort if there isn't enough place in
+       charbuf for the composition carryover bytes.  Reserve an extra
+       space for up to 2 characters produced in a loop.
+       (decode_coding_iso_2022): Abort if there isn't enough place in
+       charbuf for the composition carryover bytes.
+ 2011-04-21  Eli Zaretskii  <eliz@gnu.org>
+       * doprnt.c (doprnt) [!HAVE_LONG_LONG_INT]: Error out instead of
+       aborting when %lld or %lll format is passed.
+       [!HAVE_UNSIGNED_LONG_LONG_INT]: Error out instead of aborting when
+       %llo or %llx format is passed.  (Bug#8545)
+       * window.c (window_scroll_line_based): Use a marker instead of
+       simple variables to record original value of point.  (Bug#7952)
+       * doprnt.c (doprnt): Fix the case where a multibyte sequence
+       produced by %s or %c overflows available buffer space.  (Bug#8545)
+ 2011-04-28  Paul Eggert  <eggert@cs.ucla.edu>
+       * doprnt.c (doprnt): Omit useless test; int overflow check (Bug#8545).
+       (SIZE_MAX): Move defn after all includes, as they might #define it.
+ 2011-04-28  Juanma Barranquero  <lekktu@gmail.com>
+       * w32.c (init_environment): Warn about defaulting HOME to C:\.
+ 2011-04-28  Juanma Barranquero  <lekktu@gmail.com>
+       * keyboard.c (Qdelayed_warnings_hook): Define.
+       (command_loop_1): Run `delayed-warnings-hook'
+       if Vdelayed_warnings_list is non-nil.
+       (syms_of_keyboard) <delayed-warnings-hook>: DEFSYM it.
+       (syms_of_keyboard) <delayed-warnings-list>: DEFVAR_LISP it.
+ 2011-04-28  Eli Zaretskii  <eliz@gnu.org>
+       * doprnt.c (doprnt): Don't return value smaller than the buffer
+       size if the message was truncated.  (Bug#8545).
+ 2011-04-28  Juanma Barranquero  <lekktu@gmail.com>
+       * w32fns.c (Fx_change_window_property, Fx_delete_window_property)
+       (Fx_window_property): #if-0 the whole functions, not just the bodies.
+ 2011-04-27  Paul Eggert  <eggert@cs.ucla.edu>
+       * doprnt.c (doprnt): Support "ll" length modifier, for long long.
+ 2011-04-27  Juanma Barranquero  <lekktu@gmail.com>
+       * makefile.w32-in: Update dependencies.
+ 2011-04-27  Eli Zaretskii  <eliz@gnu.org>
+       Improve `doprnt' and its usage.  (Bug#8545)
+       * doprnt.c (doprnt): Make sure `format' is never accessed beyond
+       `format_end'.  Remove support for %l as a conversion specifier.
+       Don't use xrealloc.  Improve diagnostics when the %l size modifier
+       is used.  Update the commentary.
+       * eval.c (verror): Simplify calculation of size_t.
+       * coding.c (Ffind_operation_coding_system): Fix diagnostic error
+       messages.
+ 2011-04-27  Yoshiaki Kasahara  <kasahara@nc.kyushu-u.ac.jp>  (tiny change)
+       * buffer.c (init_buffer) [USE_MMAP_FOR_BUFFERS]: Adjust to aliasing
+       change.
+ 2011-04-27  Paul Eggert  <eggert@cs.ucla.edu>
+       * nsmenu.m: Replace all uses of XVECTOR with ASIZE and AREF.
+       This makes this file independent of the recent pseudovector change.
+ 2011-04-26  Paul Eggert  <eggert@cs.ucla.edu>
+       * keyboard.c (handle_user_signal): Fix pointer signedness problem.
+       * gnutls.c (emacs_gnutls_handle_error): Remove unused local.
+       (Fgnutls_boot): gnutls_certificate_verify_peers2 wants unsigned *.
+       Remove unused local.
+       (emacs_gnutls_write): Don't use uninitialized rtnval if nbyte <= 0.
+       * lisp.h: Fix a problem with aliasing and vector headers.  (Bug#8546)
+       GCC 4.6.0 optimizes based on type-based alias analysis.  For
+       example, if b is of type struct buffer * and v of type struct
+       Lisp_Vector *, then gcc -O2 was incorrectly assuming that &b->size
+       != &v->size, and therefore "v->size = 1; b->size = 2; return
+       v->size;" must therefore return 1.  This assumption is incorrect
+       for Emacs, since it type-puns struct Lisp_Vector * with many other
+       types.  To fix this problem, this patch adds a new type struct
+       vectorlike_header that documents the constraints on layout of vectors
+       and pseudovectors, and helps optimizing compilers not get fooled
+       by Emacs's type punning.  It also adds the macros XSETTYPED_PVECTYPE
+       XSETTYPED_PSEUDOVECTOR, TYPED_PSEUDOVECTORP, for similar reasons.
+       * lisp.h (XSETTYPED_PVECTYPE): New macro, specifying the name of
+       the size member.
+       (XSETPVECTYPE): Rewrite in terms of new macro.
+       (XSETPVECTYPESIZE): New macro, specifying both type and size.
+       This is a bit clearer, and further avoids the possibility of
+       undesirable aliasing.
+       (XSETTYPED_PSEUDOVECTOR): New macro, specifying the size.
+       (XSETPSEUDOVECTOR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR.
+       (XSETSUBR): Rewrite in terms of XSETTYPED_PSEUDOVECTOR and XSIZE,
+       since Lisp_Subr is a special case (no "next" field).
+       (ASIZE): Now uses header.size rather than size.  All
+       previous uses of XVECTOR (foo)->size replaced to use this macro,
+       to avoid the hassle of writing XVECTOR (foo)->header.size.
+       (struct vectorlike_header): New type.
+       (TYPED_PSEUDOVECTORP): New macro, also specifying the C type of the
+       object, to help avoid aliasing.
+       (PSEUDOVECTORP): Rewrite in terms of TYPED_PSEUDOVECTORP.
+       (SUBRP): Likewise, since Lisp_Subr is a special case.
+       * lisp.h (struct Lisp_Vector, struct Lisp_Char_Table):
+       (struct Lisp_Sub_Char_Table, struct Lisp_Bool_Vector):
+       (struct Lisp_Hash_Table): Combine first two members into a single
+       struct vectorlike_header member.  All uses of "size" and "next" members
+       changed to be "header.size" and "header.next".
+       * buffer.h (struct buffer): Likewise.
+       * font.h (struct font_spec, struct font_entity, struct font): Likewise.
+       * frame.h (struct frame): Likewise.
+       * process.h (struct Lisp_Process): Likewise.
+       * termhooks.h (struct terminal): Likewise.
+       * window.c (struct save_window_data, struct saved_window): Likewise.
+       * window.h (struct window): Likewise.
+       * alloc.c (allocate_buffer, Fmake_bool_vector, allocate_pseudovector):
+       Use XSETPVECTYPESIZE, not XSETPVECTYPE, to avoid aliasing problems.
+       * buffer.c (init_buffer_once): Likewise.
+       * lread.c (defsubr): Use XSETTYPED_PVECTYPE, since Lisp_Subr is a
+       special case.
+       * process.c (Fformat_network_address): Use local var for size,
+       for brevity.
+       * bytecode.c (exec_byte_code): Don't use XVECTOR before CHECK_VECTOR.
+       Make the Lisp reader and string-to-float more consistent (Bug#8525)
+       * data.c (atof): Remove decl; no longer used or needed.
+       (digit_to_number): Move to lread.c.
+       (Fstring_to_number): Use new string_to_number function, to be
+       consistent with how the Lisp reader treats infinities and NaNs.
+       Do not assume that floating-point numbers represent EMACS_INT
+       without losing information; this is not true on most 64-bit hosts.
+       Avoid double-rounding errors, by insisting on integers when
+       parsing non-base-10 numbers, as the documentation specifies.
+       * lisp.h (string_to_number): New decl, replacing ...
+       (isfloat_string): Remove.
+       * lread.c: Include <inttypes.h>, for uintmax_t and strtoumax.
+       (read1): Do not accept +. and -. as integers; this
+       appears to have been a coding error.  Similarly, do not accept
+       strings like +-1e0 as floating point numbers.  Do not report
+       overflow for integer overflows unless the base is not 10 which
+       means we have no simple and reliable way to continue.
+       Break out the floating-point parsing into a new
+       function string_to_number, so that Fstring_to_number parses
+       floating point numbers consistently with the Lisp reader.
+       (digit_to_number): Moved here from data.c.  Make it static inline.
+       (E_CHAR, EXP_INT): Remove, replacing with ...
+       (E_EXP): New macro, to solve the "1.0e+" problem mentioned below.
+       (string_to_number): New function, replacing isfloat_string.
+       This function checks for valid syntax and produces the resulting
+       Lisp float number too.  Rework it so that string-to-number
+       no longer mishandles examples like "1.0e+".  Use strtoumax,
+       so that overflow for non-base-10 numbers is reported only when
+       there's no portable and simple way to convert to floating point.
+       * textprop.c (set_text_properties_1): Rewrite for clarity,
+       and to avoid GCC warning about integer overflow.
+       * intervals.h (struct interval): Use EMACS_INT for members
+       where EMACS_UINT might cause problems.  See
+       <http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00514.html>.
+       (CHECK_TOTAL_LENGTH): Remove cast to EMACS_INT; no longer needed.
+       * intervals.c (interval_deletion_adjustment): Now returns EMACS_INT.
+       All uses changed.
+       (offset_intervals): Tell GCC not to worry about length overflow
+       when negating a negative length.
+       * alloc.c (overrun_check_malloc, overrun_check_realloc): Now static.
+       (overrun_check_free): Likewise.
+       * alloc.c (SDATA_SIZE) [!GC_CHECK_STRING_BYTES]: Avoid runtime check
+       in the common case where SDATA_DATA_OFFSET is a multiple of Emacs
+       word size.
+       * gnutls.c: Fix problems found by GCC 4.6.0 on Ubuntu 10.10.
+       (gnutls_make_error): Rename local to avoid shadowing.
+       (gnutls_emacs_global_deinit): ifdef out; not used.
+       (Fgnutls_boot): Use const for pointer to readonly storage.
+       Comment out unused local.  Fix pointer signedness problems.
+       * lread.c (openp): Don't stuff size_t into an 'int'.
+       Use <= on length, not < on length + 1, to avoid GCC 4.6.0 warning
+       about possible signed overflow.
+       * gtkutil.c: Fix problems found by GCC 4.6.0 on Ubuntu 10.10.
+       (GDK_KEY_g): Don't define if already defined.
+       (xg_prepare_tooltip): Avoid pointer signedness problem.
+       (xg_set_toolkit_scroll_bar_thumb): Redo to avoid two casts.
+       * process.c (Fnetwork_interface_info): Avoid left-shift undefined
+       behavior with 1 << 31.  GCC 4.6.0 warns about this on 32-bit hosts.
+       * xfns.c (Fx_window_property): Simplify a bit,
+       to make a bit faster and to avoid GCC 4.6.0 warning.
+       * xselect.c (x_get_window_property, x_handle_dnd_message): Likewise.
+       * fns.c (internal_equal): Don't assume size_t fits in int.
+       * alloc.c (compact_small_strings): Tighten assertion a little.
+       Replace pEd with more-general pI, and fix some printf arg casts.
+       * lisp.h (pI): New macro, generalizing old pEd macro to other
+       conversion specifiers.  For example, use "...%"pI"d..." rather
+       than "...%"pEd"...".
+       (pEd): Remove.  All uses replaced with similar uses of pI.
+       * src/m/amdx86-64.h, src/m/ia64.h, src/m/ibms390x.h: Likewise.
+       * alloc.c (check_pure_size): Don't overflow by converting size to int.
+       * bidi.c (bidi_dump_cached_states): Use pI to avoid cast.
+       * data.c (Fnumber_to_string): Use pI instead of if-then-else-abort.
+       * dbusbind.c (xd_append_arg): Use pI to avoid cast.
+       (Fdbus_method_return_internal, Fdbus_method_error_internal): Likewise.
+       * font.c (font_unparse_xlfd): Avoid potential buffer overrun on
+       64-bit hosts.
+       (font_unparse_xlfd, font_unparse_fcname): Use pI to avoid casts.
+       * keyboard.c (record_char, modify_event_symbol): Use pI to avoid casts.
+       * print.c (safe_debug_print, print_object): Likewise.
+       (print_object): Don't overflow by converting EMACS_INT or EMACS_UINT
+       to int.
+       Use pI instead of if-then-else-abort.  Use %p to avoid casts,
+       avoiding the 0 flag, which is not portable.
+       * process.c (Fmake_network_process): Use pI to avoid cast.
+       * region-cache.c (pp_cache): Likewise.
+       * xdisp.c (decode_mode_spec): Likewise.
+       * xrdb.c (x_load_resources) [USE_MOTIF]: Use pI to avoid undefined
+       behavior on 64-bit hosts with printf arg.
+       * xselect.c (x_queue_event): Use %p to avoid casts, avoiding 0 flag.
+       (x_stop_queuing_selection_requests): Likewise.
+       (x_get_window_property): Don't truncate byte count to an 'int'
+       when tracing.
+       * frame.c (frame_name_fnn_p): Get rid of strtol, which isn't right
+       here, since it parses constructs like leading '-' and spaces,
+       which are not wanted; and it overflows with large numbers.
+       Instead, simply match F[0-9]+, which is what is wanted anyway.
+       * alloc.c: Remove unportable assumptions about struct layout.
+       (SDATA_SELECTOR, SDATA_DATA_OFFSET): New macros.
+       (SDATA_OF_STRING, SDATA_SIZE, allocate_string_data):
+       (allocate_vectorlike, make_pure_vector): Use the new macros,
+       plus offsetof, to remove unportable assumptions about struct layout.
+       These assumptions hold on all porting targets that I know of, but
+       they are not guaranteed, they're easy to remove, and removing them
+       makes further changes easier.
+       * alloc.c (BLOCK BYTES): Fix typo by changing "ablock" to "ablocks".
+       This doesn't fix a bug but makes the code clearer.
+       (string_overrun_cookie): Now const.  Use initializers that
+       don't formally overflow signed char, to avoid warnings.
+       (allocate_string_data) [GC_CHECK_STRING_OVERRUN]: Fix typo that
+       can cause Emacs to crash when string overrun checking is enabled.
+       (allocate_buffer): Don't assume sizeof (struct buffer) is a
+       multiple of sizeof (EMACS_INT); it need not be, if
+       alignof(EMACS_INT) < sizeof (EMACS_INT).
+       (check_sblock, check_string_bytes, check_string_free_list): Protoize.
+ 2011-04-26  Juanma Barranquero  <lekktu@gmail.com>
+       * keyboard.c (QCrtl): Rename from Qrtl.  All uses changed.
+ 2011-04-26  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnutls.c (emacs_gnutls_handshake): Return an error if we're not
+       supposed to be handshaking.  (Bug#8556)
+       Reported by Paul Eggert <eggert@cs.ucla.edu>.
+ 2011-04-26  Daniel Colascione  <dan.colascione@gmail.com>
+       * lisp.h (Qdebug): List symbol.
+       * eval.c (Qdebug): Restore global linkage.
+       * keyboard.c (debug-on-event): New variable.
+       (handle_user_signal): Break into debugger when debug-on-event
+       matches the current signal symbol.
+ 2011-04-25  Dan Nicolaescu  <dann@ics.uci.edu>
+       * alloc.c (check_sblock, check_string_bytes)
+       (check_string_free_list): Convert to standard C.
+ 2011-04-25  Teodor Zlatanov  <tzz@lifelogs.com>
+       * w32.c (emacs_gnutls_push): Fix typo.
+ 2011-04-25  Eli Zaretskii  <eliz@gnu.org>
+       * gnutls.c (emacs_gnutls_handshake): Avoid compiler warnings about
+       "cast to pointer from integer of different size".
+       Improve doprnt and its use in verror.  (Bug#8545)
+       * doprnt.c (doprnt): Document the set of format control sequences
+       supported by the function.  Use SAFE_ALLOCA instead of always
+       using `alloca'.
+       * eval.c (verror): Don't limit the buffer size at size_max-1, that
+       is one byte too soon.  Don't use xrealloc; instead xfree and
+       xmalloc anew.
+ 2011-04-24  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnutls.h: Add GNUTLS_STAGE_CALLBACKS enum to denote we're in the
+       callbacks stage.
+       * gnutls.c: Renamed global_initialized to
+       gnutls_global_initialized.  Added internals for the
+       :verify-hostname-error, :verify-error, and :verify-flags
+       parameters of `gnutls-boot' and documented those parameters in the
+       docstring.  Start callback support.
+       (emacs_gnutls_handshake): Add Woe32 support. Retry handshake
+       unless a fatal error occured. Call gnutls_alert_send_appropriate
+       on error. Return error code.
+       (emacs_gnutls_write): Call emacs_gnutls_handle_error.
+       (emacs_gnutls_read): Likewise.
+       (Fgnutls_boot): Return handshake error code.
+       (emacs_gnutls_handle_error): New function.
+       (wsaerror_to_errno): Likewise.
+       * w32.h (emacs_gnutls_pull): Add prototype.
+       (emacs_gnutls_push): Likewise.
+       * w32.c (emacs_gnutls_pull): New function for GnuTLS on Woe32.
+       (emacs_gnutls_push): Likewise.
+ 2011-04-24  Claudio Bley  <claudio.bley@gmail.com>  (tiny change)
+       * process.c (wait_reading_process_output): Check if GnuTLS
+       buffered some data internally if no FDs are set for TLS
+       connections.
+       * makefile.w32-in (OBJ2): Add gnutls.$(O).
+       (LIBS): Link to USER_LIBS.
+       ($(BLD)/gnutls.$(0)): New target.
+ 2011-04-24  Eli Zaretskii  <eliz@gnu.org>
+       * xdisp.c (handle_single_display_spec): Rename the
+       display_replaced_before_p argument into display_replaced_p, to
+       make it consistent with the commentary.  Fix typos in the
+       commentary.
+       * textprop.c (syms_of_textprop): Remove dead code.
+       (copy_text_properties): Delete obsolete commentary about an
+       interface that was deleted long ago.  Fix typos in the description
+       of arguments.
+       * msdos.c (XMenuActivate, XMenuAddSelection): Adjust argument list
+       to changes in oldXMenu/XMenu.h from 2011-04-16.
+       <menu_help_message, prev_menu_help_message>: Constify.
+       (IT_menu_make_room): menu->help_text is now `const char **';
+       adjust.
+       * msdos.h (XMenuActivate, XMenuAddSelection): Adjust prototypes
+       to changes in oldXMenu/XMenu.h from 2011-04-16.
+       (struct XMenu): Declare `help_text' `const char **'.
+       * xfaces.c <Qunspecified>: Make extern again.
+       * syntax.c: Include sys/types.h before including regex.h, as
+       required by Posix.
+       * doc.c (get_doc_string): Improve the format passed to `error'.
+       * doprnt.c (doprnt): Improve commentary.
+       * term.c (init_tty) [MSDOS]: Fix 1st argument to maybe_fatal.
+       * Makefile.in (TAGS): Depend on $(M_FILE) and $(S_FILE), and scan
+       them with etags.
+       * makefile.w32-in (globals.h): Add a dummy recipe, to make any
+       changes in globals.h immediately force recompilation.
+       (TAGS): Depend on $(CURDIR)/m/intel386.h and
+       $(CURDIR)/s/ms-w32.h.
+       (TAGS-gmake): Scan $(CURDIR)/m/intel386.h and $(CURDIR)/s/ms-w32.h.
+       * character.c (Fchar_direction): Function deleted.
+       (syms_of_character): Don't defsubr it.
+       <char-direction-table>: Deleted.
+ 2011-04-23  Eli Zaretskii  <eliz@gnu.org>
+       Fix doprnt so it could be used again safely in `verror'.  (Bug#8435)
+       * doprnt.c: Include limits.h.
+       (SIZE_MAX): New macro.
+       (doprnt): Return a size_t value.  2nd arg is now size_t.  Many
+       local variables are now size_t instead of int or unsigned.
+       Improve overflow protection.  Support `l' modifier for integer
+       conversions.  Support %l conversion.  Don't assume an EMACS_INT
+       argument for integer conversions and for %c.
+       * lisp.h (doprnt): Restore prototype.
+       * makefile.w32-in ($(BLD)/callint.$(O)): Depend on
+       $(SRC)/character.h.
+       * Makefile.in (base_obj): Add back doprnt.o.
+       * deps.mk (doprnt.o): Add back prerequisites.
+       (callint.o): Depend on character.h.
+       * eval.c (internal_lisp_condition_case): Include the handler
+       representation in the error message.
+       (verror): Call doprnt instead of vsnprintf.  Fix an off-by-one bug
+       when breaking from the loop.
+       * xdisp.c (vmessage): Call doprnt instead of vsnprintf.
+       * callint.c (Fcall_interactively): When displaying error message
+       about invalid control letter, pass the character's codepoint, not
+       a pointer to its multibyte form.  Improve display of the character
+       in octal and display also its hex code.
+       * character.c (char_string): Use %x to display the (unsigned)
+       codepoint of an invalid character, to avoid displaying a bogus
+       negative value.
+       * font.c (check_otf_features): Pass SDATA of SYMBOL_NAME to
+       `error', not SYMBOL_NAME itself.
+       * coding.c (Fencode_sjis_char, Fencode_big5_char): Use %c for
+       character arguments to `error'.
+       * charset.c (check_iso_charset_parameter): Fix incorrect argument
+       to `error' in error message about FINAL_CHAR argument.  Make sure
+       FINAL_CHAR is a character, and use %c when it is passed as
+       argument to `error'.
+ 2011-04-23  Eli Zaretskii  <eliz@gnu.org>
+       * s/ms-w32.h (localtime): Redirect to sys_localtime.
+       * w32.c: Include <time.h>.
+       (sys_localtime): New function.
+ 2011-04-23  Chong Yidong  <cyd@stupidchicken.com>
+       * xdisp.c (init_xdisp): Initialize echo_area_window (Bug#6451).
+       * buffer.c (syms_of_buffer): Doc fix (Bug#6902).
+ 2011-04-23  Samuel Thibault  <sthibault@debian.org>  (tiny change)
+       * sysdep.c (wait_for_termination): On GNU Hurd, kill returns -1 on
+       zombies (Bug#8467).
+ 2011-04-19  Eli Zaretskii  <eliz@gnu.org>
+       * syntax.h (SETUP_SYNTAX_TABLE_FOR_OBJECT): Fix setting of
+       gl_state.e_property when gl_state.object is Qt.
+       * insdel.c (make_gap_larger): Remove limitation of buffer size
+       to <= INT_MAX.
+ 2011-04-18  Chong Yidong  <cyd@stupidchicken.com>
+       * xdisp.c (lookup_glyphless_char_display)
+       (produce_glyphless_glyph): Handle cons cell entry in
+       glyphless-char-display.
+       (Vglyphless_char_display): Document it.
+       * term.c (produce_glyphless_glyph): Handle cons cell entry in
+       glyphless-char-display.
+ 2011-04-17  Chong Yidong  <cyd@stupidchicken.com>
+       * xdisp.c (get_next_display_element): Remove unnecessary ifdefs.
+       * termhooks.h (FRAME_WINDOW_P): Remove duplicated definitions.
+       * dispextern.h (FACE_SUITABLE_FOR_ASCII_CHAR_P): Add missing
+       definition for no-X builds.
+ 2011-04-16  Paul Eggert  <eggert@cs.ucla.edu>
+       Static checks with GCC 4.6.0 and non-default toolkits.
+       * s/sol2-6.h, s/unixware.h (PTY_TTY_NAME_SPRINTF): Protoize decl.
+       * process.c (keyboard_bit_set): Define only if SIGIO.
+       (send_process_trap): Mark it with NO_RETURN if it doesn't return.
+       (send_process): Repair possible setjmp clobbering.
+       * s/usg5-4-common.h (SETUP_SLAVE_PTY): Don't pass extra arg to 'fatal'.
+       * eval.c: Include <stdio.h>, for vsnprintf on non-GNU/Linux hosts.
+       * data.c (arith_error): Mark with NO_RETURN if it doesn't return.
+       * alloc.c (bytes_used_when_full, SPARE_MEMORY, BYTES_USED):
+       Define only if needed.
+       * sysdep.c (_FILE_OFFSET_BITS): Make this hack even uglier
+       by pacifying GCC about it.  Maybe it's time to retire it?
+       * xfaces.c (USG, __TIMEVAL__): Likewise.
+       * dispextern.h (struct redisplay_interface): Rename param
+       to avoid shadowing.
+       * termhooks.h (struct terminal): Likewise.
+       * xterm.c (xembed_send_message): Likewise.
+       * insdel.c (make_gap_smaller): Define only if
+       USE_MMAP_FOR_BUFFERS || REL_ALLOC || DOUG_LEA_MALLOC.
+       * keyboard.c (read_char): Make a var volatile so longjmp won't clobber
+       it.
+       * emacs.c (MAX_HEAP_BSS_DIFF, my_edata): Move to where they're used,
+       so that we aren't warned about unused symbols.
+       * xfns.c (Fx_file_dialog): Rename local to avoid shadowing.
+       * xdisp.c (x_produce_glyphs): Mark var as initialized (Bug#8512).
+       * xfns.c (x_real_positions): Mark locals as initialized.
+       * xmenu.c (xmenu_show): Don't use uninitialized vars.
+       * xterm.c: Fix problems found by static analysis with other toolkits.
+       (toolkit_scroll_bar_interaction): Define and use only if USE_X_TOOLKIT.
+       (x_dispatch_event): Declare static if USE_GTK, and
+       define if USE_GTK || USE_X_TOOLKIT.
+       (SET_SAVED_BUTTON_EVENT): Define only if USE_X_TOOLKIT || USE_GTK.
+       * xterm.h (x_dispatch_event): Extern only if USE_X_TOOLKIT.
+       * xterm.c, xterm.h (x_mouse_leave): Bring this function back, but only
+       if defined HAVE_MENUS && !defined USE_X_TOOLKIT && !defined USE_GTK.
+       * xmenu.c (menu_help_callback): Pointer type fixes.
+       Use const pointers when pointing at readonly data.  Avoid pointer
+       signedness clashes.
+       (FALSE): Remove unused macro.
+       (update_frame_menubar): Remove unused decl.
+       * xfns.c (Fx_hide_tip): Move locals to avoid shadowing.
+       * menu.c (push_submenu_start, push_submenu_end): Do not define unless
+       USE_X_TOOLKIT || USE_GTK || HAVE_NS || defined HAVE_NTGUI.
+       (single_menu_item): Rename local to avoid shadowing.
+       * keyboard.c (make_lispy_event): Remove unused local var.
+       * frame.c, frame.h (x_get_resource_string): Bring this back, but
+       only if HAVE_X_WINDOWS && !USE_X_TOOLKIT.
+       * bitmaps: Change bitmaps from unsigned char back to the X11
+       compatible char.  Avoid the old compiler warnings about
+       out-of-range initializers by using, for example, '\xab' rather
+       than 0xab.
+       * xgselect.c (xgselect_initialize): Check vs interface
+       even if ! (defined (USE_GTK) || defined (HAVE_GCONF)).
+       * xmenu.c (xmenu_show): Rename parm to avoid shadowing.
+       * xterm.c (x_create_toolkit_scroll_bar): Use const * for pointers
+       to read-only memory.
+       * fns.c (vector): Remove; this old hack is no longer needed.
+       * xsmfns.c (create_client_leader_window): Rename shadowing arg.
+       Remove unused var.
+       (gdk_x11_set_sm_client_id) [!USE_GTK]: Don't define.
+       * xrdb.c (x_load_resources): Omit unused local.
+       * xfns.c (free_frame_menubar, atof): Remove duplicate decls.
+       (x_window): Rename locals to avoid shadowing.
+       (USG): Use the kludged USG macro, to pacify gcc.
+       * xterm.c (x_alloc_nearest_color_for_widget): Remove; unused.
+       (x_term_init): Remove local to avoid shadowing.
+       * xfns.c, xterm.c (_XEditResCheckMessages): Protoize decl.
+       * xdisp.c, dispextern.h (set_vertical_scroll_bar): Now extern if
+       USE_TOOLKIT_SCROLL_BARS && !USE_GTK, as xterm.c needs it then.
+ 2011-04-16  Eli Zaretskii  <eliz@gnu.org>
+       * gnutls.c (Fgnutls_boot): Don't pass Lisp_Object to `error'.
+       Fix regex.c, syntax.c and friends for buffers > 2GB.
+       * syntax.h (struct gl_state_s): Declare character position members
+       EMACS_INT.
+       * syntax.c (update_syntax_table): Declare 2nd argument EMACS_INT.
+       * textprop.c (verify_interval_modification, interval_of): Declare
+       arguments EMACS_INT.
+       * intervals.c (adjust_intervals_for_insertion): Declare arguments
+       EMACS_INT.
+       * intervals.h (CHECK_TOTAL_LENGTH): Cast to EMACS_INT, not `int'.
+       * indent.c (Fvertical_motion): Local variable it_start is now
+       EMACS_INT.
+       * regex.c (re_match, re_match_2, re_match_2_internal)
+       (bcmp_translate, regcomp, regexec, print_double_string)
+       (group_in_compile_stack, re_search, re_search_2, regex_compile)
+       (re_compile_pattern, re_exec): Declare arguments and local
+       variables `size_t' and `ssize_t' and return values `regoff_t', as
+       appropriate.
+       (POP_FAILURE_REG_OR_COUNT) <pfreg>: Declare `long'.
+       (CHECK_INFINITE_LOOP) <failure>: Declare `ssize_t'.
+       <compile_stack_type>: `size' and `avail' are now `size_t'.
+       * regex.h <regoff_t>: Use ssize_t, not int.
+       (re_search, re_search_2, re_match, re_match_2): Arguments that
+       specify buffer/string position and length are now ssize_t and
+       size_t.  Return type is regoff_t.
+ 2011-04-16  Ben Key  <bkey76@gmail.com>
+       * nsfont.m: Fixed bugs in ns_get_family and
+       ns_descriptor_to_entity that were caused by using free to
+       deallocate memory blocks that were allocated by xmalloc (via
+       xstrdup).  This caused Emacs to crash when compiled with
+       XMALLOC_OVERRUN_CHECK defined (when Emacs was configured with
+       --enable-checking=xmallocoverrun).  xfree is now used to
+       deallocate these memory blocks.
+ 2011-04-15  Paul Eggert  <eggert@cs.ucla.edu>
+       * sysdep.c (emacs_read): Remove unnecessary check vs MAX_RW_COUNT.
+       emacs_write: Accept and return EMACS_INT for sizes.
+       See http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00514.html
+       et seq.
+       * gnutls.c, gnutls.h (emacs_gnutls_read, emacs_gnutls_write):
+       Accept and return EMACS_INT.
+       (emacs_gnutls_write): Return the number of bytes written on
+       partial writes.
+       * sysdep.c, lisp.h (emacs_read, emacs_write): Likewise.
+       (emacs_read, emacs_write): Remove check for negative size, as the
+       Emacs source code has been audited now.
+       * sysdep.c (MAX_RW_COUNT): New macro, to work around kernel bugs.
+       (emacs_read, emacs_write): Use it.
+       * process.c (send_process): Adjust to the new signatures of
+       emacs_write and emacs_gnutls_write.  Do not attempt to store
+       a byte offset into an 'int'; it might overflow.
+       See http://lists.gnu.org/archive/html/emacs-devel/2011-04/msg00483.html
+       * sound.c: Don't assume sizes fit in 'int'.
+       (struct sound_device.period_size, alsa_period_size):
+       Return EMACS_INT, not int.
+       (struct sound_device.write, vox_write, alsa_write):
+       Accept EMACS_INT, not int.
+       (wav_play, au_play): Use EMACS_INT to store sizes and to
+       record read return values.
+ 2011-04-15  Ben Key  <bkey76@gmail.com>
+       * keyboard.c (Qundefined): Don't declare static since it is used
+       in nsfns.m.
+       * xfaces.c (Qbold, Qexpanded, Qitalic, Qcondensed): Don't declare
+       static since they are used in nsfont.m.
+ 2011-04-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+       * process.c (Qprocessp): Don't declare static.
+       * lisp.h (Qprocessp): Declare again.
+ 2011-04-15  Juanma Barranquero  <lekktu@gmail.com>
+       * font.c (Qopentype): Don't make static (used from w32uniscribe.c).
+ 2011-04-14  Paul Eggert  <eggert@cs.ucla.edu>
+       Improve C-level modularity by making more things 'static'.
+       Don't publish debugger-only interfaces to other modules.
+       * lisp.h (safe_debug_print, debug_output_compilation_hack):
+       (verify_bytepos, count_markers): Move decls to the only modules
+       that need them.
+       * region-cache.h (pp_cache): Likewise.
+       * window.h (check_all_windows): Likewise.
+       * marker.c, print.c, region-cache.c, window.c: Decls moved here.
+       * sysdep.c (croak): Now static, if
+       defined TIOCNOTTY || defined USG5 || defined CYGWIN.
+       * syssignal.h (croak): Declare only if not static.
+       * alloc.c (refill_memory_reserve): Now static if
+       !defined REL_ALLOC || defined SYSTEM_MALLOC.
+       * lisp.h (refill_memory_reserve): Declare only if not static.
+       * xsettings.c, xsettings.h (xsettings_get_system_normal_font):
+       Define only if USE_LUCID.
+       * xrdb.c (x_customization_string, x_rm_string): Now static.
+       * xmenu.c (x_menu_wait_for_event): Export only if USE_MOTIF.
+       * xterm.h (x_menu_wait_for_event): Declare only if USE_MOTIF.
+       * xdisp.c (draw_row_with_mouse_face): Now static.
+       * dispextern.h (draw_row_with_mouse_fave): Remove decl.
+       * window.h (check_all_windows): Mark externally visible.
+       * window.c (window_deletion_count): Now static.
+       * undo.c: Make symbols static if they're not exported.
+       (last_undo_buffer, last_boundary_position, pending_boundary):
+       Now static.
+       * textprop.c (interval_insert_behind_hooks): Now static.
+       (interval_insert_in_front_hooks): Likewise.
+       * term.c: Make symbols static if they're not exported.
+       (tty_turn_off_highlight, get_tty_terminal, max_frame_cols):
+       (max_frame_lines, tty_set_terminal_modes):
+       (tty_reset_terminal_modes, tty_turn_off_highlight):
+       (get_tty_terminal): Now static.
+       (term_mouse_moveto): Do not define if HAVE_WINDOW_SYSTEM.
+       * termhooks.h (term_mouse_moveto): Do not declare if
+       HAVE_WINDOW_SYSTEM.
+       * dispextern.h (tty_set_terminal_modes, tty_reset_terminal_modes):
+       (tty_turn_off_highlight, get_tty_terminal): Remove decls.
+       * sysdep.c: Make symbols static if they're not exported.
+       (emacs_get_tty, emacs_set_tty, old_fcntl_flags, old_fcntl_owner):
+       Now static.
+       (sigprocmask_set, full_mask): Remove; unused.
+       (wait_debugging): Mark as visible.
+       * syssignal.h (SIGFULLMASK, full_mask): Remove decls.
+       * systty.h (emacs_get_tty, emacs_set_tty): Remove decls.
+       * syntax.c (syntax_temp): Define only if !__GNUC__.
+       * sound.c (current_sound_device, current_sound): Now static.
+       * search.c (searchbufs, searchbuf_head): Now static.
+       * scroll.c (scroll_cost): Remove; unused.
+       * dispextern.h (scroll_cost): Remove decl.
+       * region-cache.h (pp_cache): Mark as externally visible.
+       * process.c: Make symbols static if they're not exported.
+       (process_tick, update_tick, create_process, chan_process):
+       (Vprocess_alist, proc_buffered_char, datagram_access):
+       (fd_callback_data, send_process_frame, process_sent_to): Now static.
+       (deactivate_process): Mark defn as static, as well as decl.
+       * lisp.h (create_process): Remove decl.
+       * process.h (chan_process, Vprocess_alist): Remove decls.
+       * print.c: Make symbols static if they're not exported.
+       (print_depth, new_backquote_output, being_printed, print_buffer):
+       (print_buffer_size, print_buffer_pos, print_buffer_pos_byte):
+       (print_interval, print_number_index, initial_stderr_stream):
+       Now static.
+       * lisp.h (Fprinc): Remove decl.
+       (debug_output_compilation_hack): Mark as externally visible.
+       * sysdep.c (croak): Move decl from here to syssignal.h.
+       * syssignal.h (croak): Put it here, so the API can be checked when
+       'croak' is called from dissociate_if_controlling_tty.
+       * minibuf.c: Make symbols static if they're not exported.
+       (minibuf_save_list, choose_minibuf_frame): Now static.
+       * lisp.h (choose_minibuf_frame): Remove decl.
+       * lisp.h (verify_bytepos, count_markers): Mark as externally visible.
+       * lread.c: Make symbols static if they're not exported.
+       (read_objects, initial_obarray, oblookup_last_bucket_number):
+       Now static.
+       (make_symbol): Remove; unused.
+       * lisp.h (initial_obarray, make_symbol): Remove decls.
+       * keyboard.c: Make symbols static if they're not exported.
+       (single_kboard, recent_keys_index, total_keys, recent_keys):
+       (this_command_key_count_reset, raw_keybuf, raw_keybuf_count):
+       (this_single_command_key_start, echoing, last_auto_save):
+       (read_key_sequence_cmd, dribble, recursive_edit_unwind):
+       (command_loop, echo_now, keyboard_init_hook, help_char_p):
+       (quit_throw_to_read_char, command_loop_2, top_level_1, poll_timer):
+       (Vlispy_mouse_stem, double_click_count):
+       Now static.
+       (force_auto_save_soon): Define only if SIGDANGER.
+       (ignore_mouse_drag_p): Now static if
+       !defined HAVE_WINDOW_SYSTEM || defined USE_GTK || defined HAVE_NS.
+       (print_help): Remove; unused.
+       (stop_character, last_timer_event): Mark as externally visible.
+       * keyboard.h (ignore_mouse_drag_p): Declare only if
+       defined HAVE_WINDOW_SYSTEM && !defined USE_GTK && !defined HAVE_NS.
+       (echo_now, help_char_p, quit_throw_to_read_char): Remove decls.
+       * lisp.h (echoing): Remove decl.
+       (force_auto_save_soon): Declare only if SIGDANGER.
+       * xdisp.c (redisplay_window): Simplify code, to make it more
+       obvious that ignore_mouse_drag_p is not accessed if !defined
+       USE_GTK && !defined HAVE_NS.
+       * intervals.c: Make symbols static if they're not exported.
+       (merge_properties_sticky, merge_interval_right, delete_interval):
+       Now static.
+       * intervals.h (merge_interval_right, delete_interval): Remove decls.
+       * insdel.c: Make symbols static if they're not exported.
+       However, leave prepare_to_modify_buffer alone.  It's never
+       called from outside this function, but that appears to be a bug.
+       (combine_after_change_list, combine_after_change_buffer):
+       (adjust_after_replace, signal_before_change): Now static.
+       (adjust_after_replace_noundo): Remove; unused.
+       * lisp.h (adjust_after_replace, adjust_after_replace_noundo):
+       (signal_before_change): Remove decls.
+       * indent.c (val_compute_motion, val_vmotion): Now static.
+       * image.c: Make symbols static if they're not exported.
+       * dispextern.h (x_create_bitmap_from_xpm_data): Do not declare
+       if USE_GTK.
+       * image.c (x_create_bitmap_from_xpm_data): Do not define if USE_GTK.
+       (xpm_color_cache, ct_table, ct_colors_allocated): Now static.
+       * fringe.c (standard_bitmaps): Now static.
+       (max_used_fringe_bitmap): Now static, unless HAVE_NS.
+       * frame.c: Make symbols static if they're not exported.
+       (x_report_frame_params, make_terminal_frame): Now static.
+       (get_frame_param): Now static, unless HAVE_NS.
+       (x_fullscreen_adjust): Define if WINDOWSNT, not if HAVE_WINDOW_SYSTEM.
+       (x_get_resource_string): Remove; not used.
+       * frame.h (make_terminal_frame, x_report_frame_params):
+       (x_get_resource_string); Remove decls.
+       (x_fullscreen_adjust): Declare only if WINDOWSNT.
+       * lisp.h (get_frame_param): Declare only if HAVE_NS.
+       * font.c, fontset.c: Make symbols static if they're not exported.
+       * dispextern.h (FACE_SUITABLE_FOR_ASCII_CHAR_P): New macro.
+       (FACE_SUITABLE_FOR_CHAR_P): Use it.
+       * font.c (font_close_object): Now static.
+       * font.h (font_close_object): Remove.
+       * fontset.c (FONTSET_OBJLIST): Remove.
+       (free_realized_fontset) #if-0 the body, which does nothing.
+       (face_suitable_for_char_p): #if-0, as it's never called.
+       * fontset.h (face_suitable_for_char_p): Remove decl.
+       * xfaces.c (face_at_string_position): Use
+       FACE_SUITABLE_FOR_ASCII_CHAR_P, not FACE_SUITABLE_FOR_CHAR_P,
+       since 0 is always ASCII.
+       * fns.c (weak_hash_tables): Now static.
+       * fileio.c: Make symbols static if they're not exported.
+       (auto_saving, auto_save_mode_bits, auto_save_error_occurred):
+       (Vwrite_region_annotation_buffers): Now static.
+       * eval.c: Make symbols static if they're not exported.
+       (backtrace_list, lisp_eval_depth, when_entered_debugger): Now static.
+       * lisp.h (backtrace_list): Remove decl.
+       * emacs.c: Make symbols static if they're not exported.
+       (malloc_state_ptr, malloc_using_checking, syms_of_emacs):
+       (fatal_error_code, fatal_error_signal_hook, standard_args):
+       Now static.
+       (fatal_error_signal): Now static, unless FLOAT_CATCH_SIGKILL.
+       (DEFINE_DUMMY_FUNCTION): Mark function as externally visible.
+       (__CTOR_LIST__, __DTOR_LIST__): Now externally visible.
+       * lisp.h (fatal_error_signal_hook): Remove decl.
+       (fatal_error_signal): Declare only if FLOAT_CATCH_SIGKILL.
+       * editfns.c: Move a (normally-unused) function to its only use.
+       * editfns.c, lisp.h (get_operating_system_release): Remove.
+       * process.c (init_process) [DARWIN_OS]: Do it inline, as it is not
+       worth the hassle of breaking this out.
+       * xterm.c: Make symbols static if they're not exported.
+       (x_raise_frame, x_lower_frame, x_wm_set_window_state):
+       (x_wm_set_icon_pixmap, x_initialize, XTread_socket_fake_io_error):
+       (x_destroy_window, x_delete_display):
+       Now static.
+       (x_dispatch_event): Now static if ! (USE_MOTIF || USE_X_TOOLKIT).
+       (x_mouse_leave): Remove; unused.
+       * xterm.h (x_display_info_for_name, x_raise_frame, x_lower_frame):
+       (x_destroy_window, x_wm_set_window_state, x_wm_set_icon_pixmap):
+       (x_delete_display, x_initialize, x_set_border_pixel, x_screen_planes):
+       Remove decls.
+       (x_mouse_leave): Declare only if WINDOWSNT.
+       (x_dispatch_event): Declare only if USE_MOTIF or USE_X_TOOLKIT.
+       (xic_create_fontsetname): Declare only if HAVE_X_WINDOWS &&
+       USE_X_TOOLKIT.
+       * ftxfont.c: Make symbols static if they're not exported.
+       (ftxfont_driver): Export only if !defined HAVE_XFT && def8ined
+       HAVE_FREETYPE.
+       * font.h (ftxfont_driver): Likewise.
+       * xfns.c: Make symbols static if they're not exported.
+       (x_last_font_name, x_display_info_for_name):
+       (x_set_foreground_color, x_set_background_color, x_set_mouse_color):
+       (x_set_cursor_color, x_set_border_pixel, x_set_border_color):
+       (x_set_cursor_type, x_set_icon_type, x_set_icon_name):
+       (x_set_scroll_bar_foreground, x_set_scroll_bar_background):
+       (x_explicitly_set_name, x_set_title, xic_defaut_fontset, tip_timer):
+       (last_show_tip_args): Now static.
+       (xic_defaut_fontset, xic_create_fontsetname): Define only if
+       defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT
+       (x_screen_planes): Remove; unused.
+       * dispextern.h (x_screen_planes): Remove decl.
+       * dispnew.c: Make symbols static if they're not exported.
+       * dispextern.h (redraw_garbaged_frames, scrolling):
+       (increment_row_positions): Remove.
+       * dispnew.c (new_glyph_matrix, increment_row_positions, scrolling):
+       (delayed_size_change, glyph_matrix_count, glyph_pool_count):
+       Now static.
+       (redraw_garbaged_frames): Remove; unused.
+       * xfaces.c: Make symbols static if they're not exported.
+       * dispextern.h (ascii_face_of_lisp_face, free_realized_face):
+       Remove decls.
+       * xterm.h (defined_color): Remove decls.
+       (x_free_dpy_colors): Declare only if USE_X_TOOLKIT.
+       * xfaces.c (tty_suppress_bold_inverse_default_colors_p):
+       (menu_face_changed_default, defined_color, free_realized_face):
+       (x_free_dpy_colors): Define only if USE_X_TOOLKIT.
+       (ascii_face_of_lisp_face): Remove; unused.
+       * xdisp.c: Make symbols static if they're not exported.
+       * dispextern.h (scratch_glyph_row, window_box_edges):
+       (glyph_to_pixel_coords, set_cursor_from_row):
+       (get_next_display_element, set_iterator_to_next):
+       (highlight_trailing_whitespace, frame_to_window_pixel_xy):
+       (show_mouse_face): Remove decls
+       * frame.h (message_buf_print): Likewise.
+       * lisp.h (pop_message, set_message, check_point_in_composition):
+       Likewise.
+       * xterm.h (set_vertical_scroll_bar): Likewise.
+       * xdisp.c (list_of_error, Vmessage_stack, line_number_displayed):
+       (message_buf_print, scratch_glyph_row, displayed_buffer):
+       (set_iterator_to_next, pop_message, set_message, set_cursor_from_row):
+       (get_next_display_element, show_mouse_face, window_box_edges):
+       (frame_to_window_pixel_xy, check_point_in_composition):
+       (set_vertical_scroll_bar, highlight_trailing_whitespace): Now static.
+       (glyph_to_pixel_coords): Remove; unused.
+       * dired.c (file_name_completion): Now static.
+       * dbusbind.c (xd_in_read_queued_messages): Now static.
+       * lisp.h (circular_list_error, FOREACH): Remove; unused.
+       * data.c (circular_list_error): Remove.
+       * commands.h (last_point_position, last_point_position_buffer):
+       (last_point_position_window): Remove decls.
+       * keyboard.c: Make these variables static.
+       * coding.h (coding, code_convert_region, encode_coding_gap): Remove
+       decls.
+       * coding.c (Vsjis_coding_system, Vbig5_coding_system):
+       (iso_code_class, detect_coding, code_convert_region): Now static.
+       (encode_coding_gap): Remove; unused.
+       * chartab.c (chartab_chars, chartab_bits): Now static.
+       * charset.h (charset_iso_8859_1): Remove decl.
+       * charset.c (charset_iso_8859_1, charset_emacs, map_charset_for_dump):
+       Now static.
+       * ccl.h (check_ccl_update, Vccl_program_table): Remove decls.
+       * ccl.c (Vccl_program_table): Now static.
+       (check_ccl_update): Remove; unused.
+       * category.c (SET_CATEGORY_SET, set_category_set): Move here.
+       * category.h: ... from here.
+       * category.c (check_category_table, set_category_set): Now static.
+       * casetab.c (Vascii_upcase_table, Vascii_eqv_table): Now static.
+       * lisp.h: Remove these decls.
+       * buffer.c (buffer_count): Remove unused var.
+       * bidi.c (bidi_dump_cached_states): Mark as externally visible,
+       so that it's not optimized away.
+       (bidi_ignore_explicit_marks_for_paragraph_level): Likewise.
+       * dispextern.h (bidi_dump_cached_states): Remove, since it's
+       exported only to the debugger.
+       * atimer.c (alarm_signal_handler, run_all_atimers): Now static.
+       * atimer.h (run_all_atimers): Removed; not exported.
+       font.c: Make copy_font_spec and merge_font_spec ordinary C functions.
+       * font.c (copy_font_spec): Rename from Fcopy_font_spec, since it
+       was inaccessible from Lisp.
+       (merge_font_spec): Likewise, renaming from Fmerge_font_spec.
+       * font.c, font.h, fontset.c, xfaces.c, xfont.c: Change all uses.
+       alloc.c: Import and export fewer symbols, and remove unused items.
+       * lisp.h (suppress_checking, die): Declare only if ENABLE_CHECKING
+       is defined.
+       (suppress_checking): Add EXTERNALLY_VISIBLE attribute, so that
+       it's not optimized away by whole-program optimization.
+       (message_enable_multibyte, free_misc): Remove.
+       (catchlist, handlerlist, mark_backtrace):
+       Declare only if BYTE_MARK_STACK.
+       (mark_byte_stack): Likewise, fixing a ifdef-vs-if typo.
+       * alloc.c (pure): Export only if VIRT_ADDR_VARIES is defined.
+       (message_enable_multibyte): Remove decl.
+       (free_misc, interval_free_list, float_block, float_block_index):
+       (n_float_blocks, float_free_list, cons_block, cons_block_index):
+       (cons_free_list, last_marked_index):
+       Now static.
+       (suppress_checking, die): Define only if ENABLE_CHECKING is defined.
+       * eval.c (catchlist, handlerlist): Export only if BYTE_MARK_STACK.
+       (mark_backtrace): Define only if BYTE_MARK_STACK.
+       * xdisp.c (message_enable_multibyte): Now static.
+       Declare Lisp_Object Q* variables to be 'static' if not exported.
+       This makes it easier for human readers (and static analyzers)
+       to see whether these variables are used from other modules.
+       * alloc.c, buffer.c, bytecode.c, callint.c, casetab.c, category.c:
+       * ccl.c, character.c, charset.c, cmds.c, coding.c, composite.c:
+       * data.c, dbusbind.c, dired.c, editfns.c, eval.c, fileio.c, fns.c:
+       * font.c, frame.c, fringe.c, ftfont.c, image.c, keyboard.c, keymap.c:
+       * lread.c, macros.c, minibuf.c, print.c, process.c, search.c:
+       * sound.c, syntax.c, textprop.c, window.c, xdisp.c, xfaces.c, xfns.c:
+       * xmenu.c, xselect.c:
+       Declare Q* vars static if they are not used in other modules.
+       * ccl.h, character.h, charset.h, coding.h, composite.h, font.h:
+       * frame.h, intervals.h, keyboard.h, lisp.h, process.h, syntax.h:
+       Remove decls of unexported vars.
+       * keyboard.h (EVENT_HEAD_UNMODIFIED): Remove now-unused macro.
+       * lisp.h (DEFINE_FUNC): Make sname 'static'.
+       Make Emacs functions such as Fatom 'static' by default.
+       This makes it easier for human readers (and static analyzers)
+       to see whether these functions can be called from other modules.
+       DEFUN now defines a static function.  To make the function external
+       so that it can be used in other C modules, use the new macro DEFUE.
+       * lisp.h (Funibyte_char_to_multibyte, Fsyntax_table_p):
+       (Finit_image_library):
+       (Feval_region, Fbacktrace, Ffetch_bytecode, Fswitch_to_buffer):
+       (Ffile_executable_p, Fmake_symbolic_link, Fcommand_execute):
+       (Fget_process, Fdocumentation_property, Fbyte_code, Ffile_attributes):
+       Remove decls, since these functions are now static.
+       (Funintern, Fget_internal_run_time): New decls, since these functions
+       were already external.
+       * alloc.c, buffer.c, callint.c, callproc.c, casefiddle.c, casetab.c:
+       * ccl.c, character.c, chartab.c, cmds.c, coding.c, data.c, dispnew.c:
+       * doc.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, floatfns.c:
+       * fns.c, font.c, fontset.c, frame.c, image.c, indent.c:
+       * keyboard.c, keymap.c, lread.c:
+       * macros.c, marker.c, menu.c, minibuf.c, print.c, process.c, search.c:
+       * syntax.c, term.c, terminal.c, textprop.c, undo.c:
+       * window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c, xsettings.c:
+       Mark functions with DEFUE instead of DEFUN,
+       if they are used in other modules.
+       * buffer.c (Fset_buffer_major_mode, Fdelete_overlay): New forward
+       decls for now-static functions.
+       * buffer.h (Fdelete_overlay): Remove decl.
+       * callproc.c (Fgetenv_internal): Mark as internal.
+       * composite.c (Fremove_list_of_text_properties): Remove decl.
+       (Fcomposition_get_gstring): New forward static decl.
+       * composite.h (Fcomposite_get_gstring): Remove decl.
+       * dired.c (Ffile_attributes): New forward static decl.
+       * doc.c (Fdocumntation_property): New forward static decl.
+       * eval.c (Ffetch_bytecode): New forward static decl.
+       (Funintern): Remove extern decl; now in .h file where it belongs.
+       * fileio.c (Fmake_symbolic_link): New forward static decl.
+       * image.c (Finit_image_library): New forward static decl.
+       * insdel.c (Fcombine_after_change_execute): Make forward decl static.
+       * intervals.h (Fprevious_property_change):
+       (Fremove_list_of_text_properties): Remove decls.
+       * keyboard.c (Fthis_command_keys): Remove decl.
+       (Fcommand_execute): New forward static decl.
+       * keymap.c (Flookup_key): New forward static decl.
+       (Fcopy_keymap): Now static.
+       * keymap.h (Flookup_key): Remove decl.
+       * process.c (Fget_process): New forward static decl.
+       (Fprocess_datagram_address): Mark as internal.
+       * syntax.c (Fsyntax_table_p): New forward static decl.
+       (skip_chars): Remove duplicate decl.
+       * textprop.c (Fprevious_property_change): New forward static decl.
+       * window.c (Fset_window_fringes, Fset_window_scroll_bars):
+       Now internal.
+       (Fset_window_margins, Fset_window_vscroll): New forward static decls.
+       * window.h (Fset_window_vscroll, Fset_window_margins): Remove decls.
+       * editfns.c (Fformat): Remove unreachable code.
  2011-04-14  Andreas Schwab  <schwab@linux-m68k.org>
  
        * fileio.c (Finsert_file_contents): Fix typo in 2005-05-13
diff --cc src/buffer.c
index e9bed681cc57d661f3e10fb8827ede4b395a2dbd,05bd129976fd905e33a4fb29cf40c72fe66879f6..ae2000ae211be3b5b8a2426678d40e75938bc3cc
@@@ -119,23 -121,23 +121,25 @@@ static Lisp_Object Qchange_major_mode_h
  Lisp_Object Qfirst_change_hook;
  Lisp_Object Qbefore_change_functions;
  Lisp_Object Qafter_change_functions;
- Lisp_Object Qucs_set_table_for_input;
static Lisp_Object Qucs_set_table_for_input;
  
- Lisp_Object Qfundamental_mode, Qmode_class, Qpermanent_local;
- Lisp_Object Qpermanent_local_hook;
static Lisp_Object Qfundamental_mode, Qmode_class, Qpermanent_local;
static Lisp_Object Qpermanent_local_hook;
  
- Lisp_Object Qprotected_field;
static Lisp_Object Qprotected_field;
  
Lisp_Object QSFundamental;    /* A string "Fundamental" */
static Lisp_Object QSFundamental;     /* A string "Fundamental" */
  
- Lisp_Object Qkill_buffer_hook;
- Lisp_Object Qbuffer_list_update_hook;
+ static Lisp_Object Qkill_buffer_hook;
++static Lisp_Object Qbuffer_list_update_hook;
  
- Lisp_Object Qget_file_buffer;
static Lisp_Object Qget_file_buffer;
  
- Lisp_Object Qoverlayp;
static Lisp_Object Qoverlayp;
  
- Lisp_Object Qpriority, Qclone_number, Qevaporate, Qbefore_string, Qafter_string;
+ Lisp_Object Qpriority, Qbefore_string, Qafter_string;
 -static Lisp_Object Qevaporate;
++
++static Lisp_Object Qclone_number, Qevaporate;
  
  Lisp_Object Qmodification_hooks;
  Lisp_Object Qinsert_in_front_hooks;
diff --cc src/dispnew.c
Simple merge
diff --cc src/frame.c
Simple merge
diff --cc src/indent.c
Simple merge
diff --cc src/lisp.h
index 49bd82a08224a228a70a5d37d3172d16f9fbf0d7,66f5c962be88412876ae40f2aac8535748262275..80e2d9f71ac66f70985affb52f0fe68ea9db5f93
@@@ -2953,9 -2978,7 +2978,8 @@@ EXFUN (Fset_buffer, 1)
  extern Lisp_Object set_buffer_if_live (Lisp_Object);
  EXFUN (Fbarf_if_buffer_read_only, 0);
  EXFUN (Fcurrent_buffer, 0);
- EXFUN (Fswitch_to_buffer, 2);
  EXFUN (Fother_buffer, 3);
 +extern Lisp_Object other_buffer_safely (Lisp_Object);
  EXFUN (Foverlay_get, 2);
  EXFUN (Fbuffer_modified_p, 1);
  EXFUN (Fset_buffer_modified_p, 1);
diff --cc src/minibuf.c
Simple merge
diff --cc src/w32fns.c
Simple merge
diff --cc src/window.c
index a0d6f1010c2ab95d261d5472de66e9e647ac5307,4dbee41c5f4d4d7219d520234b6d95aa19e668c7..a288bdd864a128c75d23b1b821f0eb24ed46e431
@@@ -50,14 -50,11 +50,14 @@@ along with GNU Emacs.  If not, see <htt
  #include "nsterm.h"
  #endif
  
- Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;
- Lisp_Object Qwindow_deletable_p, Qdelete_window, Qdisplay_buffer;
- Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window;
- Lisp_Object Qrecord_window_buffer;
- Lisp_Object Qresize_root_window, Qresize_root_window_vertically;
- Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command;
- Lisp_Object Qsafe, Qabove, Qbelow;
- Lisp_Object Qauto_buffer_name;
+ Lisp_Object Qwindowp, Qwindow_live_p;
 -static Lisp_Object Qwindow_configuration_p;
 -static Lisp_Object Qdisplay_buffer;
++static Lisp_Object Qwindow_configuration_p, Qrecord_window_buffer;
++static Qwindow_deletable_p, Qdelete_window, Qdisplay_buffer;
++static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window;
++static Lisp_Object Qresize_root_window, Qresize_root_window_vertically;
+ static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command;
 -static Lisp_Object Qwindow_size_fixed;
++static Lisp_Object Qsafe, Qabove, Qbelow;
++static Lisp_Object Qauto_buffer_name;
  
  static int displayed_window_lines (struct window *);
  static struct window *decode_window (Lisp_Object);
@@@ -110,9 -115,12 +110,9 @@@ Lisp_Object minibuf_window
  Lisp_Object minibuf_selected_window;
  
  /* Hook run at end of temp_output_buffer_show.  */
- Lisp_Object Qtemp_buffer_show_hook;
 -
+ static Lisp_Object Qtemp_buffer_show_hook;
  
  /* Incremented for each window created.  */
 -
  static int sequence_number;
  
  /* Nonzero after init_window_once has finished.  */
@@@ -122,9 -131,11 +122,9 @@@ static int window_initialized
  static Lisp_Object Qwindow_configuration_change_hook;
  /* Incremented by 1 whenever a window is deleted.  */
  
- int window_deletion_count;
static int window_deletion_count;
  
  /* Used by the function window_scroll_pixel_based */
 -
  static int window_scroll_pixel_based_preserve_x;
  static int window_scroll_pixel_based_preserve_y;
  
@@@ -212,475 -236,253 +212,476 @@@ used by that frame.  */
    return FRAME_MINIBUF_WINDOW (XFRAME (frame));
  }
  
- DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, Swindow_minibuffer_p, 0, 1, 0,
+ DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p,
+        Swindow_minibuffer_p, 0, 1, 0,
         doc: /* Return non-nil if WINDOW is a minibuffer window.
 -WINDOW defaults to the selected window.  */)
 +WINDOW can be any window and defaults to the selected one.  */)
    (Lisp_Object window)
  {
 -  struct window *w = decode_window (window);
 -  return MINI_WINDOW_P (w) ? Qt : Qnil;
 +  return MINI_WINDOW_P (decode_any_window (window)) ? Qt : Qnil;
  }
  
 -
 -DEFUN ("pos-visible-in-window-p", Fpos_visible_in_window_p,
 -       Spos_visible_in_window_p, 0, 3, 0,
 -       doc: /* Return non-nil if position POS is currently on the frame in WINDOW.
 -Return nil if that position is scrolled vertically out of view.
 -If a character is only partially visible, nil is returned, unless the
 -optional argument PARTIALLY is non-nil.
 -If POS is only out of view because of horizontal scrolling, return non-nil.
 -If POS is t, it specifies the position of the last visible glyph in WINDOW.
 -POS defaults to point in WINDOW; WINDOW defaults to the selected window.
 -
 -If POS is visible, return t if PARTIALLY is nil; if PARTIALLY is non-nil,
 -return value is a list of 2 or 6 elements (X Y [RTOP RBOT ROWH VPOS]),
 -where X and Y are the pixel coordinates relative to the top left corner
 -of the window.  The remaining elements are omitted if the character after
 -POS is fully visible; otherwise, RTOP and RBOT are the number of pixels
 -off-window at the top and bottom of the row, ROWH is the height of the
 -display row, and VPOS is the row number (0-based) containing POS.  */)
 -  (Lisp_Object pos, Lisp_Object window, Lisp_Object partially)
 +/* Don't move this to window.el - this must be a safe routine.  */
 +DEFUN ("frame-first-window", Fframe_first_window, Sframe_first_window, 0, 1, 0,
 +       doc: /* Return the topmost, leftmost live window on FRAME_OR_WINDOW.
 +If omitted, FRAME_OR_WINDOW defaults to the currently selected frame.
 +Else if FRAME_OR_WINDOW denotes any window, return the first window of
 +that window's frame.  If FRAME_OR_WINDOW denotes a live frame, return
 +the first window of that frame.  */)
 +  (Lisp_Object frame_or_window)
  {
 -  register struct window *w;
 -  register EMACS_INT posint;
 -  register struct buffer *buf;
 -  struct text_pos top;
 -  Lisp_Object in_window = Qnil;
 -  int rtop, rbot, rowh, vpos, fully_p = 1;
 -  int x, y;
 +  Lisp_Object window;
  
 -  w = decode_window (window);
 -  buf = XBUFFER (w->buffer);
 -  SET_TEXT_POS_FROM_MARKER (top, w->start);
 +  if (NILP (frame_or_window))
 +    window = SELECTED_FRAME ()->root_window;
 +  else if (WINDOWP (frame_or_window))
 +    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->root_window;
 +  else
 +    {
 +      CHECK_LIVE_FRAME (frame_or_window);
 +      window = XFRAME (frame_or_window)->root_window;
 +    }
  
 -  if (EQ (pos, Qt))
 -    posint = -1;
 -  else if (!NILP (pos))
 +  while (NILP (XWINDOW (window)->buffer))
      {
 -      CHECK_NUMBER_COERCE_MARKER (pos);
 -      posint = XINT (pos);
 +      if (! NILP (XWINDOW (window)->hchild))
 +      window = XWINDOW (window)->hchild;
 +      else if (! NILP (XWINDOW (window)->vchild))
 +      window = XWINDOW (window)->vchild;
 +      else
 +      abort ();
      }
 -  else if (w == XWINDOW (selected_window))
 -    posint = PT;
 -  else
 -    posint = XMARKER (w->pointm)->charpos;
  
 -  /* If position is above window start or outside buffer boundaries,
 -     or if window start is out of range, position is not visible.  */
 -  if ((EQ (pos, Qt)
 -       || (posint >= CHARPOS (top) && posint <= BUF_ZV (buf)))
 -      && CHARPOS (top) >= BUF_BEGV (buf)
 -      && CHARPOS (top) <= BUF_ZV (buf)
 -      && pos_visible_p (w, posint, &x, &y, &rtop, &rbot, &rowh, &vpos)
 -      && (fully_p = !rtop && !rbot, (!NILP (partially) || fully_p)))
 -    in_window = Qt;
 +  return window;
 +}
  
 -  if (!NILP (in_window) && !NILP (partially))
 +DEFUN ("frame-selected-window", Fframe_selected_window,
 +       Sframe_selected_window, 0, 1, 0,
 +       doc: /* Return the selected window of FRAME_OR_WINDOW.
 +If omitted, FRAME_OR_WINDOW defaults to the currently selected frame.
 +Else if FRAME_OR_WINDOW denotes any window, return the selected window
 +of that window's frame.  If FRAME_OR_WINDOW denotes a live frame, return
 +the selected window of that frame.  */)
 +  (Lisp_Object frame_or_window)
 +{
 +  Lisp_Object window;
 +
 +  if (NILP (frame_or_window))
 +    window = SELECTED_FRAME ()->selected_window;
 +  else if (WINDOWP (frame_or_window))
 +    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->selected_window;
 +  else
      {
 -      Lisp_Object part = Qnil;
 -      if (!fully_p)
 -      part = list4 (make_number (rtop), make_number (rbot),
 -                      make_number (rowh), make_number (vpos));
 -      in_window = Fcons (make_number (x),
 -                       Fcons (make_number (y), part));
 +      CHECK_LIVE_FRAME (frame_or_window);
 +      window = XFRAME (frame_or_window)->selected_window;
      }
  
 -  return in_window;
 +  return window;
  }
  
 -DEFUN ("window-line-height", Fwindow_line_height,
 -       Swindow_line_height, 0, 2, 0,
 -       doc: /* Return height in pixels of text line LINE in window WINDOW.
 -If WINDOW is nil or omitted, use selected window.
 +DEFUN ("set-frame-selected-window", Fset_frame_selected_window,
 +       Sset_frame_selected_window, 2, 3, 0,
 +       doc: /* Set selected window of FRAME to WINDOW.
 +FRAME must be a live frame and defaults to the selected one.  If FRAME
 +is the selected frame, this makes WINDOW the selected window.  Optional
 +argument NORECORD non-nil means to neither change the order of recently
 +selected windows nor the buffer list.  WINDOW must denote a live window.
 +Return WINDOW.  */)
 +  (Lisp_Object frame, Lisp_Object window, Lisp_Object norecord)
 +{
 +  if (NILP (frame))
 +    frame = selected_frame;
  
 -Return height of current line if LINE is omitted or nil.  Return height of
 -header or mode line if LINE is `header-line' and `mode-line'.
 -Otherwise, LINE is a text line number starting from 0.  A negative number
 -counts from the end of the window.
 +  CHECK_LIVE_FRAME (frame);
 +  CHECK_LIVE_WINDOW (window);
  
 -Value is a list (HEIGHT VPOS YPOS OFFBOT), where HEIGHT is the height
 -in pixels of the visible part of the line, VPOS and YPOS are the
 -vertical position in lines and pixels of the line, relative to the top
 -of the first text line, and OFFBOT is the number of off-window pixels at
 -the bottom of the text line.  If there are off-window pixels at the top
 -of the (first) text line, YPOS is negative.
 +  if (! EQ (frame, WINDOW_FRAME (XWINDOW (window))))
 +    error ("In `set-frame-selected-window', WINDOW is not on FRAME");
  
 -Return nil if window display is not up-to-date.  In that case, use
 -`pos-visible-in-window-p' to obtain the information.  */)
 -  (Lisp_Object line, Lisp_Object window)
 +  if (EQ (frame, selected_frame))
 +    return Fselect_window (window, norecord);
 +  else
 +    return XFRAME (frame)->selected_window = window;
 +}
 +
 +DEFUN ("selected-window", Fselected_window, Sselected_window, 0, 0, 0,
 +       doc: /* Return the selected window.
 +The selected window is the window in which the standard cursor for
 +selected windows appears and to which many commands apply.  */)
 +  (void)
  {
 -  register struct window *w;
 -  register struct buffer *b;
 -  struct glyph_row *row, *end_row;
 -  int max_y, crop, i, n;
 +  return selected_window;
 +}
  
 -  w = decode_window (window);
 +int window_select_count;
  
 -  if (noninteractive
 -      || w->pseudo_window_p)
 -    return Qnil;
 +/* If select_window is called with inhibit_point_swap non-zero it will
 +   not store point of the old selected window's buffer back into that
 +   window's pointm slot.  This is needed by Fset_window_configuration to
 +   avoid that the display routine is called with selected_window set to
 +   Qnil causing a subsequent crash.  */
 +static Lisp_Object
 +select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap)
 +{
 +  register struct window *w;
 +  register struct window *ow;
 +  struct frame *sf;
  
 -  CHECK_BUFFER (w->buffer);
 -  b = XBUFFER (w->buffer);
 +  CHECK_LIVE_WINDOW (window);
  
 -  /* Fail if current matrix is not up-to-date.  */
 -  if (NILP (w->window_end_valid)
 -      || current_buffer->clip_changed
 -      || current_buffer->prevent_redisplay_optimizations_p
 -      || XFASTINT (w->last_modified) < BUF_MODIFF (b)
 -      || XFASTINT (w->last_overlay_modified) < BUF_OVERLAY_MODIFF (b))
 -    return Qnil;
 +  w = XWINDOW (window);
 +  w->frozen_window_start_p = 0;
  
 -  if (NILP (line))
 +  if (NILP (norecord))
      {
 -      i = w->cursor.vpos;
 -      if (i < 0 || i >= w->current_matrix->nrows
 -        || (row = MATRIX_ROW (w->current_matrix, i), !row->enabled_p))
 -      return Qnil;
 -      max_y = window_text_bottom_y (w);
 -      goto found_row;
 +      ++window_select_count;
 +      XSETFASTINT (w->use_time, window_select_count);
 +      record_buffer (w->buffer);
      }
  
 -  if (EQ (line, Qheader_line))
 +  if (EQ (window, selected_window) && !inhibit_point_swap)
 +    return window;
 +
 +  sf = SELECTED_FRAME ();
 +  if (XFRAME (WINDOW_FRAME (w)) != sf)
      {
 -      if (!WINDOW_WANTS_HEADER_LINE_P (w))
 -      return Qnil;
 -      row = MATRIX_HEADER_LINE_ROW (w->current_matrix);
 -      if (!row->enabled_p)
 -      return Qnil;
 -      return list4 (make_number (row->height),
 -                  make_number (0), make_number (0),
 -                  make_number (0));
 +      XFRAME (WINDOW_FRAME (w))->selected_window = window;
 +      /* Use this rather than Fhandle_switch_frame
 +       so that FRAME_FOCUS_FRAME is moved appropriately as we
 +       move around in the state where a minibuffer in a separate
 +       frame is active.  */
 +      Fselect_frame (WINDOW_FRAME (w), norecord);
 +      /* Fselect_frame called us back so we've done all the work already.  */
 +      eassert (EQ (window, selected_window));
 +      return window;
      }
 +  else
 +    sf->selected_window = window;
  
 -  if (EQ (line, Qmode_line))
 +  /* Store the current buffer's actual point into the
 +     old selected window.  It belongs to that window,
 +     and when the window is not selected, must be in the window.  */
 +  if (!inhibit_point_swap)
      {
 -      row = MATRIX_MODE_LINE_ROW (w->current_matrix);
 -      if (!row->enabled_p)
 -      return Qnil;
 -      return list4 (make_number (row->height),
 -                  make_number (0), /* not accurate */
 -                  make_number (WINDOW_HEADER_LINE_HEIGHT (w)
 -                               + window_text_bottom_y (w)),
 -                  make_number (0));
 +      ow = XWINDOW (selected_window);
 +      if (! NILP (ow->buffer))
 +      set_marker_both (ow->pointm, ow->buffer,
 +                       BUF_PT (XBUFFER (ow->buffer)),
 +                       BUF_PT_BYTE (XBUFFER (ow->buffer)));
      }
  
 -  CHECK_NUMBER (line);
 -  n = XINT (line);
 -
 -  row = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
 -  end_row = MATRIX_BOTTOM_TEXT_ROW (w->current_matrix, w);
 -  max_y = window_text_bottom_y (w);
 -  i = 0;
 +  selected_window = window;
  
 -  while ((n < 0 || i < n)
 -       && row <= end_row && row->enabled_p
 -       && row->y + row->height < max_y)
 -    row++, i++;
 +  Fset_buffer (w->buffer);
  
 -  if (row > end_row || !row->enabled_p)
 -    return Qnil;
 +  BVAR (XBUFFER (w->buffer), last_selected_window) = window;
  
 -  if (++n < 0)
 -    {
 -      if (-n > i)
 -      return Qnil;
 -      row += n;
 -      i += n;
 -    }
 +  /* Go to the point recorded in the window.
 +     This is important when the buffer is in more
 +     than one window.  It also matters when
 +     redisplay_window has altered point after scrolling,
 +     because it makes the change only in the window.  */
 +  {
 +    register EMACS_INT new_point = marker_position (w->pointm);
 +    if (new_point < BEGV)
 +      SET_PT (BEGV);
 +    else if (new_point > ZV)
 +      SET_PT (ZV);
 +    else
 +      SET_PT (new_point);
 +  }
  
 - found_row:
 -  crop = max (0, (row->y + row->height) - max_y);
 -  return list4 (make_number (row->height + min (0, row->y) - crop),
 -              make_number (i),
 -              make_number (row->y),
 -              make_number (crop));
 +  windows_or_buffers_changed++;
 +  return window;
  }
  
 +DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0,
 +       doc: /* Select WINDOW.  Most editing will apply to WINDOW's buffer.
 +Also make WINDOW's buffer current and make WINDOW the frame's selected
 +window.  Return WINDOW.
 +
 +Optional second arg NORECORD non-nil means do not put this buffer at the
 +front of the buffer list and do not make this window the most recently
 +selected one.
  
 +Note that the main editor command loop sets the current buffer to the
 +buffer of the selected window before each command.  */)
 +  (register Lisp_Object window, Lisp_Object norecord)
 +{
 +  return select_window (window, norecord, 0);
 +}
  \f
 -static struct window *
 -decode_window (register Lisp_Object window)
 +DEFUN ("window-clone-number", Fwindow_clone_number, Swindow_clone_number, 0, 1, 0,
 +       doc: /* Return WINDOW's clone number.
 +WINDOW can be any window and defaults to the selected one.  */)
 +     (Lisp_Object window)
  {
 -  if (NILP (window))
 -    return XWINDOW (selected_window);
 +  return decode_any_window (window)->clone_number;
 +}
  
 -  CHECK_LIVE_WINDOW (window);
 -  return XWINDOW (window);
 +DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0,
 +       doc: /* Return the buffer that WINDOW is displaying.
 +WINDOW can be any window and defaults to the selected one.
 +If WINDOW is an internal window return nil.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->buffer;
  }
  
 -static struct window *
 -decode_any_window (register Lisp_Object window)
 +DEFUN ("window-parent", Fwindow_parent, Swindow_parent, 0, 1, 0,
 +       doc: /* Return WINDOW's parent window.
 +WINDOW can be any window and defaults to the selected one.
 +Return nil if WINDOW has no parent.  */)
 +  (Lisp_Object window)
  {
 -  if (NILP (window))
 -    return XWINDOW (selected_window);
 +  return decode_any_window (window)->parent;
 +}
  
 -  CHECK_WINDOW (window);
 -  return XWINDOW (window);
 +DEFUN ("window-vchild", Fwindow_vchild, Swindow_vchild, 0, 1, 0,
 +       doc: /* Return WINDOW's first vertical child window.
 +WINDOW can be any window and defaults to the selected one.
 +Return nil if WINDOW has no vertical child.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->vchild;
  }
  
 -DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0,
 -       doc: /* Return the buffer that WINDOW is displaying.
 -WINDOW defaults to the selected window.  */)
 +DEFUN ("window-hchild", Fwindow_hchild, Swindow_hchild, 0, 1, 0,
 +       doc: /* Return WINDOW's first horizontal child window.
 +WINDOW can be any window and defaults to the selected one.
 +Return nil if WINDOW has no horizontal child.  */)
    (Lisp_Object window)
  {
 -  return decode_window (window)->buffer;
 +  return decode_any_window (window)->hchild;
  }
  
 -DEFUN ("window-height", Fwindow_height, Swindow_height, 0, 1, 0,
 -       doc: /* Return the number of lines in WINDOW.
 -WINDOW defaults to the selected window.
 +DEFUN ("window-next", Fwindow_next, Swindow_next, 0, 1, 0,
 +       doc: /* Return WINDOW's right sibling window.
 +WINDOW can be any window and defaults to the selected one.
 +Return nil if WINDOW has no right sibling.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->next;
 +}
  
 -The return value includes WINDOW's mode line and header line, if any.
 +DEFUN ("window-prev", Fwindow_prev, Swindow_prev, 0, 1, 0,
 +       doc: /* Return WINDOW's left sibling window.
 +WINDOW can be any window and defaults to the selected one.
 +Return nil if WINDOW has no left sibling.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->prev;
 +}
 +
 +DEFUN ("window-splits", Fwindow_splits, Swindow_splits, 0, 1, 0,
 +       doc: /* Return splits status for WINDOW.
 +WINDOW can be any window and defaults to the selected one.
  
 -Note: The function does not take into account the value of `line-spacing'
 -when calculating the number of lines in WINDOW.  */)
 +If the value returned by this function is nil and WINDOW is resized, the
 +corresponding space is preferably taken from (or given to) WINDOW's
 +right sibling.  When WINDOW is deleted, its space is given to its left
 +sibling.
 +
 +If the value returned by this function is non-nil, resizing and deleting
 +WINDOW may resize all windows in the same combination.  */)
    (Lisp_Object window)
  {
 -  return decode_any_window (window)->total_lines;
 +  return decode_any_window (window)->splits;
  }
  
 -DEFUN ("window-width", Fwindow_width, Swindow_width, 0, 1, 0,
 -       doc: /* Return the number of display columns in WINDOW.
 -WINDOW defaults to the selected window.
 +DEFUN ("set-window-splits", Fset_window_splits, Sset_window_splits, 2, 2, 0,
 +       doc: /* Set splits status of WINDOW to STATUS.
 +WINDOW can be any window and defaults to the selected one.  Return
 +STATUS.
 +
 +If STATUS is nil and WINDOW is later resized, the corresponding space is
 +preferably taken from (or given to) WINDOW's right sibling.  When WINDOW
 +is deleted, its space is given to its left sibling.
 +
 +If STATUS is non-nil, resizing and deleting WINDOW may resize all
 +windows in the same combination.  */)
 +  (Lisp_Object window, Lisp_Object status)
 +{
 +  register struct window *w = decode_any_window (window);
 +
 +  w->splits = status;
 +
 +  return w->splits;
 +}
 +
 +DEFUN ("window-nest", Fwindow_nest, Swindow_nest, 0, 1, 0,
 +       doc: /* Return nest status of WINDOW.
 +WINDOW can be any window and defaults to the selected one.
  
 -Note: The return value is the number of columns available for text in
 -WINDOW.  If you want to find out how many columns WINDOW takes up, use
 -(let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges))).  */)
 +If the return value is nil, subwindows of WINDOW can be recombined with
 +WINDOW's siblings.  A return value of nil means that subwindows of
 +WINDOW are never \(re-)combined with WINDOW's siblings.  */)
    (Lisp_Object window)
  {
 -  return make_number (window_box_text_cols (decode_any_window (window)));
 +  return decode_any_window (window)->nest;
  }
  
 -DEFUN ("window-full-width-p", Fwindow_full_width_p, Swindow_full_width_p, 0, 1, 0,
 -       doc: /* Return t if WINDOW is as wide as its frame.
 -WINDOW defaults to the selected window.  */)
 +DEFUN ("set-window-nest", Fset_window_nest, Sset_window_nest, 2, 2, 0,
 +       doc: /* Set nest status of WINDOW to STATUS.
 +WINDOW can be any window and defaults to the selected one.  Return
 +STATUS.
 +
 +If the return value is nil, subwindows of WINDOW can be recombined with
 +WINDOW's siblings.  A return value of nil means that subwindows of
 +WINDOW are never \(re-)combined with WINDOW's siblings.  */)
 +  (Lisp_Object window, Lisp_Object status)
 +{
 +  register struct window *w = decode_any_window (window);
 +
 +  w->nest = status;
 +
 +  return w->nest;
 +}
 +
 +DEFUN ("window-use-time", Fwindow_use_time, Swindow_use_time, 0, 1, 0,
 +       doc: /* Return WINDOW's use time.
 +WINDOW defaults to the selected window.  The window with the highest use
 +time is the most recently selected one.  The window with the lowest use
 +time is the least recently selected one.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_window (window)->use_time;
 +}
 +\f
 +DEFUN ("window-total-size", Fwindow_total_size, Swindow_total_size, 0, 2, 0,
 +       doc: /* Return the total number of lines of WINDOW.
 +WINDOW can be any window and defaults to the selected one.  The return
 +value includes WINDOW's mode line and header line, if any.  If WINDOW
 +is internal, the return value is the sum of the total number of lines
 +of WINDOW's child windows if these are vertically combined and the
 +height of WINDOW's first child otherwise.
 +
 +Optional argument HORIZONTAL non-nil means return the total number of
 +columns of WINDOW.  In this case the return value includes any vertical
 +dividers or scrollbars of WINDOW.  If WINDOW is internal, the return
 +value is the sum of the total number of columns of WINDOW's child
 +windows if they are horizontally combined and the width of WINDOW's
 +first child otherwise.  */)
 +  (Lisp_Object window, Lisp_Object horizontal)
 +{
 +  if (NILP (horizontal))
 +    return decode_any_window (window)->total_lines;
 +  else
 +    return decode_any_window (window)->total_cols;
 +}
 +
 +DEFUN ("window-new-total", Fwindow_new_total, Swindow_new_total, 0, 1, 0,
 +       doc: /* Return new total size of WINDOW.
 +WINDOW defaults to the selected window.   */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->new_total;
 +}
 +
 +DEFUN ("window-normal-size", Fwindow_normal_size, Swindow_normal_size, 0, 2, 0,
 +       doc: /* Return normal height of WINDOW.
 +WINDOW can be any window and defaults to the selected one.  Optional
 +argument HORIZONTAL non-nil means return normal width of WINDOW.  */)
 +  (Lisp_Object window, Lisp_Object horizontal)
 +{
 +  if (NILP (horizontal))
 +    return decode_any_window (window)->normal_lines;
 +  else
 +    return decode_any_window (window)->normal_cols;
 +}
 +
 +DEFUN ("window-new-normal", Fwindow_new_normal, Swindow_new_normal, 0, 1, 0,
 +       doc: /* Return new normal size of WINDOW.
 +WINDOW can be any window and defaults to the selected one.   */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->new_normal;
 +}
 +
 +DEFUN ("window-left-column", Fwindow_left_column, Swindow_left_column, 0, 1, 0,
 +       doc: /* Return left column of WINDOW.
 +WINDOW can be any window and defaults to the selected one.  */)
 +  (Lisp_Object window)
 +{
 +  return decode_any_window (window)->left_col;
 +}
 +
 +DEFUN ("window-top-line", Fwindow_top_line, Swindow_top_line, 0, 1, 0,
 +       doc: /* Return top line of WINDOW.
 +WINDOW can be any window and defaults to the selected one.  */)
    (Lisp_Object window)
  {
 -  return WINDOW_FULL_WIDTH_P (decode_any_window (window)) ? Qt : Qnil;
 +  return decode_any_window (window)->top_line;
 +}
 +
 +/* Return the number of lines of W's body.  Don't count any mode or
 +   header line of W.  */
 +
 +int
 +window_body_lines (struct window *w)
 +{
 +  int height = XFASTINT (w->total_lines);
 +
 +  if (!MINI_WINDOW_P (w))
 +    {
 +      if (WINDOW_WANTS_MODELINE_P (w))
 +      --height;
 +      if (WINDOW_WANTS_HEADER_LINE_P (w))
 +      --height;
 +    }
 +
 +  return height;
 +}
 +
 +/* Return the number of columns of W's body.  Don't count columns
 +   occupied by the scroll bar or the vertical bar separating W from its
 +   right sibling.  On window-systems don't count fringes or display
 +   margins either.  */
 +
 +int
 +window_body_cols (struct window *w)
 +{
 +  struct frame *f = XFRAME (WINDOW_FRAME (w));
 +  int width = XINT (w->total_cols);
 +
 +  if (WINDOW_HAS_VERTICAL_SCROLL_BAR (w))
 +    /* Scroll bars occupy a few columns.  */
 +    width -= WINDOW_CONFIG_SCROLL_BAR_COLS (w);
 +  else if (!FRAME_WINDOW_P (f)
 +         && !WINDOW_RIGHTMOST_P (w) && !WINDOW_FULL_WIDTH_P (w))
 +    /* The column of `|' characters separating side-by-side windows
 +       occupies one column only.  */
 +    width -= 1;
 +
 +  if (FRAME_WINDOW_P (f))
 +    /* On window-systems, fringes and display margins cannot be
 +       used for normal text.  */
 +    width -= (WINDOW_FRINGE_COLS (w)
 +            + WINDOW_LEFT_MARGIN_COLS (w)
 +            + WINDOW_RIGHT_MARGIN_COLS (w));
 +
 +  return width;
 +}
 +
 +DEFUN ("window-body-size", Fwindow_body_size, Swindow_body_size, 0, 2, 0,
 +       doc: /* Return the number of lines of WINDOW's body.
 +WINDOW must be a live window and defaults to the selected one.  The
 +return value does not include WINDOW's mode line and header line, if
 +any.
 +
 +Optional argument HORIZONTAL non-nil means return the number of columns
 +of WINDOW's body.  In this case, the return value does not include any
 +vertical dividers or scroll bars owned by WINDOW.  On a window-system
 +the return value does not include the number of columns used for
 +WINDOW's fringes or display margins either.  */)
 +  (Lisp_Object window, Lisp_Object horizontal)
 +{
 +  struct window *w = decode_any_window (window);
 +
 +  if (NILP (horizontal))
 +    return make_number (window_body_lines (w));
 +  else
 +    return make_number (window_body_cols (w));
  }
  
  DEFUN ("window-hscroll", Fwindow_hscroll, Swindow_hscroll, 0, 1, 0,
@@@ -2895,12 -2874,417 +2897,16 @@@ adjust_window_margins (struct window *w
      w->left_margin_cols = make_number (margin_cols);
    return 1;
  }
 -
 -/* Calculate new sizes for windows in the list FORWARD when their
 -   compound size goes from TOTAL to SIZE.  TOTAL must be greater than
 -   SIZE.  The number of windows in FORWARD is NCHILDREN, and the number
 -   that can shrink is SHRINKABLE.  Fixed-size windows may be shrunk if
 -   and only if RESIZE_FIXED_P is non-zero.  WIDTH_P non-zero means
 -   shrink columns, otherwise shrink lines.
 -
 -   SAFE_P zero means windows may be sized down to window-min-height
 -   lines (window-min-window columns for WIDTH_P non-zero).  SAFE_P
 -   non-zero means windows may be sized down to their minimum safe sizes
 -   taking into account the space needed to display modelines, fringes,
 -   and scrollbars.
 -
 -   This function returns an allocated array of new sizes that the caller
 -   must free.  A size -1 means the window is fixed and RESIZE_FIXED_P is
 -   zero.  A size zero means the window shall be deleted.  Array index 0
 -   refers to the first window in FORWARD, 1 to the second, and so on.
 -
 -   This function resizes windows proportionally to their size.  It also
 -   tries to preserve smaller windows by resizing larger windows before
 -   resizing any window to zero.  If resize_proportionally is non-nil for
 -   a specific window, it will attempt to strictly resize that window
 -   proportionally, even at the expense of deleting smaller windows.  */
 -static int *
 -shrink_windows (int total, int size, int nchildren, int shrinkable,
 -              int resize_fixed_p, Lisp_Object forward, int width_p, int safe_p)
 -{
 -  int available_resize = 0;
 -  int *new_sizes, *min_sizes;
 -  struct window *c;
 -  Lisp_Object child;
 -  int smallest = total;
 -  int total_removed = 0;
 -  int total_shrink = total - size;
 -  int i;
 -
 -  new_sizes = xmalloc (sizeof (*new_sizes) * nchildren);
 -  min_sizes = xmalloc (sizeof (*min_sizes) * nchildren);
 -
 -  for (i = 0, child = forward; !NILP (child); child = c->next, ++i)
 -    {
 -      int child_size;
 -
 -      c = XWINDOW (child);
 -      child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -
 -      if (!resize_fixed_p && window_fixed_size_p (c, width_p, 0))
 -        new_sizes[i] = -1;
 -      else
 -        {
 -          new_sizes[i] = child_size;
 -          min_sizes[i] = window_min_size_1 (c, width_p, safe_p);
 -          if (child_size > min_sizes[i]
 -            && NILP (c->resize_proportionally))
 -            available_resize += child_size - min_sizes[i];
 -        }
 -    }
 -  /* We might need to shrink some windows to zero.  Find the smallest
 -     windows and set them to 0 until we can fulfil the new size.  */
 -
 -  while (shrinkable > 1 && size + available_resize < total)
 -    {
 -      for (i = 0; i < nchildren; ++i)
 -        if (new_sizes[i] > 0 && smallest > new_sizes[i])
 -          smallest = new_sizes[i];
 -
 -      for (i = 0; i < nchildren; ++i)
 -        if (new_sizes[i] == smallest)
 -          {
 -            /* Resize this window down to zero.  */
 -            new_sizes[i] = 0;
 -            if (smallest > min_sizes[i])
 -              available_resize -= smallest - min_sizes[i];
 -            available_resize += smallest;
 -            --shrinkable;
 -            total_removed += smallest;
 -
 -            /* We don't know what the smallest is now.  */
 -            smallest = total;
 -
 -            /* Out of for, just remove one window at the time and
 -               check again if we have enough space.  */
 -            break;
 -          }
 -    }
 -
 -  /* Now, calculate the new sizes.  Try to shrink each window
 -     proportional to its size.  */
 -  for (i = 0; i < nchildren; ++i)
 -    {
 -      if (new_sizes[i] > min_sizes[i])
 -        {
 -          int to_shrink = total_shrink * new_sizes[i] / total;
 -
 -          if (new_sizes[i] - to_shrink < min_sizes[i])
 -            to_shrink = new_sizes[i] - min_sizes[i];
 -          new_sizes[i] -= to_shrink;
 -          total_removed += to_shrink;
 -        }
 -    }
 -
 -  /* Any reminder due to rounding, we just subtract from windows
 -     that are left and still can be shrunk.  */
 -  while (total_shrink > total_removed)
 -    {
 -      int nonzero_sizes = 0;
 -
 -      for (i = 0; i < nchildren; ++i)
 -        if (new_sizes[i] > 0)
 -        ++nonzero_sizes;
 -
 -      for (i = 0; i < nchildren; ++i)
 -        if (new_sizes[i] > min_sizes[i])
 -          {
 -            --new_sizes[i];
 -            ++total_removed;
 -
 -            /* Out of for, just shrink one window at the time and
 -               check again if we have enough space.  */
 -            break;
 -          }
 -
 -      /* Special case, only one window left.  */
 -      if (nonzero_sizes == 1)
 -        break;
 -    }
 -
 -  /* Any surplus due to rounding, we add to windows that are left.  */
 -  while (total_shrink < total_removed)
 -    {
 -      for (i = 0; i < nchildren; ++i)
 -        {
 -          if (new_sizes[i] != 0 && total_shrink < total_removed)
 -            {
 -              ++new_sizes[i];
 -              --total_removed;
 -              break;
 -            }
 -        }
 -    }
 -
 -  xfree (min_sizes);
 -
 -  return new_sizes;
 -}
 -
 -/* Set WINDOW's height or width to SIZE.  WIDTH_P non-zero means set
 -   WINDOW's width.  Resize WINDOW's children, if any, so that they keep
 -   their proportionate size relative to WINDOW.
 -
 -   If FIRST_ONLY is 1, change only the first of WINDOW's children when
 -   they are in series.  If LAST_ONLY is 1, change only the last of
 -   WINDOW's children when they are in series.
 -
 -   Propagate WINDOW's top or left edge position to children.  Delete
 -   windows that become too small unless NODELETE_P is 1.  When
 -   NODELETE_P equals 2 do not honor settings for window-min-height and
 -   window-min-width when resizing windows but use safe defaults instead.
 -   This should give better behavior when resizing frames.  */
 -
 -static void
 -size_window (Lisp_Object window, int size, int width_p, int nodelete_p, int first_only, int last_only)
 -{
 -  struct window *w = XWINDOW (window);
 -  struct window *c;
 -  Lisp_Object child, *forward, *sideward;
 -  int old_size = WINDOW_TOTAL_SIZE (w, width_p);
 -
 -  size = max (0, size);
 -
 -  /* Delete WINDOW if it's too small.  */
 -  if (nodelete_p != 1 && !NILP (w->parent)
 -      && size < window_min_size_1 (w, width_p, nodelete_p == 2))
 -    {
 -      delete_window (window);
 -      return;
 -    }
 -
 -  /* Set redisplay hints.  */
 -  w->last_modified = make_number (0);
 -  w->last_overlay_modified = make_number (0);
 -  windows_or_buffers_changed++;
 -  FRAME_WINDOW_SIZES_CHANGED (XFRAME (w->frame)) = 1;
 -
 -  if (width_p)
 -    {
 -      sideward = &w->vchild;
 -      forward = &w->hchild;
 -      w->total_cols = make_number (size);
 -      adjust_window_margins (w);
 -    }
 -  else
 -    {
 -      sideward = &w->hchild;
 -      forward = &w->vchild;
 -      w->total_lines = make_number (size);
 -      w->orig_total_lines = Qnil;
 -    }
 -
 -  if (!NILP (*sideward))
 -    {
 -      /* We have a chain of parallel siblings whose size should all change.  */
 -      for (child = *sideward; !NILP (child); child = c->next)
 -      {
 -        c = XWINDOW (child);
 -        if (width_p)
 -          c->left_col = w->left_col;
 -        else
 -          c->top_line = w->top_line;
 -        size_window (child, size, width_p, nodelete_p,
 -                     first_only, last_only);
 -      }
 -    }
 -  else if (!NILP (*forward) && last_only)
 -    {
 -      /* Change the last in a series of siblings.  */
 -      Lisp_Object last_child;
 -      int child_size;
 -
 -      for (child = *forward; !NILP (child); child = c->next)
 -      {
 -        c = XWINDOW (child);
 -        last_child = child;
 -      }
 -
 -      child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -      size_window (last_child, size - old_size + child_size,
 -                 width_p, nodelete_p, first_only, last_only);
 -    }
 -  else if (!NILP (*forward) && first_only)
 -    {
 -      /* Change the first in a series of siblings.  */
 -      int child_size;
 -
 -      child = *forward;
 -      c = XWINDOW (child);
 -
 -      if (width_p)
 -      c->left_col = w->left_col;
 -      else
 -      c->top_line = w->top_line;
 -
 -      child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -      size_window (child, size - old_size + child_size,
 -                 width_p, nodelete_p, first_only, last_only);
 -    }
 -  else if (!NILP (*forward))
 -    {
 -      int fixed_size, each IF_LINT (= 0), extra IF_LINT (= 0), n;
 -      int resize_fixed_p, nfixed;
 -      int last_pos, first_pos, nchildren, total;
 -      int *new_sizes = NULL;
 -
 -      /* Determine the fixed-size portion of this window, and the
 -       number of child windows.  */
 -      fixed_size = nchildren = nfixed = total = 0;
 -      for (child = *forward; !NILP (child); child = c->next, ++nchildren)
 -      {
 -        int child_size;
 -
 -        c = XWINDOW (child);
 -        child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -        total += child_size;
 -
 -        if (window_fixed_size_p (c, width_p, 0))
 -          {
 -            fixed_size += child_size;
 -            ++nfixed;
 -          }
 -      }
 -
 -      /* If the new size is smaller than fixed_size, or if there
 -       aren't any resizable windows, allow resizing fixed-size
 -       windows.  */
 -      resize_fixed_p = nfixed == nchildren || size < fixed_size;
 -
 -      /* Compute how many lines/columns to add/remove to each child.  The
 -       value of extra takes care of rounding errors.  */
 -      n = resize_fixed_p ? nchildren : nchildren - nfixed;
 -      if (size < total && n > 1)
 -        new_sizes = shrink_windows (total, size, nchildren, n,
 -                                    resize_fixed_p, *forward, width_p,
 -                                  nodelete_p == 2);
 -      else
 -        {
 -          each = (size - total) / n;
 -          extra = (size - total) - n * each;
 -        }
 -
 -      /* Compute new children heights and edge positions.  */
 -      first_pos = width_p ? XINT (w->left_col) : XINT (w->top_line);
 -      last_pos = first_pos;
 -      for (n = 0, child = *forward; !NILP (child); child = c->next, ++n)
 -      {
 -        int new_child_size, old_child_size;
 -
 -        c = XWINDOW (child);
 -        old_child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -        new_child_size = old_child_size;
 -
 -        /* The top or left edge position of this child equals the
 -           bottom or right edge of its predecessor.  */
 -        if (width_p)
 -          c->left_col = make_number (last_pos);
 -        else
 -          c->top_line = make_number (last_pos);
 -
 -        /* If this child can be resized, do it.  */
 -        if (resize_fixed_p || !window_fixed_size_p (c, width_p, 0))
 -          {
 -            new_child_size =
 -              new_sizes ? new_sizes[n] : old_child_size + each + extra;
 -            extra = 0;
 -          }
 -
 -        /* Set new size.  Note that size_window also propagates
 -           edge positions to children, so it's not a no-op if we
 -           didn't change the child's size.  */
 -        size_window (child, new_child_size, width_p, 1,
 -                     first_only, last_only);
 -
 -        /* Remember the bottom/right edge position of this child; it
 -           will be used to set the top/left edge of the next child.  */
 -          last_pos += new_child_size;
 -      }
 -
 -      xfree (new_sizes);
 -
 -      /* We should have covered the parent exactly with child windows.  */
 -      xassert (size == last_pos - first_pos);
 -
 -      /* Now delete any children that became too small.  */
 -      if (nodelete_p != 1)
 -      for (child = *forward; !NILP (child); child = c->next)
 -        {
 -          int child_size;
 -
 -          c = XWINDOW (child);
 -          child_size = WINDOW_TOTAL_SIZE (c, width_p);
 -          size_window (child, child_size, width_p, nodelete_p,
 -                       first_only, last_only);
 -        }
 -    }
 -}
 -
 -/* Set WINDOW's height to HEIGHT, and recursively change the height of
 -   WINDOW's children.  NODELETE zero means windows that have become
 -   smaller than window-min-height in the process may be deleted.
 -   NODELETE 1 means never delete windows that become too small in the
 -   process.  (The caller should check later and do so if appropriate.)
 -   NODELETE 2 means delete only windows that have become too small to be
 -   displayed correctly.  */
 -
 -void
 -set_window_height (Lisp_Object window, int height, int nodelete)
 -{
 -  size_window (window, height, 0, nodelete, 0, 0);
 -}
 -
 -/* Set WINDOW's width to WIDTH, and recursively change the width of
 -   WINDOW's children.  NODELETE zero means windows that have become
 -   smaller than window-min-width in the process may be deleted.
 -   NODELETE 1 means never delete windows that become too small in the
 -   process.  (The caller should check later and do so if appropriate.)
 -   NODELETE 2 means delete only windows that have become too small to be
 -   displayed correctly.  */
 -
 -void
 -set_window_width (Lisp_Object window, int width, int nodelete)
 -{
 -  size_window (window, width, 1, nodelete, 0, 0);
 -}
 -
 -/* Change window heights in windows rooted in WINDOW by N lines.  */
 -
 -void
 -change_window_heights (Lisp_Object window, int n)
 -{
 -  struct window *w = XWINDOW (window);
 -
 -  XSETFASTINT (w->top_line, XFASTINT (w->top_line) + n);
 -  XSETFASTINT (w->total_lines, XFASTINT (w->total_lines) - n);
 -
 -  if (INTEGERP (w->orig_top_line))
 -    XSETFASTINT (w->orig_top_line, XFASTINT (w->orig_top_line) + n);
 -  if (INTEGERP (w->orig_total_lines))
 -    XSETFASTINT (w->orig_total_lines, XFASTINT (w->orig_total_lines) - n);
 -
 -  /* Handle just the top child in a vertical split.  */
 -  if (!NILP (w->vchild))
 -    change_window_heights (w->vchild, n);
 -
 -  /* Adjust all children in a horizontal split.  */
 -  for (window = w->hchild; !NILP (window); window = w->next)
 -    {
 -      w = XWINDOW (window);
 -      change_window_heights (window, n);
 -    }
 -}
 -
  \f
- EXFUN (Fset_window_fringes, 4);
- EXFUN (Fset_window_scroll_bars, 4);
 -int window_select_count;
 -
+ static Lisp_Object Fset_window_margins (Lisp_Object, Lisp_Object, Lisp_Object);
+ static Lisp_Object Fset_window_fringes (Lisp_Object, Lisp_Object, Lisp_Object,
+                                       Lisp_Object);
+ static Lisp_Object Fset_window_scroll_bars (Lisp_Object, Lisp_Object,
+                                           Lisp_Object, Lisp_Object);
+ static Lisp_Object Fset_window_vscroll (Lisp_Object, Lisp_Object, Lisp_Object);
  
 +/* The following three routines are needed for running a window's
 +   configuration change hook.  */
  static void
  run_funs (Lisp_Object funs)
  {
@@@ -5348,14 -5824,10 +5361,12 @@@ struct save_window_dat
  /* This is saved as a Lisp_Vector  */
  struct saved_window
  {
-   /* these first two must agree with struct Lisp_Vector in lisp.h */
-   EMACS_UINT size;
-   struct Lisp_Vector *next_from_Lisp_Vector_struct;
+   struct vectorlike_header header;
 -  Lisp_Object window;
 +
 +  Lisp_Object window, clone_number;
    Lisp_Object buffer, start, pointm, mark;
    Lisp_Object left_col, top_line, total_cols, total_lines;
 +  Lisp_Object normal_cols, normal_lines;
    Lisp_Object hscroll, min_hscroll;
    Lisp_Object parent, prev;
    Lisp_Object start_at_line_beg;
@@@ -5533,13 -6003,12 +5544,13 @@@ the return value is nil.  Otherwise th
         Save their current buffers in their height fields, since we may
         need it later, if a buffer saved in the configuration is now
         dead.  */
 -      delete_all_subwindows (XWINDOW (FRAME_ROOT_WINDOW (f)));
 +      delete_all_subwindows (FRAME_ROOT_WINDOW (f));
  
-       for (k = 0; k < saved_windows->size; k++)
+       for (k = 0; k < saved_windows->header.size; k++)
        {
          p = SAVED_WINDOW_N (saved_windows, k);
 -        w = XWINDOW (p->window);
 +        window = p->window;
 +        w = XWINDOW (window);
          w->next = Qnil;
  
          if (!NILP (p->parent))
@@@ -6351,82 -6842,116 +6362,82 @@@ freeze_window_starts (struct frame *f, 
                            Initialization
   ***********************************************************************/
  
 -/* Return 1 if window configurations C1 and C2
 -   describe the same state of affairs.  This is used by Fequal.  */
 +/* Return 1 if window configurations CONFIGURATION1 and CONFIGURATION2
 +   describe the same state of affairs.  This is used by Fequal.
 +
 +   ignore_positions non-zero means ignore non-matching scroll positions
 +   and the like.
 +
 +   This ignores a couple of things like the dedicatedness status of
 +   window, splits, nest and the like.  This might have to be fixed.  */
  
  int
 -compare_window_configurations (Lisp_Object c1, Lisp_Object c2, int ignore_positions)
 +compare_window_configurations (Lisp_Object configuration1, Lisp_Object configuration2, int ignore_positions)
  {
    register struct save_window_data *d1, *d2;
 -  struct Lisp_Vector *sw1, *sw2;
 +  struct Lisp_Vector *sws1, *sws2;
    int i;
  
 -  CHECK_WINDOW_CONFIGURATION (c1);
 -  CHECK_WINDOW_CONFIGURATION (c2);
 -
 -  d1 = (struct save_window_data *) XVECTOR (c1);
 -  d2 = (struct save_window_data *) XVECTOR (c2);
 -  sw1 = XVECTOR (d1->saved_windows);
 -  sw2 = XVECTOR (d2->saved_windows);
 -
 -  if (d1->frame_cols != d2->frame_cols)
 -    return 0;
 -  if (d1->frame_lines != d2->frame_lines)
 -    return 0;
 -  if (d1->frame_menu_bar_lines != d2->frame_menu_bar_lines)
 -    return 0;
 -  if (! EQ (d1->selected_frame, d2->selected_frame))
 -    return 0;
 -  /* Don't compare the current_window field directly.
 -     Instead see w1_is_current and w2_is_current, below.  */
 -  if (! EQ (d1->current_buffer, d2->current_buffer))
 -    return 0;
 -  if (! ignore_positions)
 -    {
 -      if (! EQ (d1->minibuf_scroll_window, d2->minibuf_scroll_window))
 -      return 0;
 -      if (! EQ (d1->minibuf_selected_window, d2->minibuf_selected_window))
 -      return 0;
 -    }
 -  /* Don't compare the root_window field.
 -     We don't require the two configurations
 -     to use the same window object,
 -     and the two root windows must be equivalent
 -     if everything else compares equal.  */
 -  if (! EQ (d1->focus_frame, d2->focus_frame))
 -    return 0;
 -
 -  /* Verify that the two confis have the same number of windows.  */
 -  if (sw1->header.size != sw2->header.size)
 +  CHECK_WINDOW_CONFIGURATION (configuration1);
 +  CHECK_WINDOW_CONFIGURATION (configuration2);
 +
 +  d1 = (struct save_window_data *) XVECTOR (configuration1);
 +  d2 = (struct save_window_data *) XVECTOR (configuration2);
 +  sws1 = XVECTOR (d1->saved_windows);
 +  sws2 = XVECTOR (d2->saved_windows);
 +
 +  /* Frame settings must match.  */
 +  if (d1->frame_cols != d2->frame_cols
 +      || d1->frame_lines != d2->frame_lines
 +      || d1->frame_menu_bar_lines != d2->frame_menu_bar_lines
 +      || !EQ (d1->selected_frame, d2->selected_frame)
 +      || !EQ (d1->current_buffer, d2->current_buffer)
 +      || (!ignore_positions
 +        && (!EQ (d1->minibuf_scroll_window, d2->minibuf_scroll_window)
 +            || !EQ (d1->minibuf_selected_window, d2->minibuf_selected_window)))
 +      || !EQ (d1->focus_frame, d2->focus_frame)
 +      /* Verify that the two configurations have the same number of windows.  */
-       || sws1->size != sws2->size)
++      || sws1->header.size != sws2->header.size)
      return 0;
  
-   for (i = 0; i < sws1->size; i++)
 -  for (i = 0; i < sw1->header.size; i++)
++  for (i = 0; i < sws1->header.size; i++)
      {
 -      struct saved_window *p1, *p2;
 +      struct saved_window *sw1, *sw2;
        int w1_is_current, w2_is_current;
  
 -      p1 = SAVED_WINDOW_N (sw1, i);
 -      p2 = SAVED_WINDOW_N (sw2, i);
 -
 -      /* Verify that the current windows in the two
 -       configurations correspond to each other.  */
 -      w1_is_current = EQ (d1->current_window, p1->window);
 -      w2_is_current = EQ (d2->current_window, p2->window);
 -
 -      if (w1_is_current != w2_is_current)
 -      return 0;
 -
 -      /* Verify that the corresponding windows do match.  */
 -      if (! EQ (p1->buffer, p2->buffer))
 -      return 0;
 -      if (! EQ (p1->left_col, p2->left_col))
 -      return 0;
 -      if (! EQ (p1->top_line, p2->top_line))
 -      return 0;
 -      if (! EQ (p1->total_cols, p2->total_cols))
 -      return 0;
 -      if (! EQ (p1->total_lines, p2->total_lines))
 -      return 0;
 -      if (! EQ (p1->display_table, p2->display_table))
 -      return 0;
 -      if (! EQ (p1->parent, p2->parent))
 -      return 0;
 -      if (! EQ (p1->prev, p2->prev))
 -      return 0;
 -      if (! ignore_positions)
 -      {
 -        if (! EQ (p1->hscroll, p2->hscroll))
 -          return 0;
 -        if (!EQ (p1->min_hscroll, p2->min_hscroll))
 -          return 0;
 -        if (! EQ (p1->start_at_line_beg, p2->start_at_line_beg))
 -          return 0;
 -        if (NILP (Fequal (p1->start, p2->start)))
 -          return 0;
 -        if (NILP (Fequal (p1->pointm, p2->pointm)))
 -          return 0;
 -        if (NILP (Fequal (p1->mark, p2->mark)))
 -          return 0;
 -      }
 -      if (! EQ (p1->left_margin_cols, p2->left_margin_cols))
 -      return 0;
 -      if (! EQ (p1->right_margin_cols, p2->right_margin_cols))
 -      return 0;
 -      if (! EQ (p1->left_fringe_width, p2->left_fringe_width))
 -      return 0;
 -      if (! EQ (p1->right_fringe_width, p2->right_fringe_width))
 -      return 0;
 -      if (! EQ (p1->fringes_outside_margins, p2->fringes_outside_margins))
 -      return 0;
 -      if (! EQ (p1->scroll_bar_width, p2->scroll_bar_width))
 -      return 0;
 -      if (! EQ (p1->vertical_scroll_bar_type, p2->vertical_scroll_bar_type))
 +      sw1 = SAVED_WINDOW_N (sws1, i);
 +      sw2 = SAVED_WINDOW_N (sws2, i);
 +
 +      if (
 +         /* The "current" windows in the two configurations must
 +            correspond to each other.  */
 +        EQ (d1->current_window, sw1->window)
 +        != EQ (d2->current_window, sw2->window)
 +        /* Windows' buffers must match.  */
 +        || !EQ (sw1->buffer, sw2->buffer)
 +        || !EQ (sw1->left_col, sw2->left_col)
 +        || !EQ (sw1->top_line, sw2->top_line)
 +        || !EQ (sw1->total_cols, sw2->total_cols)
 +        || !EQ (sw1->total_lines, sw2->total_lines)
 +        || !EQ (sw1->display_table, sw2->display_table)
 +        /* The next two disjuncts check the window structure for
 +           equality.  */
 +        || !EQ (sw1->parent, sw2->parent)
 +        || !EQ (sw1->prev, sw2->prev)
 +        || (!ignore_positions
 +            && (!EQ (sw1->hscroll, sw2->hscroll)
 +                || !EQ (sw1->min_hscroll, sw2->min_hscroll)
 +                || !EQ (sw1->start_at_line_beg, sw2->start_at_line_beg)
 +                || NILP (Fequal (sw1->start, sw2->start))
 +                || NILP (Fequal (sw1->pointm, sw2->pointm))
 +                || NILP (Fequal (sw1->mark, sw2->mark))))
 +        || !EQ (sw1->left_margin_cols, sw2->left_margin_cols)
 +        || !EQ (sw1->right_margin_cols, sw2->right_margin_cols)
 +        || !EQ (sw1->left_fringe_width, sw2->left_fringe_width)
 +        || !EQ (sw1->right_fringe_width, sw2->right_fringe_width)
 +        || !EQ (sw1->fringes_outside_margins, sw2->fringes_outside_margins)
 +        || !EQ (sw1->scroll_bar_width, sw2->scroll_bar_width)
 +        || !EQ (sw1->vertical_scroll_bar_type, sw2->vertical_scroll_bar_type))
        return 0;
      }
  
diff --cc src/window.h
Simple merge
diff --cc src/xdisp.c
index 015d6e612bb8b5ea66bb2643f79599f4e24b9cae,66e51ac2c3257e85a448571a61d5915021f09685..c0ad82daca0241fe7167219eb95e7123bc28258f
@@@ -27022,22 -26988,24 +26985,23 @@@ init_xdisp (void
  
    CHARPOS (this_line_start_pos) = 0;
  
 -  mini_w = XWINDOW (minibuf_window);
 -  root_window = FRAME_ROOT_WINDOW (XFRAME (WINDOW_FRAME (mini_w)));
 -  echo_area_window = minibuf_window;
 -
    if (!noninteractive)
      {
-       /* Does it really make sense to "bootstrap" from minibuf_window?  */
 -      struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (root_window)));
 +      struct window *m = XWINDOW (minibuf_window);
 +      Lisp_Object frame = m->frame;
 +      struct frame *f = XFRAME (frame);
 +      Lisp_Object root = FRAME_ROOT_WINDOW (f);
 +      struct window *r = XWINDOW (root);
        int i;
  
 -      XWINDOW (root_window)->top_line = make_number (FRAME_TOP_MARGIN (f));
 -      set_window_height (root_window,
 -                       FRAME_LINES (f) - 1 - FRAME_TOP_MARGIN (f),
 -                       0);
 -      mini_w->top_line = make_number (FRAME_LINES (f) - 1);
 -      set_window_height (minibuf_window, 1, 0);
++      echo_area_window = minibuf_window;
 -      XWINDOW (root_window)->total_cols = make_number (FRAME_COLS (f));
 -      mini_w->total_cols = make_number (FRAME_COLS (f));
 +      XSETFASTINT (r->top_line, FRAME_TOP_MARGIN (f));
 +      XSETFASTINT (r->total_lines, FRAME_LINES (f) - 1 - FRAME_TOP_MARGIN (f));
 +      XSETFASTINT (r->total_cols, FRAME_COLS (f));
 +      XSETFASTINT (m->top_line, FRAME_LINES (f) - 1);
 +      XSETFASTINT (m->total_lines, 1);
 +      XSETFASTINT (m->total_cols, FRAME_COLS (f));
  
        scratch_glyph_row.glyphs[TEXT_AREA] = scratch_glyphs;
        scratch_glyph_row.glyphs[TEXT_AREA + 1]
diff --cc src/xfns.c
Simple merge