emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 8e46d93 1/2: Merge from origin/emacs-26


From: Glenn Morris
Subject: [Emacs-diffs] master 8e46d93 1/2: Merge from origin/emacs-26
Date: Sat, 16 Dec 2017 15:19:31 -0500 (EST)

branch: master
commit 8e46d93dcdabfa9fb099345fa12378479b4dbe63
Merge: da2c441 28e0261
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>

    Merge from origin/emacs-26
    
    28e0261890 * lisp/progmodes/cc-defs.el (c-version): Update to 5.33.1.
    ac53084f9b Improve fix for Bug#29712
    ffd4771560 * doc/lispref/sequences.texi (Sequence Functions): Improve...
    f274cbd185 Avoid reordering of output in 'shr-insert-document'
    7890864413 Improve documentation of 'invisible-p'
    a1327bbc64 Remove one more check that Vframe_list is non-nil
    63b6281fdd Fix off-by-one error in 'css--hex-color'
    804b37ca63 Save and restore text-pixel height and width of frames (Bu...
    777fe94661 Partially revert "Mention new strictness for &optional, &r...
    ad17db7964 * lisp/vc/smerge-mode.el (smerge-refine): Respect font-loc...
    5a7d0095a4 * lisp/vc/smerge-mode.el (smerge-refine): Replace obsolete...
    e019c35df6 FOR_EACH_FRAME no longer assumes frame-list
    d64b88da2f * src/font.c (Ffont_info): Doc fix.  (Bug#29682)
    92b2604a7f Modernise message.el face spec syntax
    b1efbe6564 Update message.el obsolete face aliases
    2494c14e76 ; * lisp/comint.el (comint-terminfo-terminal): Add a :vers...
    12ad276d15 Improve documentation of TERM environment variable
    8ed529f0f3 Add option to configure comint TERM
    889f07c352 Better support utf-8-with-signature and utf-8-hfs in XML/HTML
    a2697fac0e * lisp/menu-bar.el (menu-bar-mode): Doc fix.
    ffb50eace6 ; * etc/NEWS: Fix last change.
    95606af8b0 Fix Bug#29712 in tramp-tests.el
    9bf66c6bee Don't run FOR_EACH_FRAME when there's no frame left (Bug#2...
    c2a88ec8e8 * lisp/textmodes/tex-mode.el: Ensure uncompiled file is lo...
    b178870528 Remember password change for IMAP in Gnus (Bug#29692)
    a21dac18bb Add %DUMBFW to the default GnuTLS priority strings
    780407cff1 Small fixes prompted by make check-declare
    541a60108d Fix some custom groups
    e220d6e112 Fix fontification of first declaration within a C++ lambda...
    aa66da220c * src/data.c (Fadd_variable_watcher): Doc fix.
    f838210b01 Fix misfontification of C++ member initialization list aft...
    232c6465ce Fix doc-string of Fbuffer_list
    3f9aac68d7 Don't raise an extraneous frame (bug#29696)
    e7b1111155 Mention new strictness for &optional, &rest in arglists (B...
    4cb8696e47 Don't misfontify "foo ()" inside C++ initialization parent...
    ce31e726ad Fixes for defcustoms, prompted by cus-test-opts
    aacd1e14fc * lisp/net/newst-backend.el (newsticker--raw-url-list-defa...
    7e2f4d3d41 * lisp/htmlfontify.el (hfy-which-etags): Fix it.
    52d2a690f6 Add missing :version tags revealed by cusver-check
    f5d0360234 Escape column-zero doc parens
    
    # Conflicts:
    #   etc/NEWS
---
 doc/emacs/building.texi               |   5 ++
 doc/emacs/misc.texi                   |  10 ++++
 doc/emacs/trouble.texi                |   2 +-
 doc/lispref/display.texi              |   7 ++-
 doc/lispref/sequences.texi            |  13 ++++
 doc/misc/emacs-gnutls.texi            |   6 +-
 etc/NEWS.26                           |  23 +++++++
 lisp/calendar/icalendar.el            |   2 +-
 lisp/comint.el                        |  37 ++++++++----
 lisp/emacs-lisp/bytecomp.el           |   1 +
 lisp/epa.el                           |   1 +
 lisp/eshell/em-tramp.el               |   2 +
 lisp/eshell/em-xtra.el                |   2 +
 lisp/files.el                         |   4 +-
 lisp/frame.el                         |   4 +-
 lisp/frameset.el                      |  28 ++++++++-
 lisp/gnus/gnus-art.el                 |   5 +-
 lisp/gnus/gnus-cloud.el               |   2 +
 lisp/gnus/mail-source.el              |   3 +-
 lisp/gnus/message.el                  | 110 ++++++++++++++++------------------
 lisp/htmlfontify.el                   |   6 +-
 lisp/image-dired.el                   |   2 +
 lisp/international/mule.el            |  15 ++++-
 lisp/menu-bar.el                      |   4 +-
 lisp/net/gnutls.el                    |   6 +-
 lisp/net/mailcap.el                   |   1 +
 lisp/net/newst-backend.el             |  28 +++++----
 lisp/net/shr.el                       |  13 ++--
 lisp/progmodes/cc-defs.el             |   2 +-
 lisp/progmodes/cc-engine.el           |  42 +++++++++----
 lisp/progmodes/cc-fonts.el            |  14 ++++-
 lisp/progmodes/cc-langs.el            |  38 ++++++++++--
 lisp/progmodes/cc-vars.el             |   7 ++-
 lisp/progmodes/compile.el             |   8 +--
 lisp/progmodes/flymake.el             |   2 +
 lisp/progmodes/grep.el                |   1 +
 lisp/progmodes/js.el                  |   1 +
 lisp/progmodes/perl-mode.el           |   1 +
 lisp/progmodes/python.el              |   3 +
 lisp/progmodes/ruby-mode.el           |   2 +
 lisp/progmodes/verilog-mode.el        |   8 +--
 lisp/textmodes/css-mode.el            |   2 +-
 lisp/textmodes/less-css-mode.el       |   7 ++-
 lisp/textmodes/tex-mode.el            |   9 ++-
 lisp/textmodes/tildify.el             |   2 +-
 lisp/time.el                          |   4 +-
 lisp/vc/cvs-status.el                 |   5 --
 lisp/vc/diff-mode.el                  |   9 +--
 lisp/vc/emerge.el                     |   6 +-
 lisp/vc/smerge-mode.el                |  10 ++--
 lisp/vc/vc-hg.el                      |   2 +-
 lisp/vc/vc-hooks.el                   |   4 +-
 src/buffer.c                          |   6 +-
 src/data.c                            |   2 +-
 src/font.c                            |  10 ++--
 src/frame.c                           |   5 ++
 src/frame.h                           |   5 +-
 src/xdisp.c                           |  28 +++++----
 test/lisp/net/tramp-tests.el          |   2 +-
 test/lisp/textmodes/css-mode-tests.el |   6 ++
 60 files changed, 395 insertions(+), 200 deletions(-)

diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 87ac61b..e108a4e 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -303,6 +303,11 @@ And here's how to do it in csh:
 if ($?prompt) set prompt = @dots{}
 @end example
 
address@hidden TERM, environment variable, in compilation mode
+  If you want to customize the value of the @env{TERM} environment
+variable passed to the compilation subshell, customize the variable
address@hidden (@pxref{Shell Options}).
+
   Emacs does not expect a compiler process to launch asynchronous
 subprocesses; if it does, and they keep running after the main
 compiler process has terminated, Emacs may kill them or their output
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 6ad5fba..e4be004 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1396,6 +1396,16 @@ directory stack if they are not already on it
 (@code{shell-pushd-dunique}).  The values you choose should match the
 underlying shell, of course.
 
address@hidden comint-terminfo-terminal
address@hidden TERM, environment variable, in sub-shell
+Comint mode sets the @env{TERM} environment variable to a safe default
+value, but this value disables some useful features.  For example,
+color is disabled in applications that use @env{TERM} to determine if
+color is supported.  Therefore, Emacs provides an option
address@hidden, which you can set to a terminal that
+is present in your system's terminfo database, in order to take
+advantage of advanced features of that terminal.
+
 @node Terminal emulator
 @subsection Emacs Terminal Emulator
 @findex term
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 4a836c3..e98322d 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -780,7 +780,7 @@ the dribble file.
 @item
 @findex open-termscript
 @cindex termscript file
address@hidden @env{TERM} environment variable
address@hidden TERM, environment variable, and display bugs
 For possible display bugs, the terminal type (the value of environment
 variable @env{TERM}), the complete termcap entry for the terminal from
 @file{/etc/termcap} (since that file is not identical on all machines),
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 7af8d9e..50069e3 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -929,13 +929,18 @@ major mode should use the mode's own name as an element of
 
 @defun invisible-p pos-or-prop
 If @var{pos-or-prop} is a marker or number, this function returns a
address@hidden value if the text at that position is invisible.
address@hidden value if the text at that position is currently
+invisible.
 
 If @var{pos-or-prop} is any other kind of Lisp object, that is taken
 to mean a possible value of the @code{invisible} text or overlay
 property.  In that case, this function returns a address@hidden value
 if that value would cause text to become invisible, based on the
 current value of @code{buffer-invisibility-spec}.
+
+The return value of this function is @code{t} if the text would be
+completely hidden on display, or a address@hidden, address@hidden value
+if the text would be replaced by an ellipsis.
 @end defun
 
 @vindex line-move-ignore-invisible
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 4fba880..8d56e02 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -425,6 +425,7 @@ useful example of @code{sort}.
 
 @cindex sequence functions in seq
 @cindex seq library
address@hidden sequences, generalized
   The @file{seq.el} library provides the following additional sequence
 manipulation macros and functions, prefixed with @code{seq-}.  To use
 them, you must first load the @file{seq} library.
@@ -859,6 +860,7 @@ it is a function of two arguments to use instead of the 
default @code{equal}.
 @end defun
 
 @defun seq-subseq sequence start &optional end
address@hidden sub-sequence
   This function returns a subset of @var{sequence} from @var{start}
 to @var{end}, both integers (@var{end} defaults to the last element).
 If @var{start} or @var{end} is negative, it counts from the end of
@@ -926,6 +928,8 @@ contain less elements than @var{n}.  @var{n} must be an 
integer.  If
 @end defun
 
 @defun seq-intersection sequence1 sequence2 &optional function
address@hidden sequences, intersection of
address@hidden intersection of sequences
   This function returns a list of the elements that appear both in
 @var{sequence1} and @var{sequence2}.  If the optional argument
 @var{function} is address@hidden, it is a function of two arguments to
@@ -972,6 +976,10 @@ of @var{sequence}.  Keys are compared using @code{equal}.
 @end defun
 
 @defun seq-into sequence type
address@hidden convert sequence to another type
address@hidden list to vector
address@hidden vector to list
address@hidden string to vector
   This function converts the sequence @var{sequence} into a sequence
 of type @var{type}.  @var{type} can be one of the following symbols:
 @code{vector}, @code{string} or @code{list}.
@@ -993,6 +1001,8 @@ of type @var{type}.  @var{type} can be one of the 
following symbols:
 @end defun
 
 @defun seq-min sequence
address@hidden minimum value of sequence
address@hidden sequence minimum
   This function returns the smallest element of @var{sequence}.  The
 elements of @var{sequence} must be numbers or markers
 (@pxref{Markers}).
@@ -1010,6 +1020,8 @@ elements of @var{sequence} must be numbers or markers
 @end defun
 
 @defun seq-max sequence
address@hidden maximum value of sequence
address@hidden sequence maximum
   This function returns the largest element of @var{sequence}.  The
 elements of @var{sequence} must be numbers or markers.
 
@@ -1027,6 +1039,7 @@ elements of @var{sequence} must be numbers or markers.
 
 @defmac seq-doseq (var sequence) address@hidden
 @cindex sequence iteration
address@hidden iteration over vector or string
   This macro is like @code{dolist} (@pxref{Iteration, dolist}), except
 that @var{sequence} can be a list, vector or string.  This is
 primarily useful for side-effects.
diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi
index 92846a9..1715c83 100644
--- a/doc/misc/emacs-gnutls.texi
+++ b/doc/misc/emacs-gnutls.texi
@@ -116,9 +116,11 @@ information.
 The @code{gnutls-algorithm-priority} variable sets the GnuTLS priority
 string.  This is global, not per host name (although
 @code{gnutls-negotiate} supports a priority string per connection so
-it could be done if needed).  The priority string syntax is in the
+it could be done if needed).  For details see the
 @uref{https://www.gnu.org/software/gnutls/documentation.html, GnuTLS
-documentation}.
+documentation} and the
address@hidden://gnutls.org/manual/html_node/Priority-Strings.html,
+GnuTLS priority string syntax and description}.
 @end defvar
 
 @defvar gnutls-trustfiles
diff --git a/etc/NEWS.26 b/etc/NEWS.26
index 64b53d8..784c608 100644
--- a/etc/NEWS.26
+++ b/etc/NEWS.26
@@ -431,6 +431,11 @@ You can enable this by customizing 'mwheel-tilt-scroll-p'. 
 If you
 want to reverse the direction of the scroll, customize
 'mwheel-flip-direction'.
 
++++
+** The default GnuTLS priority string now includes %DUMBFW.
+This is to avoid bad behavior in some firewalls, which causes the
+connection to be closed by the remote host.
+
 ** Emacsclient changes
 
 +++
@@ -807,6 +812,13 @@ whose content matches a regexp; bound to '% g'.
 *** New user option 'comint-move-point-for-matching-input' to control
 where to place point after 'C-c M-r' and 'C-c M-s'.
 
++++
+*** New user option 'comint-terminfo-terminal'.
+This option allows control of the value of the TERM environment
+variable Emacs puts into the environment of the Comint mode and its
+derivatives, such as Shell mode and Compilation Shell minor-mode.  The
+default is "dumb", for compatibility with previous behavior.
+
 ** Compilation mode
 
 ---
@@ -1462,6 +1474,17 @@ them through 'format' first.  Even that is discouraged: 
for ElDoc
 support, you should set 'eldoc-documentation-function' instead of
 calling 'eldoc-message' directly.
 
+---
+** Using '&rest' or '&optional' incorrectly is now an error.
+For example giving '&optional' without a following variable, or
+passing '&optional' multiple times:
+
+    (defun foo (&optional &rest x))
+    (defun bar (&optional &optional x))
+
+Previously, Emacs would just ignore the extra keyword, or give
+incorrect results in certain cases.
+
 
 * Lisp Changes in Emacs 26.1
 
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index 129cd6d..27f1b03 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -1310,7 +1310,7 @@ Returns an alist."
 Argument ADVANCE-TIME is a number giving the time when the alarm
 fires (minutes before the respective event).  Argument ALARM-SPEC
 is a list which must be one of (audio), (display) or
-(email (ADDRESS1 ...)), see `icalendar-export-alarms'.  Argument
+\(email (ADDRESS1 ...)), see `icalendar-export-alarms'.  Argument
 SUMMARY is a string which contains a short description for the
 alarm."
   (let* ((action (car alarm-spec))
diff --git a/lisp/comint.el b/lisp/comint.el
index aa7dab2..5ee4e48 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -290,6 +290,7 @@ If `after-input', point will be positioned after the input 
typed
 by the user, but before the rest of the history entry that has
 been inserted.  If `end-of-line', point will be positioned at the
 end of the current logical (not visual) line after insertion."
+  :version "26.1"
   :type '(radio (const :tag "Stay after input" after-input)
                 (const :tag "Move to end of line" end-of-line))
   :group 'comint)
@@ -458,6 +459,12 @@ executed once when the buffer is created."
   :type 'hook
   :group 'comint)
 
+(defcustom comint-terminfo-terminal "dumb"
+  "Value to use for TERM when the system uses terminfo."
+  :type 'string
+  :group 'comint
+  :version "26.1")
+
 (defvar comint-mode-map
   (let ((map (make-sparse-keymap)))
     ;; Keys:
@@ -816,19 +823,7 @@ series of processes in the same Comint buffer.  The hook
 (defun comint-exec-1 (name buffer command switches)
   (let ((process-environment
         (nconc
-         ;; If using termcap, we specify `emacs' as the terminal type
-         ;; because that lets us specify a width.
-         ;; If using terminfo, we specify `dumb' because that is
-         ;; a defined terminal type.  `emacs' is not a defined terminal type
-         ;; and there is no way for us to define it here.
-         ;; Some programs that use terminfo get very confused
-         ;; if TERM is not a valid terminal type.
-         ;; ;; There is similar code in compile.el.
-         (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
-             (list "TERM=dumb" "TERMCAP="
-                   (format "COLUMNS=%d" (window-width)))
-           (list "TERM=emacs"
-                 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
+          (comint-term-environment)
          (list (format "INSIDE_EMACS=%s,comint" emacs-version))
          process-environment))
        (default-directory
@@ -857,6 +852,22 @@ series of processes in the same Comint buffer.  The hook
        (set-process-coding-system proc decoding encoding))
     proc))
 
+(defun comint-term-environment ()
+  "Return an environment variable list for terminal configuration."
+  ;; If using termcap, we specify `emacs' as the terminal type
+  ;; because that lets us specify a width.
+  ;; If using terminfo, we default to `dumb' because that is
+  ;; a defined terminal type.  `emacs' is not a defined terminal type
+  ;; and there is no way for us to define it here.
+  ;; Some programs that use terminfo get very confused
+  ;; if TERM is not a valid terminal type.
+  (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
+      (list (format "TERM=%s" comint-terminfo-terminal)
+            "TERMCAP="
+            (format "COLUMNS=%d" (window-width)))
+    (list "TERM=emacs"
+          (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width)))))
+
 (defun comint-nonblank-p (str)
   "Return non-nil if STR contains non-whitespace syntax."
   (not (string-match "\\`\\s *\\'" str)))
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index c898305..25f738c 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -236,6 +236,7 @@ This includes variable references and calls to functions 
such as `car'."
 
 (defcustom byte-compile-cond-use-jump-table t
   "Compile `cond' clauses to a jump table implementation (using a hash-table)."
+  :version "26.1"
   :group 'bytecomp
   :type 'boolean)
 
diff --git a/lisp/epa.el b/lisp/epa.el
index aca9aaa..8e84b5b 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -40,6 +40,7 @@
 If t, replace the original text without any confirmation.
 If nil, don't replace the original text and show the result in a new buffer.
 If neither t nor nil, ask user for confirmation."
+  :version "26.1"
   :type '(choice (const :tag "Never" nil)
                 (const :tag "Ask the user" ask)
                 (const :tag "Always" t))
diff --git a/lisp/eshell/em-tramp.el b/lisp/eshell/em-tramp.el
index e322cea..e2da346 100644
--- a/lisp/eshell/em-tramp.el
+++ b/lisp/eshell/em-tramp.el
@@ -32,6 +32,8 @@
   (require 'eshell)
   (require 'tramp))
 
+;; There are no items in this custom group, but eshell modules (ab)use
+;; custom groups.
 ;;;###autoload
 (progn
  (defgroup eshell-tramp nil
diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el
index 7b80f64..8981446 100644
--- a/lisp/eshell/em-xtra.el
+++ b/lisp/eshell/em-xtra.el
@@ -29,6 +29,8 @@
   (require 'pcomplete))
 (require 'compile)
 
+;; There are no items in this custom group, but eshell modules (ab)use
+;; custom groups.
 ;;;###autoload
 (progn
 (defgroup eshell-xtra nil
diff --git a/lisp/files.el b/lisp/files.el
index 8045ba5..e474de6 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5199,7 +5199,9 @@ Before and after saving the buffer, this function runs
 This allows you to stop `save-some-buffers' from asking
 about certain files that you'd usually rather not save."
   :group 'auto-save
-  :type 'function
+  ;; FIXME nil should not be a valid option, let alone the default,
+  ;; eg so that add-function can be used.
+  :type '(choice (const :tag "Default" nil) function)
   :version "26.1")
 
 (defun save-some-buffers (&optional arg pred)
diff --git a/lisp/frame.el b/lisp/frame.el
index 2e92532..6f8d6a1 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -800,7 +800,7 @@ the user during startup."
        (nreverse frame-initial-geometry-arguments))
   (cdr param-list))
 
-(declare-function x-focus-frame "frame.c" (frame))
+(declare-function x-focus-frame "frame.c" (frame &optional noactivate))
 
 (defun select-frame-set-input-focus (frame &optional norecord)
   "Select FRAME, raise it, and set input focus, if possible.
@@ -1484,7 +1484,7 @@ FRAME."
 
 (declare-function w32-mouse-absolute-pixel-position "w32fns.c")
 (declare-function x-mouse-absolute-pixel-position "xfns.c")
-(declare-function ns-mouse-absolute-pixel-position "nsfns.c")
+(declare-function ns-mouse-absolute-pixel-position "nsfns.m")
 
 (defun mouse-absolute-pixel-position ()
   "Return absolute position of mouse cursor in pixels.
diff --git a/lisp/frameset.el b/lisp/frameset.el
index 16940f8..e2d2641 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -745,6 +745,8 @@ The relationships recorded for each frame are
 - `delete-before' via `frameset--delete-before'
 - `parent-frame' via `frameset--parent-frame'
 - `mouse-wheel-frame' via `frameset--mouse-wheel-frame'
+- `text-pixel-width' via `frameset--text-pixel-width'
+- `text-pixel-height' via `frameset--text-pixel-height'
 
 Internal use only."
   ;; Record frames with their own minibuffer
@@ -791,7 +793,23 @@ Internal use only."
              'frameset--mini
              (cons nil
                    (and mb-frame
-                        (frameset-frame-id mb-frame))))))))))
+                        (frameset-frame-id mb-frame)))))))))
+  ;; Now store text-pixel width and height if it differs from the calculated
+  ;; width and height and the frame is not fullscreen.
+  (dolist (frame frame-list)
+    (unless (frame-parameter frame 'fullscreen)
+      (unless (eq (* (frame-parameter frame 'width)
+                     (frame-char-width frame))
+                  (frame-text-width frame))
+        (set-frame-parameter
+         frame 'frameset--text-pixel-width
+         (frame-text-width frame)))
+      (unless (eq (* (frame-parameter frame 'height)
+                     (frame-char-height frame))
+                  (frame-text-height frame))
+        (set-frame-parameter
+         frame 'frameset--text-pixel-height
+         (frame-text-height frame))))))
 
 ;;;###autoload
 (cl-defun frameset-save (frame-list
@@ -1002,6 +1020,14 @@ Internal use only."
         (display (cdr (assq 'display filtered-cfg))) ;; post-filtering
         alt-cfg frame)
 
+    ;; Use text-pixels for height and width, if available.
+    (let ((text-pixel-width (cdr (assq 'frameset--text-pixel-width 
parameters)))
+          (text-pixel-height (cdr (assq 'frameset--text-pixel-height 
parameters))))
+      (when text-pixel-width
+        (setf (alist-get 'width filtered-cfg) (cons 'text-pixels 
text-pixel-width)))
+      (when text-pixel-height
+        (setf (alist-get 'height filtered-cfg) (cons 'text-pixels 
text-pixel-height))))
+
     (when fullscreen
       ;; Currently Emacs has the limitation that it does not record the size
       ;; and position of a frame before maximizing it, so we cannot save &
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 6ee0d7b..0fd1412 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -527,7 +527,7 @@ each invocation of the saving commands."
   "If non-nil, show the cursor in the Article buffer even when not selected."
   :version "25.1"
   :group 'gnus-article
-  :type 'bool)
+  :type 'boolean)
 
 (defcustom gnus-saved-headers gnus-visible-headers
   "Headers to keep if `gnus-save-all-headers' is nil.
@@ -6711,8 +6711,7 @@ not have a face in `gnus-article-boring-faces'."
          (member keys nosave-but-article)
          (member keys nosave-in-article))
       (let (func)
-       (save-window-excursion
-         (pop-to-buffer gnus-article-current-summary)
+       (with-current-buffer gnus-article-current-summary
          ;; We disable the pick minor mode commands.
          (let (gnus-pick-mode)
            (setq func (key-binding keys t))))
diff --git a/lisp/gnus/gnus-cloud.el b/lisp/gnus/gnus-cloud.el
index f3acd9e..409fc53 100644
--- a/lisp/gnus/gnus-cloud.el
+++ b/lisp/gnus/gnus-cloud.el
@@ -51,6 +51,7 @@
 
 (defcustom gnus-cloud-storage-method (if (featurep 'epg) 'epg 'base64-gzip)
   "Storage method for cloud data, defaults to EPG if that's available."
+  :version "26.1"
   :group 'gnus-cloud
   :type '(radio (const :tag "No encoding" nil)
                 (const :tag "Base64" base64)
@@ -59,6 +60,7 @@
 
 (defcustom gnus-cloud-interactive t
   "Whether Gnus Cloud changes should be confirmed."
+  :version "26.1"
   :group 'gnus-cloud
   :type 'boolean)
 
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 93f03be..ef34c49 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -1097,7 +1097,8 @@ This only works when `display-time' is enabled."
              ;; remember password
              (with-current-buffer buf
                (when (and imap-password
-                          (not (assoc from mail-source-password-cache)))
+                          (not (member (cons from imap-password)
+                                        mail-source-password-cache)))
                  (push (cons from imap-password) mail-source-password-cache)))
              ;; if predicate is nil, use all uids
              (dolist (uid (imap-search (or predicate "1:*") buf))
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 0f99cb6..6053d33 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1427,152 +1427,142 @@ starting with `not' and followed by regexps."
 (defface message-header-to
   '((((class color)
       (background dark))
-     (:foreground "DarkOliveGreen1" :bold t))
+     :foreground "DarkOliveGreen1" :bold t)
     (((class color)
       (background light))
-     (:foreground "MidnightBlue" :bold t))
+     :foreground "MidnightBlue" :bold t)
     (t
-     (:bold t :italic t)))
+     :bold t :italic t))
   "Face used for displaying To headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-to-face 'face-alias 'message-header-to)
-(put 'message-header-to-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-to-face
+  'message-header-to "22.1")
 
 (defface message-header-cc
   '((((class color)
       (background dark))
-     (:foreground "chartreuse1" :bold t))
+     :foreground "chartreuse1" :bold t)
     (((class color)
       (background light))
-     (:foreground "MidnightBlue"))
+     :foreground "MidnightBlue")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying Cc headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-cc-face 'face-alias 'message-header-cc)
-(put 'message-header-cc-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-cc-face
+  'message-header-cc "22.1")
 
 (defface message-header-subject
   '((((class color)
       (background dark))
-     (:foreground "OliveDrab1"))
+     :foreground "OliveDrab1")
     (((class color)
       (background light))
-     (:foreground "navy blue" :bold t))
+     :foreground "navy blue" :bold t)
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying Subject headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-subject-face 'face-alias 'message-header-subject)
-(put 'message-header-subject-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-subject-face
+  'message-header-subject "22.1")
 
 (defface message-header-newsgroups
   '((((class color)
       (background dark))
-     (:foreground "yellow" :bold t :italic t))
+     :foreground "yellow" :bold t :italic t)
     (((class color)
       (background light))
-     (:foreground "blue4" :bold t :italic t))
+     :foreground "blue4" :bold t :italic t)
     (t
-     (:bold t :italic t)))
+     :bold t :italic t))
   "Face used for displaying Newsgroups headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-newsgroups-face 'face-alias 'message-header-newsgroups)
-(put 'message-header-newsgroups-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-newsgroups-face
+  'message-header-newsgroups "22.1")
 
 (defface message-header-other
   '((((class color)
       (background dark))
-     (:foreground "VioletRed1"))
+     :foreground "VioletRed1")
     (((class color)
       (background light))
-     (:foreground "steel blue"))
+     :foreground "steel blue")
     (t
-     (:bold t :italic t)))
+     :bold t :italic t))
   "Face used for displaying other headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-other-face 'face-alias 'message-header-other)
-(put 'message-header-other-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-other-face
+  'message-header-other "22.1")
 
 (defface message-header-name
   '((((class color)
       (background dark))
-     (:foreground "green"))
+     :foreground "green")
     (((class color)
       (background light))
-     (:foreground "cornflower blue"))
+     :foreground "cornflower blue")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying header names."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-name-face 'face-alias 'message-header-name)
-(put 'message-header-name-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-name-face
+  'message-header-name "22.1")
 
 (defface message-header-xheader
   '((((class color)
       (background dark))
-     (:foreground "DeepSkyBlue1"))
+     :foreground "DeepSkyBlue1")
     (((class color)
       (background light))
-     (:foreground "blue"))
+     :foreground "blue")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying X-Header headers."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-header-xheader-face 'face-alias 'message-header-xheader)
-(put 'message-header-xheader-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-header-xheader-face
+  'message-header-xheader "22.1")
 
 (defface message-separator
   '((((class color)
       (background dark))
-     (:foreground "LightSkyBlue1"))
+     :foreground "LightSkyBlue1")
     (((class color)
       (background light))
-     (:foreground "brown"))
+     :foreground "brown")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying the separator."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-separator-face 'face-alias 'message-separator)
-(put 'message-separator-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-separator-face
+  'message-separator "22.1")
 
 (defface message-cited-text
   '((((class color)
       (background dark))
-     (:foreground "LightPink1"))
+     :foreground "LightPink1")
     (((class color)
       (background light))
-     (:foreground "red"))
+     :foreground "red")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying cited text names."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-cited-text-face 'face-alias 'message-cited-text)
-(put 'message-cited-text-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-cited-text-face
+  'message-cited-text "22.1")
 
 (defface message-mml
   '((((class color)
       (background dark))
-     (:foreground "MediumSpringGreen"))
+     :foreground "MediumSpringGreen")
     (((class color)
       (background light))
-     (:foreground "ForestGreen"))
+     :foreground "ForestGreen")
     (t
-     (:bold t)))
+     :bold t))
   "Face used for displaying MML."
   :group 'message-faces)
-;; backward-compatibility alias
-(put 'message-mml-face 'face-alias 'message-mml)
-(put 'message-mml-face 'obsolete-face "22.1")
+(define-obsolete-face-alias 'message-mml-face
+  'message-mml "22.1")
 
 (defun message-font-lock-make-header-matcher (regexp)
   (let ((form
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index cb4c83d..aa7cf43 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -370,8 +370,8 @@ commands in `hfy-etags-cmd-alist'."
         (when (eq (call-process hfy-etags-bin nil t nil "--version") 0)
           (goto-char (point-min))
           (cond
-           ((looking-at-p "exube") "exuberant ctags")
-           ((looking-at-p "GNU E") "emacs etags")))
+           ((search-forward "exube" nil t) "exuberant ctags")
+           ((search-forward "GNU E" nil t) "emacs etags")))
       ;; Return nil if the etags binary isn't executable (Bug#25468).
       (file-error nil))))
 
@@ -426,7 +426,7 @@ Some valid class specification elements are:\n
   (type       lucid)
 Multiple values for a tag may be combined, to indicate that any one or more
 of these values in the specification key constitutes a match, eg:\n
-((class color grayscale) (type tty)) would match any of:\n
+\((class color grayscale) (type tty)) would match any of:\n
   ((class color))
   ((class grayscale))
   ((class color grayscale))
diff --git a/lisp/image-dired.el b/lisp/image-dired.el
index 175d9df..e8046af 100644
--- a/lisp/image-dired.el
+++ b/lisp/image-dired.el
@@ -305,6 +305,7 @@ temporary file name (typically generated by pnqnq)"
 
 (defcustom image-dired-cmd-optipng-program (executable-find "optipng")
   "The file name of the `optipng' program."
+  :version "26.1"
   :type '(choice (const :tag "Not Set" nil) file)
   :group 'image-dired)
 
@@ -312,6 +313,7 @@ temporary file name (typically generated by pnqnq)"
   "Arguments passed to `image-dired-optipng-program'.
 Available format specifiers are described in
 `image-dired-cmd-create-thumbnail-options'."
+  :version "26.1"
   :type '(repeat (string :tag "Argument"))
   :link '(url-link "man:optipng(1)")
   :group 'image-dired)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 857fa80..81c04db 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -2493,7 +2493,17 @@ This function is intended to be added to 
`auto-coding-functions'."
            (let* ((match (match-string 1))
                   (sym (intern (downcase match))))
              (if (coding-system-p sym)
-                 sym
+                  ;; If the encoding tag is UTF-8 and the buffer's
+                  ;; encoding is one of the variants of UTF-8, use the
+                  ;; buffer's encoding.  This allows, e.g., saving an
+                  ;; XML file as UTF-8 with BOM when the tag says UTF-8.
+                  (let ((sym-type (coding-system-type sym))
+                        (bfcs-type
+                         (coding-system-type buffer-file-coding-system)))
+                    (if (and (coding-system-equal 'utf-8 sym-type)
+                             (coding-system-equal 'utf-8 bfcs-type))
+                        buffer-file-coding-system
+                     sym))
                (message "Warning: unknown coding system \"%s\"" match)
                nil))
           ;; Files without an encoding tag should be UTF-8. But users
@@ -2506,7 +2516,8 @@ This function is intended to be added to 
`auto-coding-functions'."
                    (coding-system-base
                     (detect-coding-region (point-min) size t)))))
             ;; Pure ASCII always comes back as undecided.
-            (if (memq detected '(utf-8 undecided))
+            (if (memq detected
+                      '(utf-8 'utf-8-with-signature 'utf-8-hfs undecided))
                 'utf-8
               (warn "File contents detected as %s.
   Consider adding an encoding attribute to the xml declaration,
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 2b38cb5..5c96663 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -2294,8 +2294,8 @@ It must accept a buffer as its only required argument.")
 (define-minor-mode menu-bar-mode
   "Toggle display of a menu bar on each frame (Menu Bar mode).
 With a prefix argument ARG, enable Menu Bar mode if ARG is
-positive, and disable it otherwise.  If called from Lisp, enable
-Menu Bar mode if ARG is omitted or nil.
+positive, and disable it otherwise.  If called from Lisp, also
+enable Menu Bar mode if ARG is omitted or nil.
 
 This command applies to all frames that exist and frames to be
 created in the future."
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 98f7b58..a406b0b 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -217,7 +217,7 @@ For the meaning of the rest of the parameters, see 
`gnutls-boot-parameters'."
 
 TYPE is `gnutls-x509pki' (default) or `gnutls-anon'.  Use nil for the default.
 HOSTNAME is the remote hostname.  It must be a valid string.
-PRIORITY-STRING is as per the GnuTLS docs, default is \"NORMAL\".
+PRIORITY-STRING is as per the GnuTLS docs, default is based on \"NORMAL\".
 TRUSTFILES is a list of CA bundles.  It defaults to `gnutls-trustfiles'.
 CRLFILES is a list of CRL files.
 KEYLIST is an alist of (client key file, client cert file) pairs.
@@ -265,11 +265,11 @@ defaults to GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT."
         (priority-string (or priority-string
                              (cond
                               ((eq type 'gnutls-anon)
-                               "NORMAL:+ANON-DH:!ARCFOUR-128")
+                               "NORMAL:+ANON-DH:!ARCFOUR-128:%DUMBFW")
                               ((eq type 'gnutls-x509pki)
                                (if gnutls-algorithm-priority
                                    (upcase gnutls-algorithm-priority)
-                                 "NORMAL")))))
+                                 "NORMAL:%DUMBFW")))))
         (verify-error (or verify-error
                           ;; this uses the value of `gnutls-verify-error'
                           (cond
diff --git a/lisp/net/mailcap.el b/lisp/net/mailcap.el
index b4b3870..be1a171 100644
--- a/lisp/net/mailcap.el
+++ b/lisp/net/mailcap.el
@@ -99,6 +99,7 @@ When selecting a viewer for a given MIME type, the first 
viewer
 in this list with a matching MIME-TYPE and successful TEST is
 selected.  Only if none matches, the standard `mailcap-mime-data'
 is consulted."
+  :version "26.1"
   :type '(repeat
          (list
           (choice (function :tag "Function or mode")
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index 0b38814..00e81f8 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -64,9 +64,12 @@ considered to be running if the newsticker timer list is not 
empty."
   "Aggregator for RSS and Atom feeds."
   :group 'applications)
 
+;; Hard-coding URLs like this is a recipe for propagating obsolete info.
 (defconst newsticker--raw-url-list-defaults
-  '(("CNET News.com"
-     "http://export.cnet.com/export/feeds/news/rss/1,11176,,00.xml";)
+  '(
+    ;; 2017/12: no response.
+;;;    ("CNET News.com"
+;;;     "http://export.cnet.com/export/feeds/news/rss/1,11176,,00.xml";)
     ("Debian Security Advisories"
     "http://www.debian.org/security/dsa.en.rdf";)
     ("Debian Security Advisories - Long format"
@@ -76,23 +79,24 @@ considered to be running if the newsticker timer list is 
not empty."
     nil
     3600)
     ("LWN (Linux Weekly News)"
-    "http://lwn.net/headlines/rss";)
-    ("NY Times: Technology"
-    "http://partners.userland.com/nytRss/technology.xml";)
-    ("NY Times"
-    "http://partners.userland.com/nytRss/nytHomepage.xml";)
+    "https://lwn.net/headlines/rss";)
+    ;; Not updated since 2010.
+;;;    ("NY Times: Technology"
+;;;    "http://www.nytimes.com/services/xml/rss/userland/Technology.xml";)
+;;;    ("NY Times"
+;;;    "http://www.nytimes.com/services/xml/rss/userland/HomePage.xml";)
     ("Quote of the day"
-    "http://www.quotationspage.com/data/qotd.rss";
+    "http://feeds.feedburner.com/quotationspage/qotd";
     "07:00"
     86400)
     ("The Register"
-    "http://www.theregister.co.uk/tonys/slashdot.rdf";)
+    "https://www.theregister.co.uk/headlines.rss";)
     ("slashdot"
-    "http://slashdot.org/index.rss";
+    "http://rss.slashdot.org/Slashdot/slashdot";
     nil
     3600)                        ;/. will ban you if under 3600 seconds!
     ("Wired News"
-    "http://www.wired.com/news_drop/netcenter/netcenter.rdf";)
+    "https://www.wired.com/feed/rss";)
     ("Heise News (german)"
     "http://www.heise.de/newsticker/heise.rdf";)
     ("Tagesschau (german)"
@@ -158,7 +162,7 @@ value effective."
 
 (defcustom newsticker-url-list-defaults
  '(("Emacs Wiki"
-    "http://www.emacswiki.org/cgi-bin/wiki.pl?action=rss";
+    "https://www.emacswiki.org/emacs?action=rss";
     nil
     3600))
   "A customizable list of news feeds to select from.
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index ad5d869..c505f25 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -149,7 +149,7 @@ cid: URL as the argument.")
   "Alist of tag/function pairs used to alter how shr renders certain tags.
 For instance, eww uses this to alter rendering of title, forms
 and other things:
-((title . eww-tag-title)
+\((title . eww-tag-title)
  (form . eww-tag-form)
  ...)")
 
@@ -591,9 +591,14 @@ size, and full-buffer size."
 (defun shr-string-pixel-width (string)
   (if (not shr-use-fonts)
       (length string)
-    (with-temp-buffer
-      (insert string)
-      (shr-pixel-column))))
+    ;; Save and restore point across with-temp-buffer, since
+    ;; shr-pixel-column uses save-window-excursion, which can reset
+    ;; point to 1.
+    (let ((pt (point)))
+      (with-temp-buffer
+        (insert string)
+        (shr-pixel-column))
+      (goto-char pt))))
 
 (defsubst shr--translate-insertion-chars ()
   ;; Remove soft hyphens.
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index bff1c9e..973d97c 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -87,7 +87,7 @@
 
 ;;; Variables also used at compile time.
 
-(defconst c-version "5.33"
+(defconst c-version "5.33.1"
   "CC Mode version number.")
 
 (defconst c-version-sym (intern c-version))
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index ab0204c..12ec8f7 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -7572,8 +7572,8 @@ comment at the start of cc-engine.el for more info."
 
     ;; Skip leading type modifiers.  If any are found we know it's a
     ;; prefix of a type.
-    (when c-opt-type-modifier-key ; e.g. "const" "volatile", but NOT "typedef"
-      (while (looking-at c-opt-type-modifier-key)
+    (when c-opt-type-modifier-prefix-key ; e.g. "const" "volatile", but NOT 
"typedef"
+      (while (looking-at c-opt-type-modifier-prefix-key)
        (goto-char (match-end 1))
        (c-forward-syntactic-ws)
        (setq res 'prefix)))
@@ -8167,9 +8167,9 @@ comment at the start of cc-engine.el for more info."
   ;; If a declaration is parsed:
   ;;
   ;;   The point is left at the first token after the first complete
-  ;;   declarator, if there is one.  The return value is a list of 4 elements,
+  ;;   declarator, if there is one.  The return value is a list of 5 elements,
   ;;   where the first is the position of the first token in the declarator.
-  ;;   (See below for the other three.)
+  ;;   (See below for the other four.)
   ;;   Some examples:
   ;;
   ;;    void foo (int a, char *b) stuff ...
@@ -8210,7 +8210,9 @@ comment at the start of cc-engine.el for more info."
   ;;
   ;;   The third element of the return value is non-nil when the declaration
   ;;   parsed might be an expression.  The fourth element is the position of
-  ;;   the start of the type identifier.
+  ;;   the start of the type identifier.  The fifth element is t if either
+  ;;   CONTEXT was 'top, or the declaration is detected to be treated as top
+  ;;   level (e.g. with the keyword "extern").
   ;;
   ;; If a cast is parsed:
   ;;
@@ -8308,6 +8310,9 @@ comment at the start of cc-engine.el for more info."
        ;; Set when the symbol before `preceding-token-end' is known to
        ;; terminate the previous construct, or when we're at point-min.
        at-decl-start
+       ;; Set when we have encountered a keyword (e.g. "extern") which
+       ;; causes the following declaration to be treated as though top-level.
+       make-top
        ;; Save `c-record-type-identifiers' and
        ;; `c-record-ref-identifiers' since ranges are recorded
        ;; speculatively and should be thrown away if it turns out
@@ -8339,7 +8344,9 @@ comment at the start of cc-engine.el for more info."
 
          (cond
          ;; Look for a specifier keyword clause.
-          ((or (looking-at c-prefix-spec-kwds-re)
+          ((or (and (looking-at c-make-top-level-key)
+                    (setq make-top t))
+               (looking-at c-prefix-spec-kwds-re)
                (and (c-major-mode-is 'java-mode)
                 (looking-at "@[A-Za-z0-9]+")))
            (save-match-data
@@ -8609,7 +8616,7 @@ comment at the start of cc-engine.el for more info."
                 ;; construct here in C, since we want to recognize this as a
                 ;; typeless function declaration.
                 (not (and (c-major-mode-is 'c-mode)
-                          (eq context 'top)
+                          (or (eq context 'top) make-top)
                           (eq (char-after) ?\)))))
            (if (eq (char-after) ?\))
                (when (> paren-depth 0)
@@ -8657,7 +8664,7 @@ comment at the start of cc-engine.el for more info."
                                           ;; Recognize a top-level typeless
                                           ;; function declaration in C.
                                           (and (c-major-mode-is 'c-mode)
-                                               (eq context 'top)
+                                               (or (eq context 'top) make-top)
                                                (eq (char-after) ?\))))))))
                          (setq pos (c-up-list-forward (point)))
                          (eq (char-before pos) ?\)))
@@ -8914,6 +8921,7 @@ comment at the start of cc-engine.el for more info."
         (when (and got-identifier
                    (looking-at c-after-suffixed-type-decl-key)
                    (or (eq context 'top)
+                       make-top
                        (and (eq context nil)
                             (match-beginning 1)))
                    (if (and got-parens
@@ -9080,7 +9088,7 @@ comment at the start of cc-engine.el for more info."
         ;; CASE 19
         (or (eq context 'decl)
             (and (c-major-mode-is 'c-mode)
-                 (eq context 'top))))))
+                 (or (eq context 'top) make-top))))))
 
     ;; The point is now after the type decl expression.
 
@@ -9185,7 +9193,8 @@ comment at the start of cc-engine.el for more info."
            (and (or at-type-decl at-typedef)
                 (cons at-type-decl at-typedef))
            maybe-expression
-           type-start))
+           type-start
+           (or (eq context 'top) make-top)))
 
      (t
       ;; False alarm.  Restore the recorded ranges.
@@ -10431,7 +10440,7 @@ comment at the start of cc-engine.el for more info."
                c-decl-block-key))
          (braceassignp 'dontknow)
          inexpr-brace-list bufpos macro-start res pos after-type-id-pos
-         in-paren)
+         in-paren parens-before-brace)
 
       (setq res (c-backward-token-2 1 t lim))
       ;; Checks to do only on the first sexp before the brace.
@@ -10449,6 +10458,9 @@ comment at the start of cc-engine.el for more info."
                ((and (looking-at c-symbol-start)
                      (not (looking-at c-keywords-regexp)))
                 (setq after-type-id-pos (point)))
+               ((eq (char-after) ?\()
+                (setq parens-before-brace t)
+                nil)
                (t nil))
               (save-excursion
                 (cond
@@ -10497,6 +10509,14 @@ comment at the start of cc-engine.el for more info."
        ;; Single identifier between '(' and '{'.  We have a bracelist.
        (cons after-type-id-pos 'in-paren))
 
+       ;; Are we at the parens of a C++ lambda expression?
+       ((and parens-before-brace
+            (save-excursion
+              (and
+               (zerop (c-backward-token-2 1 t lim))
+               (c-looking-at-c++-lambda-capture-list))))
+       nil)                         ; a lambda expression isn't a brace list.
+
        (t
        (goto-char pos)
        ;; Checks to do on all sexps before the brace, up to the
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index d352e5b..7b99c2f 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1251,6 +1251,17 @@ casts and declarations are fontified.  Used on level 2 
and higher."
          ;; Got a cached hit in some other type of arglist.
          (type
           (cons 'arglist t))
+         ;; We're at a C++ uniform initialization.
+         ((and (c-major-mode-is 'c++-mode)
+               (eq (char-before match-pos) ?\()
+               (save-excursion
+                 (goto-char match-pos)
+                 (and
+                  (zerop (c-backward-token-2 2))
+                  (looking-at c-identifier-start)
+                  (c-got-face-at (point)
+                                 '(font-lock-variable-name-face)))))
+          (cons 'not-decl nil))
          ((and not-front-decl
           ;; The point is within the range of a previously
           ;; encountered type decl expression, so the arglist
@@ -1589,7 +1600,8 @@ casts and declarations are fontified.  Used on level 2 
and higher."
                    (setq max-type-decl-end (point))))
                (goto-char start-pos)
                (c-font-lock-single-decl limit decl-or-cast match-pos
-                                        context toplev))
+                                        context
+                                        (or toplev (nth 4 decl-or-cast))))
 
               (t t))))
 
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 227b3e1..169b61c 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1925,16 +1925,32 @@ on one of the `*-decl-kwds' lists."
   t (c-make-keywords-re t (c-lang-const c-type-prefix-kwds)))
 (c-lang-defvar c-type-prefix-key (c-lang-const c-type-prefix-key))
 
-(c-lang-defconst c-type-modifier-kwds
-  "Type modifier keywords.  These can occur almost anywhere in types
-but they don't build a type of themselves.  Unlike the keywords on
-`c-primitive-type-kwds', they are fontified with the keyword face and
-not the type face."
+(c-lang-defconst c-type-modifier-prefix-kwds
+  "Type modifier keywords which can appear in front of a type.  These can
+also occur almost anywhere in types but they don't build a type of
+themselves.  Unlike the keywords on `c-primitive-type-kwds', they are
+fontified with the keyword face and not the type face."
   t    nil
   c    '("const" "restrict" "volatile")
-  c++  '("const" "noexcept" "volatile" "throw")
+  c++  '("const" "noexcept" "volatile")
   objc '("const" "volatile"))
 
+(c-lang-defconst c-opt-type-modifier-prefix-key
+  ;; Adorned regexp matching `c-type-modifier-prefix-kwds', or nil in
+  ;; languages without such keywords.
+  t (and (c-lang-const c-type-modifier-prefix-kwds)
+        (c-make-keywords-re t (c-lang-const c-type-modifier-prefix-kwds))))
+(c-lang-defvar c-opt-type-modifier-prefix-key
+              (c-lang-const c-opt-type-modifier-prefix-key))
+
+(c-lang-defconst c-type-modifier-kwds
+  "Type modifier keywords.  These can occur almost anywhere in types except
+at the start, but they don't build a type of themselves.  Unlike the keywords
+on `c-primitive-type-kwds', they are fontified with the keyword face and not
+the type face."
+  t (c-lang-const c-type-modifier-prefix-kwds)
+  c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw")))
+
 (c-lang-defconst c-opt-type-modifier-key
   ;; Adorned regexp matching `c-type-modifier-kwds', or nil in
   ;; languages without such keywords.
@@ -2355,6 +2371,16 @@ construct it's part of continues."
   t    nil
   (c c++ objc) '("extern"))
 
+(c-lang-defconst c-make-top-level-kwds
+  "Keywords which make declarations they introduce be handled as top-level."
+  t    nil
+  (c c++ objc) '("extern"))
+
+(c-lang-defconst c-make-top-level-key
+  ;; A regexp which matches any `c-make-top-level-kwds' keyword.
+  t (c-make-keywords-re t (c-lang-const c-make-top-level-kwds)))
+(c-lang-defvar c-make-top-level-key (c-lang-const c-make-top-level-key))
+
 (c-lang-defconst c-type-list-kwds
   "Keywords that may be followed by a comma separated list of type
 identifiers, where each optionally can be prefixed by keywords.  (Can
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index c421379..f7bfe7c 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -1641,8 +1641,9 @@ In the fontification engine, it is sometimes impossible 
to determine
 whether a construct is a declaration or an expression.  This happens
 particularly in C++, due to ambiguities in the language.  When such a
 construct is like \"foo * bar\" or \"foo &bar\", and this variable is non-nil
-(the default), the construct will be fontified as a declaration if there is
+\(the default), the construct will be fontified as a declaration if there is
 white space either before or after the operator, but not both."
+  :version "26.1"
   :type 'boolean
   :group 'c)
 
@@ -1658,6 +1659,7 @@ identifiers.
 If you change this variable's value, call the function
 `c-make-noise-macro-regexps' to set the necessary internal variables (or do
 this implicitly by reinitializing C/C++/Objc Mode on any buffer)."
+  :version "26.1"
   :type '(repeat :tag "List of names" string)
   :group 'c)
 (put 'c-noise-macro-names 'safe-local-variable #'c-string-list-p)
@@ -1666,7 +1668,8 @@ this implicitly by reinitializing C/C++/Objc Mode on any 
buffer)."
   "A list of names of macros \(or compiler extensions like \"__attribute__\")
 which optionally have arguments in parentheses, and which expand to nothing.
 These are recognized by CC Mode only in declarations."
-  :type '(regexp :tag "List of names (possibly empty)" string)
+  :version "26.1"
+  :type '(repeat :tag "List of names (possibly empty)" string)
   :group 'c)
 (put 'c-noise-macro-with-parens-names 'safe-local-variable #'c-string-list-p)
 
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 4cce47e..c68001d 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1746,13 +1746,7 @@ Returns the compilation buffer created."
       (let ((process-environment
             (append
              compilation-environment
-             (if (if (boundp 'system-uses-terminfo);`If' for compiler warning.
-                     system-uses-terminfo)
-                 (list "TERM=dumb" "TERMCAP="
-                       (format "COLUMNS=%d" (window-width)))
-               (list "TERM=emacs"
-                     (format "TERMCAP=emacs:co#%d:tc=unknown:"
-                             (window-width))))
+              (comint-term-environment)
              (list (format "INSIDE_EMACS=%s,compile" emacs-version))
              (copy-sequence process-environment))))
        (set (make-local-variable 'compilation-arguments)
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 15a3617..f23af82 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -127,6 +127,7 @@ If nil, never start checking buffer automatically like 
this."
 (defcustom flymake-start-on-flymake-mode t
   "Start syntax check when `flymake-mode' is enabled.
 Specifically, start it when the buffer is actually displayed."
+  :version "26.1"
   :type 'boolean)
 
 (define-obsolete-variable-alias 'flymake-start-syntax-check-on-find-file
@@ -141,6 +142,7 @@ Specifically, start it when the buffer is actually 
displayed."
 
 (defcustom flymake-wrap-around t
   "If non-nil, moving to errors wraps around buffer boundaries."
+  :version "26.1"
   :type 'boolean)
 
 (when (fboundp 'define-fringe-bitmap)
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index c2d8022..dac3726 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -162,6 +162,7 @@ Customize or call the function `grep-apply-setting'."
 (defcustom grep-use-null-filename-separator 'auto-detect
   "If non-nil, use `grep's `--null' option.
 This is done to disambiguate file names in `grep's output."
+  :version "26.1"
   :type '(choice (const :tag "Do Not Use `--null'" nil)
                  (const :tag "Use `--null'" t)
                  (other :tag "Not Set" auto-detect))
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 3d3ea07..18101f5 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -477,6 +477,7 @@ This applies to function movement, marking, and so on."
 
 (defcustom js-indent-align-list-continuation t
   "Align continuation of non-empty ([{ lines in `js-mode'."
+  :version "26.1"
   :type 'boolean
   :group 'js)
 
diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el
index f3cb810..fecdb72 100644
--- a/lisp/progmodes/perl-mode.el
+++ b/lisp/progmodes/perl-mode.el
@@ -587,6 +587,7 @@ create a new comment."
 This is a non empty list of strings, the checker tool possibly
 followed by required arguments.  Once launched it will receive
 the Perl source to be checked as its standard input."
+  :version "26.1"
   :group 'perl
   :type '(repeat string))
 
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 9d3e428..2de40c4 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -5165,6 +5165,7 @@ This is a non empty list of strings, the checker tool 
possibly followed by
 required arguments.  Once launched it will receive the Python source to be
 checked as its standard input.
 To use `flake8' you would set this to (\"flake8\" \"-\")."
+  :version "26.1"
   :group 'python-flymake
   :type '(repeat string))
 
@@ -5186,6 +5187,7 @@ MESSAGE'th gives the message text itself.
 If COLUMN or TYPE are nil or that index didn't match, that
 information is not present on the matched line and a default will
 be used."
+  :version "26.1"
   :group 'python-flymake
   :type '(list regexp
                (integer :tag "Line's index")
@@ -5209,6 +5211,7 @@ For example, when using `flake8' a possible configuration 
could be:
    (\"^[EW][0-9]+\" . :note))
 
 By default messages are considered errors."
+  :version "26.1"
   :group 'python-flymake
   :type `(alist :key-type (regexp)
                 :value-type (symbol)))
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index dc1b0f8..1c7df7e 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -2314,12 +2314,14 @@ See `font-lock-syntax-table'.")
 (defcustom ruby-flymake-use-rubocop-if-available t
   "Non-nil to use the Rubocop Flymake backend.
 Only takes effect if Rubocop is installed."
+  :version "26.1"
   :type 'boolean
   :group 'ruby
   :safe 'booleanp)
 
 (defcustom ruby-rubocop-config ".rubocop.yml"
   "Configuration file for `ruby-flymake-rubocop'."
+  :version "26.1"
   :type 'string
   :group 'ruby
   :safe 'stringp)
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 10a1edc..1baac1d 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -764,14 +764,14 @@ mode is experimental."
   :version "24.1"  ; rev670
   :group 'verilog-mode-actions
   :type 'boolean)
-(put 'verilog-auto-declare-nettype 'safe-local-variable `stringp)
+(put 'verilog-auto-declare-nettype 'safe-local-variable 'stringp)
 
 (defcustom verilog-auto-wire-comment t
   "Non-nil indicates to insert to/from comments with `verilog-auto-wire' etc."
   :version "25.1"
   :group 'verilog-mode-actions
   :type 'boolean)
-(put 'verilog-auto-wire-comment 'safe-local-variable `verilog-booleanp)
+(put 'verilog-auto-wire-comment 'safe-local-variable 'verilog-booleanp)
 
 (defcustom verilog-auto-wire-type nil
   "Non-nil specifies the data type to use with `verilog-auto-wire' etc.
@@ -781,8 +781,8 @@ this is generally only appropriate when making a 
non-SystemVerilog wrapper
 containing SystemVerilog cells."
   :version "24.1"  ; rev673
   :group 'verilog-mode-actions
-  :type 'string)
-(put 'verilog-auto-wire-type 'safe-local-variable `stringp)
+  :type '(choice (const nil) string))
+(put 'verilog-auto-wire-type 'safe-local-variable 'stringp)
 
 (defcustom verilog-auto-endcomments t
   "Non-nil means insert a comment /* ... */ after `end's.
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 93ca36b..96c3f6b 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1037,7 +1037,7 @@ This recognizes CSS-color-4 extensions."
 STR is the incoming CSS hex color.
 This function simply drops any transparency."
   ;; Either #RGB or #RRGGBB, drop the "A" or "AA".
-  (if (> (length str) 4)
+  (if (> (length str) 5)
       (substring str 0 7)
     (substring str 0 4)))
 
diff --git a/lisp/textmodes/less-css-mode.el b/lisp/textmodes/less-css-mode.el
index d31414e..c2846ac 100644
--- a/lisp/textmodes/less-css-mode.el
+++ b/lisp/textmodes/less-css-mode.el
@@ -78,6 +78,7 @@
 
 (defgroup less-css nil
   "Less CSS mode."
+  :version "26.1"
   :prefix "less-css-"
   :group 'css)
 
@@ -105,7 +106,7 @@ Use \"-x\" to minify output."
 This path is expanded relative to the directory of the Less file
 using `expand-file-name', so both relative and absolute paths
 will work as expected."
-  :type 'directory)
+  :type '(choice (const :tag "Same as Less file" nil) directory))
 ;;;###autoload
 (put 'less-css-output-directory 'safe-local-variable 'stringp)
 
@@ -115,7 +116,7 @@ This can be also be set to a full path, or a relative path. 
 If
 the path is relative, it will be relative to the value of
 `less-css-output-dir', if set, or the current directory by
 default."
-  :type 'file)
+  :type '(choice (const :tag "Default" nil) file))
 (make-variable-buffer-local 'less-css-output-file-name)
 
 (defcustom less-css-input-file-name nil
@@ -131,7 +132,7 @@ variables.
 This can be also be set to a full path, or a relative path.  If
 the path is relative, it will be relative to the current
 directory by default."
-  :type 'file)
+  :type '(choice (const nil) file))
 ;;;###autoload
 (put 'less-css-input-file-name 'safe-local-variable 'stringp)
 (make-variable-buffer-local 'less-css-input-file-name)
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 5c585ea..432a779 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -266,12 +266,14 @@ measured relative to that of the normal text."
 
 (defcustom tex-chktex-program "chktex"
   "ChkTeX executable to use for linting TeX files."
+  :version "26.1"
   :type 'string
   :link '(url-link "man:chktex(1)")
   :group 'tex-flymake)
 
 (defcustom tex-chktex-extra-flags nil
   "Extra command line flags for `tex-chktex-program'."
+  :version "26.1"
   :type '(repeat string)
   :group 'tex-flymake)
 
@@ -1012,9 +1014,10 @@ Inherits `shell-mode-map' with a few additions.")
 ;; This is a) ugly, and b) cheating, but this was the last
 ;; remaining warning from byte-compiling all of Emacs...
 (eval-when-compile
-  (setq byte-compile-function-environment
-       (delq (assq 'tex-mode byte-compile-function-environment)
-             byte-compile-function-environment)))
+  (if (boundp 'byte-compile-function-environment)
+      (setq byte-compile-function-environment
+            (delq (assq 'tex-mode byte-compile-function-environment)
+                  byte-compile-function-environment))))
 
 ;;;###autoload
 (defun tex-mode ()
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 0d7b15d..f25dfbc 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -350,7 +350,7 @@ If ASK is nil, perform replace without asking user for 
confirmation.
 
 Returns (count . response) cons where count is number of string
 replacements done and response is one of symbols: t (all right), nil
-(quit), force (replace without further questions)."
+\(quit), force (replace without further questions)."
   (save-excursion
     (goto-char beg)
     (let ((regexp tildify-pattern)
diff --git a/lisp/time.el b/lisp/time.el
index 6cd7320..49f345c 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -173,7 +173,9 @@ If the value is t instead of an alist, use the value of
 `legacy-style-world-list' otherwise."
 
   :group 'display-time
-  :type '(repeat (list string string))
+  :type '(choice (const :tag "Default" t)
+                 (repeat :tag "List of zones and labels"
+                         (list (string :tag "Zone") (string :tag "Label"))))
   :version "23.1")
 
 (defun time--display-world-list ()
diff --git a/lisp/vc/cvs-status.el b/lisp/vc/cvs-status.el
index 770791a..3124a61 100644
--- a/lisp/vc/cvs-status.el
+++ b/lisp/vc/cvs-status.el
@@ -33,11 +33,6 @@
 
 ;;;
 
-(defgroup cvs-status nil
-  "Major mode for browsing `cvs status' output."
-  :group 'pcl-cvs
-  :prefix "cvs-status-")
-
 (easy-mmode-defmap cvs-status-mode-map
   '(("n"       . next-line)
     ("p"       . previous-line)
diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el
index df9627a..df33d10 100644
--- a/lisp/vc/diff-mode.el
+++ b/lisp/vc/diff-mode.el
@@ -2005,9 +2005,6 @@ For use in `add-log-current-defun-function'."
     (replace-match (cdr (assq (char-before) '((?+ . "-") (?> . "<"))))))
   )
 
-(declare-function smerge-refine-subst "smerge-mode"
-                  (beg1 end1 beg2 end2 props-c &optional preproc props-r 
props-a))
-
 (defun diff--forward-while-leading-char (char bound)
   "Move point until reaching a line not starting with CHAR.
 Return new point, if it was moved."
@@ -2049,13 +2046,13 @@ Return new point, if it was moved."
                           (diff--forward-while-leading-char ?+ end)
                           (progn (diff--forward-while-leading-char ?\\ end)
                                  (setq end-add (point))))
-                 (smerge-refine-subst beg-del beg-add beg-add end-add
+                 (smerge-refine-regions beg-del beg-add beg-add end-add
                                       nil 'diff-refine-preproc props-r 
props-a)))))
           (`context
            (let* ((middle (save-excursion (re-search-forward "^---")))
                   (other middle))
              (while (re-search-forward "^\\(?:!.*\n\\)+" middle t)
-               (smerge-refine-subst (match-beginning 0) (match-end 0)
+               (smerge-refine-regions (match-beginning 0) (match-end 0)
                                     (save-excursion
                                       (goto-char other)
                                       (re-search-forward "^\\(?:!.*\n\\)+" end)
@@ -2070,7 +2067,7 @@ Return new point, if it was moved."
            (let ((beg1 (1+ (point))))
              (when (re-search-forward "^---.*\n" end t)
                ;; It's a combined add&remove, so there's something to do.
-               (smerge-refine-subst beg1 (match-beginning 0)
+               (smerge-refine-regions beg1 (match-beginning 0)
                                     (match-end 0) end
                                     nil 'diff-refine-preproc props-r 
props-a)))))))))
 
diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el
index 9c25ec4..3f945bb 100644
--- a/lisp/vc/emerge.el
+++ b/lisp/vc/emerge.el
@@ -3171,11 +3171,9 @@ See also `auto-save-file-name-p'."
       (setq limit (1+ (match-end 0)))))
   s)
 
-;; Metacharacters that have to be protected from the shell when executing
-;; a diff/diff3 command.
 (defcustom emerge-metachars nil
-  "Obsolete, emerge now uses `shell-quote-argument'."
-  :type 'regexp
+  "No longer used.  Emerge now uses `shell-quote-argument'."
+  :type '(choice (const nil) regexp)
   :group 'emerge)
 (make-obsolete-variable 'emerge-metachars nil "26.1")
 
diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index b988463..ea1e0c7 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -919,7 +919,7 @@ Its behavior has mainly two restrictions:
   after the newline.
   This only matters if `smerge-refine-ignore-whitespace' is nil.
 - it needs to be unaffected by changes performed by the `preproc' argument
-  to `smerge-refine-subst'.
+  to `smerge-refine-regions'.
   This only matters if `smerge-refine-weight-hack' is nil.")
 
 (defvar smerge-refine-ignore-whitespace t
@@ -1188,15 +1188,15 @@ repeating the command will highlight other two parts."
       (put-text-property (match-beginning 0) (1+ (match-beginning 0))
                          'smerge-refine-part
                          (cons (buffer-chars-modified-tick) part)))
-    (smerge-refine-subst (match-beginning n1) (match-end n1)
+    (smerge-refine-regions (match-beginning n1) (match-end n1)
                          (match-beginning n2)  (match-end n2)
                          (if smerge-use-changed-face
-                            '((smerge . refine) (face . 
smerge-refined-change)))
+                            '((smerge . refine) (font-lock-face . 
smerge-refined-change)))
                         nil
                         (unless smerge-use-changed-face
-                          '((smerge . refine) (face . smerge-refined-removed)))
+                          '((smerge . refine) (font-lock-face . 
smerge-refined-removed)))
                         (unless smerge-use-changed-face
-                          '((smerge . refine) (face . 
smerge-refined-added))))))
+                          '((smerge . refine) (font-lock-face . 
smerge-refined-added))))))
 
 (defun smerge-swap ()
   "Swap the \"Upper\" and the \"Lower\" chunks.
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 9e597a2..7962b70 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -278,7 +278,7 @@ within the repository.
 
 If no list entry produces a useful revision, return `nil'."
   :type '(repeat (choice
-                  (const :tag "Active bookmark" 'bookmark)
+                  (const :tag "Active bookmark" builtin-active-bookmark)
                   (string :tag "Hg template")
                   (function :tag "Custom")))
   :version "26.1"
diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el
index 99c8211..394b86c 100644
--- a/lisp/vc/vc-hooks.el
+++ b/lisp/vc/vc-hooks.el
@@ -34,9 +34,9 @@
 
 ;; Faces
 
-(defgroup vc-state-faces nil
+(defgroup vc-faces nil
   "Faces used in the mode line by the VC state indicator."
-  :group 'vc-faces
+  :group 'vc
   :group 'mode-line
   :version "25.1")
 
diff --git a/src/buffer.c b/src/buffer.c
index 12a467d..75cb470 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -386,9 +386,9 @@ Value is nil if OBJECT is not a buffer or if it has been 
killed.  */)
 }
 
 DEFUN ("buffer-list", Fbuffer_list, Sbuffer_list, 0, 1, 0,
-       doc: /* Return a list of all existing live buffers.
-If the optional arg FRAME is a frame, we return the buffer list in the
-proper order for that frame: the buffers show in FRAME come first,
+       doc: /* Return a list of all live buffers.
+If the optional arg FRAME is a frame, return the buffer list in the
+proper order for that frame: the buffers shown in FRAME come first,
 followed by the rest of the buffers.  */)
   (Lisp_Object frame)
 {
diff --git a/src/data.c b/src/data.c
index 3c91520..b94c899 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1481,7 +1481,7 @@ SYMBOL is the variable being changed.
 NEWVAL is the value it will be changed to.
 OPERATION is a symbol representing the kind of change, one of: `set',
 `let', `unlet', `makunbound', and `defvaralias'.
-WHERE is a buffer if the buffer-local value of the variable being
+WHERE is a buffer if the buffer-local value of the variable is being
 changed, nil otherwise.
 
 All writes to aliases of SYMBOL will call WATCH-FUNCTION too.  */)
diff --git a/src/font.c b/src/font.c
index 441652b..69efd7d 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5055,10 +5055,10 @@ DEFUN ("font-info", Ffont_info, Sfont_info, 1, 2, 0,
        doc: /* Return information about a font named NAME on frame FRAME.
 If FRAME is omitted or nil, use the selected frame.
 
-The returned value is a vector:
+The returned value is a vector of 14 elements:
   [ OPENED-NAME FULL-NAME SIZE HEIGHT BASELINE-OFFSET RELATIVE-COMPOSE
     DEFAULT-ASCENT MAX-WIDTH ASCENT DESCENT SPACE-WIDTH AVERAGE-WIDTH
-    CAPABILITY ]
+    FILENAME CAPABILITY ]
 where
   OPENED-NAME is the name used for opening the font,
   FULL-NAME is the full name of the font,
@@ -5068,12 +5068,12 @@ where
   RELATIVE-COMPOSE and DEFAULT-ASCENT are the numbers controlling
     how to compose characters,
   MAX-WIDTH is the maximum advance width of the font,
-  ASCENT, DESCENT, SPACE-WIDTH, AVERAGE-WIDTH are metrics of the font
-    in pixels,
+  ASCENT, DESCENT, SPACE-WIDTH, and AVERAGE-WIDTH are metrics of
+    the font in pixels,
   FILENAME is the font file name, a string (or nil if the font backend
     doesn't provide a file name).
   CAPABILITY is a list whose first element is a symbol representing the
-    font format, one of x, opentype, truetype, type1, pcf, or bdf.
+    font format, one of `x', `opentype', `truetype', `type1', `pcf', or `bdf'.
     The remaining elements describe the details of the font capabilities,
     as follows:
 
diff --git a/src/frame.c b/src/frame.c
index 94ec9fb..09c0e79 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1608,6 +1608,8 @@ next_frame (Lisp_Object frame, Lisp_Object minibuf)
   Lisp_Object f, tail;
   int passed = 0;
 
+  eassume (CONSP (Vframe_list));
+
   while (passed < 2)
     FOR_EACH_FRAME (tail, f)
       {
@@ -1630,6 +1632,8 @@ prev_frame (Lisp_Object frame, Lisp_Object minibuf)
 {
   Lisp_Object f, tail, prev = Qnil;
 
+  eassume (CONSP (Vframe_list));
+
   FOR_EACH_FRAME (tail, f)
     {
       if (EQ (frame, f) && !NILP (prev))
@@ -1915,6 +1919,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
   if (f == sf)
     {
       Lisp_Object tail;
+      eassume (CONSP (Vframe_list));
 
       /* Look for another visible frame on the same terminal.
         Do not call next_frame here because it may loop forever.
diff --git a/src/frame.h b/src/frame.h
index a3b7763..a5d4e4f 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -1149,8 +1149,7 @@ default_pixels_per_inch_y (void)
 /* FOR_EACH_FRAME (LIST_VAR, FRAME_VAR) followed by a statement is a
    `for' loop which iterates over the elements of Vframe_list.  The
    loop will set FRAME_VAR, a Lisp_Object, to each frame in
-   Vframe_list in succession and execute the statement.  Vframe_list
-   should be nonempty, so the body is executed at least once.  LIST_VAR
+   Vframe_list in succession and execute the statement.  LIST_VAR
    should be a Lisp_Object too; it is used to iterate through the
    Vframe_list.  Note that this macro walks over child frames and
    the tooltip frame as well.
@@ -1160,7 +1159,7 @@ default_pixels_per_inch_y (void)
    something which executes the statement once.  */
 
 #define FOR_EACH_FRAME(list_var, frame_var)    \
-  for ((list_var) = (eassume (CONSP (Vframe_list)), Vframe_list); \
+  for ((list_var) = Vframe_list;               \
        (CONSP (list_var)                       \
        && (frame_var = XCAR (list_var), true)); \
        list_var = XCDR (list_var))
diff --git a/src/xdisp.c b/src/xdisp.c
index 3791d98..efc47b3 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -25087,19 +25087,25 @@ invisible_prop (Lisp_Object propval, Lisp_Object list)
 }
 
 DEFUN ("invisible-p", Finvisible_p, Sinvisible_p, 1, 1, 0,
-       doc: /* Non-nil if the property makes the text invisible.
-POS-OR-PROP can be a marker or number, in which case it is taken to be
-a position in the current buffer and the value of the `invisible' property
-is checked; or it can be some other value, which is then presumed to be the
-value of the `invisible' property of the text of interest.
-The non-nil value returned can be t for truly invisible text or something
-else if the text is replaced by an ellipsis.  */)
-  (Lisp_Object pos_or_prop)
+       doc: /* Non-nil if text properties at POS cause text there to be 
currently invisible.
+POS should be a marker or a buffer position; the value of the `invisible'
+property at that position in the current buffer is examined.
+POS can also be the actual value of the `invisible' text or overlay
+property of the text of interest, in which case the value itself is
+examined.
+
+The non-nil value returned can be t for currently invisible text that is
+entirely hidden on display, or some other non-nil, non-t value if the
+text is replaced by an ellipsis.
+
+Note that whether text with `invisible' property is actually hidden on
+display may depend on `buffer-invisibility-spec', which see.  */)
+  (Lisp_Object pos)
 {
   Lisp_Object prop
-    = (NATNUMP (pos_or_prop) || MARKERP (pos_or_prop)
-       ? Fget_char_property (pos_or_prop, Qinvisible, Qnil)
-       : pos_or_prop);
+    = (NATNUMP (pos) || MARKERP (pos)
+       ? Fget_char_property (pos, Qinvisible, Qnil)
+       : pos);
   int invis = TEXT_PROP_MEANS_INVISIBLE (prop);
   return (invis == 0 ? Qnil
          : invis == 1 ? Qt
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 1bcd3a0..41687e4 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -3671,7 +3671,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
                 (format "%s=%d" envvar port)
                 tramp-remote-process-environment)))
          (should
-          (string-equal
+          (string-match
            (number-to-string port)
            (shell-command-to-string (format "echo -n $%s" envvar))))))
 
diff --git a/test/lisp/textmodes/css-mode-tests.el 
b/test/lisp/textmodes/css-mode-tests.el
index 47cf5f9..1e58751 100644
--- a/test/lisp/textmodes/css-mode-tests.el
+++ b/test/lisp/textmodes/css-mode-tests.el
@@ -295,6 +295,12 @@
         (insert input ")"))
       (should (equal (css--hsl-color) "#ff0000")))))
 
+(ert-deftest css-test-hex-color ()
+  (should (equal (css--hex-color "#abc") "#abc"))
+  (should (equal (css--hex-color "#abcd") "#abc"))
+  (should (equal (css--hex-color "#aabbcc") "#aabbcc"))
+  (should (equal (css--hex-color "#aabbccdd") "#aabbcc")))
+
 (ert-deftest css-test-named-color ()
   (dolist (text '("@mixin black" "@include black"))
     (with-temp-buffer



reply via email to

[Prev in Thread] Current Thread [Next in Thread]