emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] xwidget_mvp 293c6a2: Merge branch 'master' into xwidget_mv


From: Joakim Verona
Subject: [Emacs-diffs] xwidget_mvp 293c6a2: Merge branch 'master' into xwidget_mvp
Date: Tue, 17 Mar 2015 19:37:44 +0000

branch: xwidget_mvp
commit 293c6a2481f5da18a7ba8d0efa573c12ce6a2cbf
Merge: 8169972 7cf5b37
Author: Joakim Verona <address@hidden>
Commit: Joakim Verona <address@hidden>

    Merge branch 'master' into xwidget_mvp
---
 etc/NEWS                       |   12 +++
 lisp/ChangeLog                 |  125 +++++++++++++++++++++++++++++++
 lisp/emacs-lisp/cl-generic.el  |    1 +
 lisp/emacs-lisp/cl-indent.el   |   62 +++++++++++++---
 lisp/emacs-lisp/cl-macs.el     |  162 ++++++++++++++++++++++++++-------------
 lisp/emacs-lisp/edebug.el      |   62 +++------------
 lisp/emacs-lisp/lisp-mode.el   |   36 ++++++++-
 lisp/emulation/viper-init.el   |    2 +-
 lisp/erc/ChangeLog             |   12 +++
 lisp/erc/erc.el                |   99 +++++++++++-------------
 lisp/eshell/esh-mode.el        |    7 ++
 lisp/ido.el                    |    8 +-
 lisp/isearchb.el               |    6 +-
 lisp/misearch.el               |    4 +-
 lisp/mouse.el                  |   13 +++-
 lisp/net/browse-url.el         |   56 ++++++++++++++
 lisp/net/tramp-adb.el          |    3 +
 lisp/net/tramp-gvfs.el         |    2 +
 lisp/net/tramp-sh.el           |   85 +++++++++++++++++++--
 lisp/net/tramp-smb.el          |    6 ++
 lisp/net/tramp.el              |   41 +----------
 lisp/obsolete/iswitchb.el      |    6 +-
 lisp/progmodes/sql.el          |   45 +++++++----
 lisp/replace.el                |    2 +-
 lisp/startup.el                |    7 +-
 lisp/url/ChangeLog             |    6 ++
 lisp/url/url-handlers.el       |   15 +++-
 lisp/w32-vars.el               |   17 +++-
 lisp/widget.el                 |    3 +
 src/ChangeLog                  |   21 +++++
 src/callint.c                  |    4 +-
 src/emacs.c                    |    3 +
 src/minibuf.c                  |   18 +++-
 src/xdisp.c                    |   56 +++++++++-----
 test/ChangeLog                 |   21 ++++-
 test/automated/cl-lib-tests.el |   27 ++++++-
 test/automated/tramp-tests.el  |    9 ++-
 37 files changed, 767 insertions(+), 297 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 75d55de..cabd008 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -556,6 +556,14 @@ to avoid interfering with the kill ring.
 allow overriding the regular expression that recognizes the ldapsearch
 command line's password prompt.
 
+** Eshell
+
+*** The new built-in command `clear' can scroll window contents out of sight.
+
+** Browse-url
+
+*** browse-url now supports the Conkeror Web Browser.
+
 +++
 ** tar-mode: new `tar-new-entry' command, allowing for new members to
 be added to the archive.
@@ -586,6 +594,8 @@ a typographically-correct documents.
 
 * Incompatible Lisp Changes in Emacs 25.1
 
+** read-buffer-function can now be called with a 4th argument (`predicate').
+
 ** completion-table-dynamic stays in the minibuffer.
 If you want the old behavior of calling the function in the buffer
 from which the minibuffer was entered, call it with the new argument
@@ -623,6 +633,8 @@ word syntax, use `\sw' instead.
 
 * Lisp Changes in Emacs 25.1
 
+** `read-buffer' takes a new `predicate' argument.
+
 ** Emacs Lisp now supports generators.
 
 ** New finalizer facility for running code when objects
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d393190..cf4eeae 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,128 @@
+2015-03-17  Michael Albinus  <address@hidden>
+
+       * tramp-sh.el (tramp-maybe-send-script): Avoid leading tabs in
+       shell scripts.  (Bug#20118)
+
+2015-03-17  Eli Zaretskii  <address@hidden>
+
+       * mouse.el (mouse-appearance-menu): If w32-use-w32-font-dialog is
+       nil, construct a menu of fixed fonts.  This resurrects a feature
+       lost in Emacs 23.
+
+       * w32-vars.el (w32-use-w32-font-dialog): Add a ':set' function to
+       reset mouse-appearance-menu-map, so the font dialog is recomputed
+       the next time the menu is requested.
+       (w32-fixed-font-alist): Fix to use correct names of Courier fonts.
+
+2015-03-17  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-macs.el (cl--transform-lambda): Refine last change
+       (bug#20125).
+
+2015-03-17  Michael Albinus  <address@hidden>
+
+       * net/tramp-sh.el (tramp-ssh-controlmaster-options): Change test
+       for ControlPath in order to avoid DNS timeouts.  (Bug#20015)
+
+2015-03-16  Alan Mackenzie  <address@hidden>
+
+       Edebug: Allow "S" to work during trace mode.  Fixes debbugs #20074.
+       Also display the overlay arrow in go and go-nonstop modes.
+
+       * emacs-lisp/edebug.el (edebug--display-1): Move the
+       `input-pending' test to after trace mode's `sit-for'.
+       (edebug--recursive-edit): Insert "(sit-for 0)" after
+       "(edebug-overlay-arrow)".
+
+2015-03-16  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/cl-macs.el (cl--transform-lambda): Rework to avoid
+       cl--do-arglist in more cases; add comments to explain what's going on.
+       (cl--do-&aux): New function extracted from cl--do-arglist.
+       (cl--do-arglist): Use it.
+
+       * emacs-lisp/cl-generic.el: Add Version: header, for ELPA purposes.
+
+       * obsolete/iswitchb.el (iswitchb-read-buffer): Add `predicate' arg.
+       * isearchb.el (isearchb-iswitchb): Adjust accordingly.
+       * ido.el (ido-read-buffer): Add `predicate' argument.
+       * misearch.el (unload-function-defs-list): Declare before use.
+
+2015-03-16  Vibhav Pant  <address@hidden>
+
+       * net/browse-url.el (browse-url-browser-function): Add "Conkeror".
+       (browse-url-conkeror-program, browse-url-conkeror-arguments)
+       (browse-url-conkeror-new-window-is-buffer): New defcustoms.
+       (browse-url-default-browser): Check for `browse-url-conkeror'
+       and call `browse-url-conkeror-program'.
+       (browse-url-conkeror): New command.
+       (bug#19863)
+
+2015-03-16  Vibhav Pant  <address@hidden>
+
+       * eshell/esh-mode.el (eshell/clear): New function.
+
+2015-03-16  Alan Mackenzie  <address@hidden>
+
+       Make Edebug work with Follow Mode.
+
+       * emacs-lisp/edebug.el (edebug--display-1): Remove call to
+       edebug-adjust-window.
+       (edebug--recursive-edit): Don't bind pre/post-command-hooks to nil
+       over the recursive edit.
+       (edebug-adjust-window): Remove.
+
+2015-03-15  Michael Albinus  <address@hidden>
+
+       * net/tramp-adb.el:
+       * net/tramp-gvfs.el:
+       * net/tramp-sh.el:
+       * net/tramp-smb.el: Set tramp-autoload cookie for all defcustoms.
+
+       * net/tramp.el (tramp-ssh-controlmaster-options)
+       (tramp-use-ssh-controlmaster-options): Move them to tramp-sh.el.
+       (tramp-default-method): Do not check for
+       `tramp-ssh-controlmaster-options'.
+
+       * net/tramp-sh.el (tramp-use-ssh-controlmaster-options):
+       New defcustom, moved from tramp.el.
+       (tramp-ssh-controlmaster-options): New defvar, moved from tramp.el
+       but with a nil initial value.
+       (tramp-ssh-controlmaster-options): New defun.
+       (tramp-do-copy-or-rename-file-out-of-band)
+       (tramp-maybe-open-connection): Use it.  (Bug#20015)
+
+2015-03-15  Tassilo Horn  <address@hidden>
+
+       * emacs-lisp/lisp-mode.el (lisp--el-macro-regexp): New defconst.
+       (lisp--el-update-macro-regexp, lisp--el-update-after-load)
+       (lisp--el-match-macro): New functions.
+       (lisp-mode-variables): Update lisp--el-macro-regexp and add
+       lisp--el-update-after-load to after-load-functions.
+
+2015-03-15  Daniel Colascione  <address@hidden>
+
+       * emacs-lisp/cl-indent.el
+       (lisp-indent-backquote-substitution-mode): New user option.
+       (common-lisp-indent-function-1, common-lisp-loop-part-indentation)
+       (common-lisp-indent-function): Support normally indenting
+       backquote substitutions.
+       (extended-loop-p): Rename to `lisp-extended-loop-p'.
+
+2015-03-14  Michael R. Mauger  <address@hidden>
+
+       * progmodes/sql.el: Version 3.5
+       (sql-starts-with-prompt-re, sql-ends-with-prompt-re): Match password 
prompts.
+       (sql-interactive-remove-continuation-prompt): Fixed regression. 
(Bug#6686)
+
+2015-03-14  Daniel Colascione  <address@hidden>
+
+       * widget.el (define-widget): Check that documentation is a string
+       or nil; prevent wailing and gnashing of teeth when users forget to
+       pass a docstring and wonder why their properties don't work.
+
+       * startup.el (command-line): Process "--no-x-resources".
+
 2015-03-13  Kevin Ryde  <address@hidden>
 
        info-look fixes for Texinfo 5
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index a8483ea..41c760e 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -3,6 +3,7 @@
 ;; Copyright (C) 2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
+;; Version: 1.0
 
 ;; This file is part of GNU Emacs.
 
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index 1bcfb6d..5e75406 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -138,6 +138,19 @@ If non-nil, alignment is done with the first parameter
   :type 'boolean
   :group 'lisp-indent)
 
+(defcustom lisp-indent-backquote-substitution-mode t
+  "How to indent substitutions in backquotes.
+If `t', the default, indent substituted forms normally.
+If `nil', do not apply special indentation rule to substituted
+forms.  If `corrected', subtract the `,' or `,@' from the form
+column, indenting as if this character sequence were not present.
+In any case, do not backtrack beyond a backquote substitution.
+
+Until Emacs 25.1, the `nil' behavior was hard-wired."
+  :version "25.1"
+  :type '(choice (const corrected) (const nil) (const t))
+  :group 'lisp-indent)
+
 
 (defvar lisp-indent-defun-method '(4 &lambda &body)
   "Defun-like indentation method.
@@ -145,7 +158,7 @@ This applies when the value of the 
`common-lisp-indent-function' property
 is set to `defun'.")
 
 
-(defun extended-loop-p (loop-start)
+(defun lisp-extended-loop-p (loop-start)
   "True if an extended loop form starts at LOOP-START."
   (condition-case ()
       (save-excursion
@@ -170,11 +183,22 @@ the standard lisp indent package."
   "Compute the indentation of loop form constituents."
   (let* ((loop-indentation (save-excursion
                             (goto-char (elt state 1))
-                            (current-column))))
+                             (current-column))))
+    (when (and (eq lisp-indent-backquote-substitution-mode 'corrected))
+      (save-excursion
+        (goto-char (elt state 1))
+        (incf loop-indentation
+              (cond ((eq (char-before) ?,) -1)
+                    ((and (eq (char-before) ?@)
+                          (progn (backward-char)
+                                 (eq (char-before) ?,)))
+                     -2)
+                    (t 0)))))
+
     (goto-char indent-point)
     (beginning-of-line)
     (list
-     (cond ((not (extended-loop-p (elt state 1)))
+     (cond ((not (lisp-extended-loop-p (elt state 1)))
            (+ loop-indentation lisp-simple-loop-indentation))
           ((looking-at "^\\s-*\\(:?\\sw+\\|;\\)")
            (+ loop-indentation lisp-loop-keyword-indentation))
@@ -264,9 +288,15 @@ at `common-lisp-indent-function' and, if set, use its value
 instead."
   ;; FIXME: why do we need to special-case loop?
   (if (save-excursion (goto-char (elt state 1))
-                     (looking-at (if (derived-mode-p 'emacs-lisp-mode)
-                                      "(\\(cl-\\)?[Ll][Oo][Oo][Pp]"
-                                    "([Ll][Oo][Oo][Pp]")))
+                      (and (looking-at (if (derived-mode-p 'emacs-lisp-mode)
+                                           "(\\(cl-\\)?loop"
+                                         "([Ll][Oo][Oo][Pp]"))
+                           (or lisp-indent-backquote-substitution-mode
+                               (not
+                                (or (and (eq (char-before) ?@)
+                                         (progn (backward-char)
+                                                (eq (char-before) ?,)))
+                                    (eq (char-before) ?,))))))
       (common-lisp-loop-part-indentation indent-point state)
     (common-lisp-indent-function-1 indent-point state)))
 
@@ -373,11 +403,21 @@ instead."
                         (not (eq (char-after (- containing-sexp 2)) ?\#)))
                    ;; No indentation for "'(...)" elements
                    (setq calculated (1+ sexp-column)))
-                  ((or (eq (char-after (1- containing-sexp)) ?\,)
-                       (and (eq (char-after (1- containing-sexp)) ?\@)
-                            (eq (char-after (- containing-sexp 2)) ?\,)))
-                   ;; ",(...)" or ",@(...)"
-                   (setq calculated normal-indent))
+                  ((when
+                       (or (eq (char-after (1- containing-sexp)) ?\,)
+                           (and (eq (char-after (1- containing-sexp)) ?\@)
+                                (eq (char-after (- containing-sexp 2)) ?\,)))
+                     ;; ",(...)" or ",@(...)"
+                     (when (eq lisp-indent-backquote-substitution-mode
+                               'corrected)
+                       (incf sexp-column -1)
+                       (when (eq (char-after (1- containing-sexp)) ?\@)
+                         (incf sexp-column -1)))
+                     (cond (lisp-indent-backquote-substitution-mode
+                            (setf tentative-calculated normal-indent)
+                            (setq depth lisp-indent-maximum-backtracking)
+                            nil)
+                           (t (setq calculated normal-indent)))))
                   ((eq (char-after (1- containing-sexp)) ?\#)
                    ;; "#(...)"
                    (setq calculated (1+ sexp-column)))
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 36f263c..56fbcf0 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -220,7 +220,20 @@ The name is made by appending a number to PREFIX, default 
\"G\"."
 (defconst cl--lambda-list-keywords
   '(&optional &rest &key &allow-other-keys &aux &whole &body &environment))
 
-(defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote)
+;; Internal hacks used in formal arg lists:
+;; - &cl-quote: Added to formal-arglists to mean that any default value
+;;   mentioned in the formal arglist should be considered as implicitly
+;;   quoted rather than evaluated.  This is used in `cl-defsubst' when
+;;   performing compiler-macro-expansion, since at that time the
+;;   arguments hold expressions rather than values.
+;; - &cl-defs (DEF . DEFS): Gives the default value to use for missing
+;;   optional arguments which don't have an explicit default value.
+;;   DEFS is an alist mapping vars to their default default value.
+;;   and DEF is the default default to use for all other vars.
+
+(defvar cl--bind-block) ;Name of surrounding block, only use for `signal' data.
+(defvar cl--bind-defs) ;(DEF . DEFS) giving the "default default" for optargs.
+(defvar cl--bind-enquote)      ;Non-nil if &cl-quote was in the formal arglist!
 (defvar cl--bind-lets) (defvar cl--bind-forms)
 
 (defun cl--transform-lambda (form bind-block)
@@ -229,19 +242,22 @@ BIND-BLOCK is the name of the symbol to which the 
function will be bound,
 and which will be used for the name of the `cl-block' surrounding the
 function's body.
 FORM is of the form (ARGS . BODY)."
-  ;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...)
-  ;; where the --cl-rest-- is clearly undesired.
   (let* ((args (car form)) (body (cdr form)) (orig-args args)
         (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil)
-         (cl--bind-lets nil) (cl--bind-forms nil)
          (parsed-body (macroexp-parse-body body))
         (header (car parsed-body)) (simple-args nil))
     (setq body (cdr parsed-body))
+    ;; "(. X) to (&rest X)" conversion already done in cl--do-arglist, but we
+    ;; do it here as well, so as to be able to see if we can avoid
+    ;; cl--do-arglist.
     (setq args (if (listp args) (cl-copy-list args) (list '&rest args)))
     (let ((p (last args))) (if (cdr p) (setcdr p (list '&rest (cdr p)))))
-    (if (setq cl--bind-defs (cadr (memq '&cl-defs args)))
-       (setq args (delq '&cl-defs (delq cl--bind-defs args))
-             cl--bind-defs (cadr cl--bind-defs)))
+    (let ((cl-defs (memq '&cl-defs args)))
+      (when cl-defs
+        (setq cl--bind-defs (cadr cl-defs))
+       ;; Remove "&cl-defs DEFS" from args.
+        (setcdr cl-defs (cddr cl-defs))
+       (setq args (delq '&cl-defs args))))
     (if (setq cl--bind-enquote (memq '&cl-quote args))
        (setq args (delq '&cl-quote args)))
     (if (memq '&whole args) (error "&whole not currently implemented"))
@@ -249,37 +265,68 @@ FORM is of the form (ARGS . BODY)."
            (v (cadr p)))
       (if p (setq args (nconc (delq (car p) (delq v args))
                               `(&aux (,v macroexpand-all-environment))))))
-    (while (and args (symbolp (car args))
-               (not (memq (car args) '(nil &rest &body &key &aux)))
-               (not (and (eq (car args) '&optional)
-                         (or cl--bind-defs (consp (cadr args))))))
-      (push (pop args) simple-args))
+    ;; Take away all the simple args whose parsing can be handled more
+    ;; efficiently by a plain old `lambda' than the manual parsing generated
+    ;; by `cl--do-arglist'.
+    (let ((optional nil))
+      (while (and args (symbolp (car args))
+                  (not (memq (car args) '(nil &rest &body &key &aux)))
+                  (or (not optional)
+                      ;; Optional args whose default is nil are simple.
+                      (null (nth 1 (assq (car args) (cdr cl--bind-defs)))))
+                  (not (and (eq (car args) '&optional) (setq optional t)
+                            (car cl--bind-defs))))
+        (push (pop args) simple-args))
+      (when optional
+        (if args (push '&optional args))
+        ;; Don't keep a dummy trailing &optional without actual optional args.
+        (if (eq '&optional (car simple-args)) (pop simple-args))))
     (or (eq cl--bind-block 'cl-none)
        (setq body (list `(cl-block ,cl--bind-block ,@body))))
-    (if (null args)
-       (cl-list* nil (nreverse simple-args) (nconc header body))
-      (if (memq '&optional simple-args) (push '&optional args))
-      (cl--do-arglist args nil (- (length simple-args)
-                                  (if (memq '&optional simple-args) 1 0)))
-      (setq cl--bind-lets (nreverse cl--bind-lets))
-      (cl-list* nil
-            (nconc (nreverse simple-args)
-                   (list '&rest (car (pop cl--bind-lets))))
-            (nconc (save-match-data ;; Macro expansion can take place in the
-                      ;; middle of apparently harmless computation, so it
-                      ;; should not touch the match-data.
-                      (require 'help-fns)
-                      (cons (help-add-fundoc-usage
-                             (if (stringp (car header)) (pop header))
-                             ;; Be careful with make-symbol and (back)quote,
-                             ;; see bug#12884.
-                             (let ((print-gensym nil) (print-quoted t))
-                               (format "%S" (cons 'fn (cl--make-usage-args
-                                                       orig-args)))))
-                            header))
-                   (list `(let* ,cl--bind-lets
-                             ,@(nreverse cl--bind-forms)
-                             ,@body)))))))
+    (let* ((cl--bind-lets nil) (cl--bind-forms nil)
+           (rest-args
+            (cond
+             ((null args) nil)
+             ((eq (car args) '&aux)
+              (cl--do-&aux args)
+              (setq cl--bind-lets (nreverse cl--bind-lets))
+              nil)
+             (t ;; `simple-args' doesn't handle all the parsing that we need,
+              ;; so we pass the rest to cl--do-arglist which will do
+              ;; "manual" parsing.
+              (let ((slen (length simple-args)))
+                (when (memq '&optional simple-args)
+                  (cl-decf slen))
+                (setq header
+                      ;; Macro expansion can take place in the middle of
+                      ;; apparently harmless computation, so it should not
+                      ;; touch the match-data.
+                      (save-match-data
+                        (require 'help-fns)
+                        (cons (help-add-fundoc-usage
+                               (if (stringp (car header)) (pop header))
+                               ;; Be careful with make-symbol and (back)quote,
+                               ;; see bug#12884.
+                               (let ((print-gensym nil) (print-quoted t))
+                                 (format "%S" (cons 'fn (cl--make-usage-args
+                                                         orig-args)))))
+                              header)))
+                ;; FIXME: we'd want to choose an arg name for the &rest param
+                ;; and pass that as `expr' to cl--do-arglist, but that ends up
+                ;; generating code with a redundant let-binding, so we instead
+                ;; pass a dummy and then look in cl--bind-lets to find what var
+                ;; this was bound to.
+                (cl--do-arglist args :dummy slen)
+                (setq cl--bind-lets (nreverse cl--bind-lets))
+                ;; (cl-assert (eq :dummy (nth 1 (car cl--bind-lets))))
+                (list '&rest (car (pop cl--bind-lets))))))))
+      `(nil
+        (,@(nreverse simple-args) ,@rest-args)
+        ,@header
+        ,(macroexp-let* cl--bind-lets
+                        (macroexp-progn
+                         `(,@(nreverse cl--bind-forms)
+                           ,@body)))))))
 
 ;;;###autoload
 (defmacro cl-defun (name args &rest body)
@@ -422,8 +469,7 @@ its argument list allows full Common Lisp conventions."
               (setcdr last nil)
               (nconc (cl--make-usage-args arglist) (cl--make-usage-var tail)))
           (setcdr last tail)))
-    ;; `orig-args' can contain &cl-defs (an internal
-    ;; CL thingy I don't understand), so remove it.
+    ;; `orig-args' can contain &cl-defs.
     (let ((x (memq '&cl-defs arglist)))
       (when x (setq arglist (delq (car x) (remq (cadr x) arglist)))))
     (let ((state nil))
@@ -450,6 +496,17 @@ its argument list allows full Common Lisp conventions."
                    ))))
               arglist))))
 
+(defun cl--do-&aux (args)
+  (while (and (eq (car args) '&aux) (pop args))
+    (while (and args (not (memq (car args) cl--lambda-list-keywords)))
+      (if (consp (car args))
+          (if (and cl--bind-enquote (cl-cadar args))
+              (cl--do-arglist (caar args)
+                              `',(cadr (pop args)))
+            (cl--do-arglist (caar args) (cadr (pop args))))
+        (cl--do-arglist (pop args) nil))))
+  (if args (error "Malformed argument list ends with: %S" args)))
+
 (defun cl--do-arglist (args expr &optional num)   ; uses cl--bind-*
   (if (nlistp args)
       (if (or (memq args cl--lambda-list-keywords) (not (symbolp args)))
@@ -459,8 +516,7 @@ its argument list allows full Common Lisp conventions."
     (let ((p (last args))) (if (cdr p) (setcdr p (list '&rest (cdr p)))))
     (let ((p (memq '&body args))) (if p (setcar p '&rest)))
     (if (memq '&environment args) (error "&environment used incorrectly"))
-    (let ((save-args args)
-         (restarg (memq '&rest args))
+    (let ((restarg (memq '&rest args))
          (safety (if (cl--compiling-file) cl--optimize-safety 3))
          (keys nil)
          (laterarg nil) (exactarg nil) minarg)
@@ -530,7 +586,12 @@ its argument list allows full Common Lisp conventions."
                              (intern (format ":%s" name)))))
                   (varg (if (consp (car arg)) (cl-cadar arg) (car arg)))
                   (def (if (cdr arg) (cadr arg)
-                         (or (car cl--bind-defs) (cadr (assq varg 
cl--bind-defs)))))
+                          ;; The ordering between those two or clauses is
+                          ;; irrelevant, since in practice only one of the two
+                          ;; is ever non-nil (the car is only used for
+                          ;; cl-deftype which doesn't use the cdr).
+                         (or (car cl--bind-defs)
+                              (cadr (assq varg cl--bind-defs)))))
                    (look `(plist-member ,restarg ',karg)))
              (and def cl--bind-enquote (setq def `',def))
              (if (cddr arg)
@@ -567,15 +628,8 @@ its argument list allows full Common Lisp conventions."
                                        keys)
                               (car ,var)))))))
            (push `(let ((,var ,restarg)) ,check) cl--bind-forms)))
-      (while (and (eq (car args) '&aux) (pop args))
-       (while (and args (not (memq (car args) cl--lambda-list-keywords)))
-         (if (consp (car args))
-             (if (and cl--bind-enquote (cl-cadar args))
-                 (cl--do-arglist (caar args)
-                                `',(cadr (pop args)))
-               (cl--do-arglist (caar args) (cadr (pop args))))
-           (cl--do-arglist (pop args) nil))))
-      (if args (error "Malformed argument list %s" save-args)))))
+      (cl--do-&aux args)
+      nil)))
 
 (defun cl--arglist-args (args)
   (if (nlistp args) (list args)
@@ -2608,7 +2662,7 @@ non-nil value, that slot cannot be set via `setf'.
             (make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d)))
                            slots defaults)))
        (push `(cl-defsubst ,name
-                   (&cl-defs '(nil ,@descs) ,@args)
+                   (&cl-defs (nil ,@descs) ,@args)
                  ,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
                        '((declare (side-effect-free t))))
                  (,(or type #'vector) ,@make))
@@ -2716,8 +2770,8 @@ Of course, we really can't know that for sure, so it's 
just a heuristic."
             (t
              (inline-quote (or (cl-typep ,val ',head)
                             (cl-typep ,val ',rest)))))))))
-      (`(member . ,args)
-       (inline-quote (and (memql ,val ',args) t)))
+      (`(eql ,v)          (inline-quote (and (eql ,val ',v) t)))
+      (`(member . ,args)  (inline-quote (and (memql ,val ',args) t)))
       (`(satisfies ,pred) (inline-quote (funcall #',pred ,val)))
       ((and (pred symbolp) type (guard (get type 'cl-deftype-handler)))
        (inline-quote
@@ -2977,7 +3031,7 @@ The type name can then be used in `cl-typecase', 
`cl-check-type', etc."
   (declare (debug cl-defmacro) (doc-string 3) (indent 2))
   `(cl-eval-when (compile load eval)
      (put ',name 'cl-deftype-handler
-          (cl-function (lambda (&cl-defs '('*) ,@arglist) ,@body)))))
+          (cl-function (lambda (&cl-defs ('*) ,@arglist) ,@body)))))
 
 (cl-deftype extended-char () `(and character (not base-char)))
 
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 1091877..aa7cdf9 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -2446,18 +2446,6 @@ MSG is printed after `::::} '."
                               edebug-function)
                 ))
 
-         (setcdr edebug-window-data
-                 (edebug-adjust-window (cdr edebug-window-data)))
-
-         ;; Test if there is input, not including keyboard macros.
-         (if (input-pending-p)
-             (progn
-               (setq edebug-execution-mode 'step
-                     edebug-stop t)
-               (edebug-stop)
-               ;;          (discard-input)             ; is this unfriendly??
-               ))
-
           ;; Make sure we bind those in the right buffer (bug#16410).
           (let ((overlay-arrow-position overlay-arrow-position)
                 (overlay-arrow-string overlay-arrow-string))
@@ -2510,14 +2498,18 @@ MSG is printed after `::::} '."
              ((eq edebug-execution-mode 'Trace-fast)
               (sit-for 0)))            ; Force update and continue.
 
+            (when (input-pending-p)
+             (setq edebug-stop t)
+             (setq edebug-execution-mode 'step) ; for `edebug-overlay-arrow'
+             (edebug-stop))
+
+           (edebug-overlay-arrow)
+
             (unwind-protect
                 (if (or edebug-stop
                         (memq edebug-execution-mode '(step next))
                         (eq arg-mode 'error))
-                    (progn
-                      ;; (setq edebug-execution-mode 'step)
-                      ;; (edebug-overlay-arrow)        ; This doesn't always 
show up.
-                      (edebug--recursive-edit arg-mode))) ; <--- Recursive edit
+                   (edebug--recursive-edit arg-mode)) ; <--- Recursive edit
 
               ;; Reset the edebug-window-data to whatever it is now.
               (let ((window (if (eq (window-buffer) edebug-buffer)
@@ -2677,12 +2669,6 @@ MSG is printed after `::::} '."
              (defining-kbd-macro
                (if edebug-continue-kbd-macro defining-kbd-macro))
 
-             ;; Disable command hooks.  This is essential when
-             ;; a hook function is instrumented - to avoid infinite loop.
-             ;; This may be more than we need, however.
-             (pre-command-hook nil)
-             (post-command-hook nil)
-
              ;; others??
              )
 
@@ -2711,8 +2697,9 @@ MSG is printed after `::::} '."
            (if (buffer-name edebug-buffer) ; if it still exists
                (progn
                  (set-buffer edebug-buffer)
-                 (if (memq edebug-execution-mode '(go Go-nonstop))
-                     (edebug-overlay-arrow))
+                 (when (memq edebug-execution-mode '(go Go-nonstop))
+                   (edebug-overlay-arrow)
+                   (sit-for 0))
                   (edebug-mode -1))
              ;; gotta have a buffer to let its buffer local variables be set
              (get-buffer-create " bogus edebug buffer"))
@@ -2722,31 +2709,6 @@ MSG is printed after `::::} '."
 
 ;;; Display related functions
 
-(defun edebug-adjust-window (old-start)
-  ;; If pos is not visible, adjust current window to fit following context.
-  ;; (message "window: %s old-start: %s window-start: %s pos: %s"
-  ;;          (selected-window) old-start (window-start) (point)) (sit-for 5)
-  (if (not (pos-visible-in-window-p))
-      (progn
-       ;; First try old-start
-       (if old-start
-           (set-window-start (selected-window) old-start))
-       (if (not (pos-visible-in-window-p))
-           (progn
-       ;; (message "resetting window start") (sit-for 2)
-       (set-window-start
-        (selected-window)
-        (save-excursion
-          (forward-line
-           (if (< (point) (window-start)) -1   ; one line before if in back
-             (- (/ (window-height) 2)) ; center the line moving forward
-             ))
-          (beginning-of-line)
-          (point)))))))
-  (window-start))
-
-
-
 (defconst edebug-arrow-alist
   '((Continue-fast . "=")
     (Trace-fast . "-")
@@ -2755,7 +2717,7 @@ MSG is printed after `::::} '."
     (step . "=>")
     (next . "=>")
     (go . "<>")
-    (Go-nonstop . "..")  ; not used
+    (Go-nonstop . "..")
     )
   "Association list of arrows for each edebug mode.")
 
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 5d91209..b4f87fd 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -181,6 +181,33 @@
             nil)))
     res))
 
+(defconst lisp--el-macro-regexp nil
+  "A regular expression matching all loaded elisp macros.
+Can be updated using `lisp--el-update-macro-regexp' after new
+macros were defined.")
+
+(defun lisp--el-update-macro-regexp ()
+  "Update `lisp--el-update-macro-regexp' from `obarray'.
+Return non-nil only if the old and new value are different."
+  (let ((old-regex lisp--el-macro-regexp)
+       (elisp-macros nil))
+    (mapatoms (lambda (a)
+               (when (or (macrop a) (special-form-p a))
+                 (push (symbol-name a) elisp-macros))))
+    (setq lisp--el-macro-regexp
+         (concat "(" (regexp-opt elisp-macros t) "\\_>"))
+    (not (string= old-regex lisp--el-macro-regexp))))
+
+(defun lisp--el-update-after-load (_file)
+  "Update `lisp--el-macro-regexp' and adjust font-lock in existing buffers."
+  (when (lisp--el-update-macro-regexp)
+    (dolist (buf (buffer-list))
+      (when (derived-mode-p 'emacs-lisp-mode)
+       (font-lock-flush)))))
+
+(defun lisp--el-match-macro (limit)
+  (re-search-forward lisp--el-macro-regexp limit t))
+
 (pcase-let
     ((`(,vdefs ,tdefs
         ,el-defs-re ,cl-defs-re
@@ -194,7 +221,9 @@
                          "when" "unless" "with-output-to-string"
                          "ignore-errors" "dotimes" "dolist" "declare"))
               (lisp-errs '("warn" "error" "signal"))
-              ;; Elisp constructs.  FIXME: update dynamically from obarray.
+              ;; Elisp constructs.  Now they are update dynamically
+              ;; from obarray but they are also used for setting up
+              ;; the keywords for Common Lisp.
               (el-fdefs '("define-advice" "defadvice" "defalias"
                           "define-derived-mode" "define-minor-mode"
                           "define-generic-mode" "define-global-minor-mode"
@@ -333,7 +362,7 @@
      `( ;; Regexp negated char group.
        ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)
        ;; Control structures.  Common Lisp forms.
-       (,(concat "(" el-kws-re "\\_>") . 1)
+       (lisp--el-match-macro . 1)
        ;; Exit/Feature symbols as constants.
        (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\_>"
                  "[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?")
@@ -514,6 +543,9 @@ font-lock keywords will not be case sensitive."
           . lisp-font-lock-syntactic-face-function)))
   (setq-local prettify-symbols-alist lisp--prettify-symbols-alist)
   (when elisp
+    (unless lisp--el-macro-regexp
+      (lisp--el-update-macro-regexp))
+    (add-hook 'after-load-functions #'lisp--el-update-after-load)
     (setq-local electric-pair-text-pairs
                 (cons '(?\` . ?\') electric-pair-text-pairs)))
   (setq-local electric-pair-skip-whitespace 'chomp)
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index 75932a8..e575eee 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -463,7 +463,7 @@ color displays.  By default, the delimiters are used only 
on TTYs."
   :type 'boolean
   :group 'viper)
 
-(defcustom viper-read-buffer-function 'read-buffer
+(defcustom viper-read-buffer-function #'read-buffer
   "Function to use for prompting the user for a buffer name."
   :type 'symbol
   :group 'viper)
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 4f5fced..e75b8cc 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,15 @@
+2015-03-16  Stefan Monnier  <address@hidden>
+
+       * erc.el (erc-switch-to-buffer): Rename from erc-iswitchb and rewrite
+       using read-buffer (bug#20116).
+       (erc--buffer-p): New function, extracted from erc-buffer-filter.
+       (erc-buffer-filter): Use it.
+       (erc-with-all-buffers-of-server): Silence compile warning if the return
+       value is unused.
+       (erc-is-valid-nick-p, erc-common-server-suffixes, erc-get-arglist)
+       (erc-command-name, erc-popup-input-buffer): Use \` and \' to match
+       beg/end of string.
+
 2015-03-03  Kelvin White  <address@hidden>
 
        * erc.el: Add old version string back to file header for
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index a84f9f0..7e76a6d 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -1110,7 +1110,7 @@ which the local user typed."
     (define-key map "\C-a" 'erc-bol)
     (define-key map [home] 'erc-bol)
     (define-key map "\C-c\C-a" 'erc-bol)
-    (define-key map "\C-c\C-b" 'erc-iswitchb)
+    (define-key map "\C-c\C-b" 'erc-switch-to-buffer)
     (define-key map "\C-c\C-c" 'erc-toggle-interpret-controls)
     (define-key map "\C-c\C-d" 'erc-input-action)
     (define-key map "\C-c\C-e" 'erc-toggle-ctcp-autoresponse)
@@ -1647,6 +1647,14 @@ If PROC is not supplied, all processes are searched."
                 (throw 'buffer (current-buffer)))))
        proc))))
 
+(defun erc--buffer-p (buf predicate proc)
+  (with-current-buffer buf
+    (and (derived-mode-p 'erc-mode)
+        (or (not proc)
+            (eq proc erc-server-process))
+        (funcall predicate)
+        buf)))
+
 (defun erc-buffer-filter (predicate &optional proc)
   "Return a list of `erc-mode' buffers matching certain criteria.
 PREDICATE is a function executed with each buffer, if it returns t, that buffer
@@ -1659,12 +1667,7 @@ server connection, or nil which means all open 
connections."
      nil
      (mapcar (lambda (buf)
                (when (buffer-live-p buf)
-                 (with-current-buffer buf
-                   (and (eq major-mode 'erc-mode)
-                        (or (not proc)
-                            (eq proc erc-server-process))
-                        (funcall predicate)
-                        buf))))
+                (erc--buffer-p buf predicate proc)))
              (buffer-list)))))
 
 (defun erc-buffer-list (&optional predicate proc)
@@ -1695,42 +1698,32 @@ nil."
                                           ,pro))))
        ;; Silence the byte-compiler by binding the result of mapcar to
        ;; a variable.
+       (ignore res)
        res)))
 
-;; (iswitchb-mode) will autoload iswitchb.el
-(defvar iswitchb-temp-buflist)
-(declare-function iswitchb-read-buffer "iswitchb"
-                  (prompt &optional default require-match start matches-set))
-(defvar iswitchb-make-buflist-hook)
-
-(defun erc-iswitchb (&optional arg)
-  "Use `iswitchb-read-buffer' to prompt for a ERC buffer to switch to.
+(define-obsolete-function-alias 'erc-iswitchb 'erc-switch-to-buffer "25.1")
+(defun erc-switch-to-buffer (&optional arg)
+  "Prompt for a ERC buffer to switch to.
 When invoked with prefix argument, use all erc buffers.  Without prefix
 ARG, allow only buffers related to same session server.
 If `erc-track-mode' is in enabled, put the last element of
-`erc-modified-channels-alist' in front of the buffer list.
-
-Due to some yet unresolved reason, global function `iswitchb-mode'
-needs to be active for this function to work."
+`erc-modified-channels-alist' in front of the buffer list."
   (interactive "P")
-  (let ((enabled (bound-and-true-p iswitchb-mode)))
-    (or enabled (iswitchb-mode 1))
-    (unwind-protect
-        (let ((iswitchb-make-buflist-hook
-               (lambda ()
-                 (setq iswitchb-temp-buflist
-                       (mapcar 'buffer-name
-                               (erc-buffer-list
-                                nil
-                                (when arg erc-server-process)))))))
-          (switch-to-buffer
-           (iswitchb-read-buffer
-            "Switch-to: "
-            (if (boundp 'erc-modified-channels-alist)
-                (buffer-name (caar (last erc-modified-channels-alist)))
-              nil)
-            t)))
-      (or enabled (iswitchb-mode -1)))))
+  (switch-to-buffer
+   (read-buffer "Switch to ERC buffer: "
+               (when (boundp 'erc-modified-channels-alist)
+                 (buffer-name (caar (last erc-modified-channels-alist))))
+               t
+               ;; Only allow ERC buffers in the same session.
+               (let ((proc (unless arg erc-server-process)))
+                 (lambda (bufname)
+                   (let ((buf (get-buffer bufname)))
+                     (when buf
+                       (erc--buffer-p buf (lambda () t) proc)
+                       (with-current-buffer buf
+                         (and (derived-mode-p 'erc-mode)
+                              (or (null proc)
+                                  (eq proc erc-server-process)))))))))))
 
 (defun erc-channel-list (proc)
   "Return a list of channel buffers.
@@ -2189,7 +2182,7 @@ be invoked for the values of the other parameters."
 Arguments are the same as for `erc'."
   (interactive (erc-select-read-args))
   (let ((erc-server-connect-function 'erc-open-tls-stream))
-    (apply 'erc r)))
+    (apply #'erc r)))
 
 (defun erc-open-tls-stream (name buffer host port)
   "Open an TLS stream to an IRC server.
@@ -2403,7 +2396,7 @@ If STRING is nil, the function does nothing."
 
 (defun erc-is-valid-nick-p (nick)
   "Check if NICK is a valid IRC nickname."
-  (string-match (concat "^" erc-valid-nick-regexp "$") nick))
+  (string-match (concat "\\`" erc-valid-nick-regexp "\\'") nick))
 
 (defun erc-display-line (string &optional buffer)
   "Display STRING in the ERC BUFFER.
@@ -2602,9 +2595,9 @@ server within `erc-lurker-threshold-time'.  See also
            erc-lurker-threshold-time))))
 
 (defcustom erc-common-server-suffixes
-  '(("openprojects.net$" . "OPN")
-    ("freenode.net$" . "freenode")
-    ("oftc.net$" . "OFTC"))
+  '(("openprojects.net\\'" . "OPN")
+    ("freenode.net\\'" . "freenode")
+    ("oftc.net\\'" . "OFTC"))
   "Alist of common server name suffixes.
 This variable is used in mode-line display to save screen
 real estate.  Set it to nil if you want to avoid changing
@@ -2640,7 +2633,7 @@ ARGS, PARSED, and TYPE are used to format MSG sensibly.
 
 See also `erc-format-message' and `erc-display-line'."
   (let ((string (if (symbolp msg)
-                    (apply 'erc-format-message msg args)
+                    (apply #'erc-format-message msg args)
                   msg)))
     (setq string
           (cond
@@ -2689,7 +2682,7 @@ See also `erc-server-send'."
 (defun erc-get-arglist (fun)
   "Return the argument list of a function without the parens."
   (let ((arglist (format "%S" (erc-function-arglist fun))))
-    (if (string-match "^(\\(.*\\))$" arglist)
+    (if (string-match "\\`(\\(.*\\))\\'" arglist)
         (match-string 1 arglist)
       arglist)))
 
@@ -2705,7 +2698,7 @@ is not alive, nil otherwise."
   "For CMD being the function name of a ERC command, something like
 erc-cmd-FOO, this returns a string /FOO."
   (let ((command-name (symbol-name cmd)))
-    (if (string-match "^erc-cmd-\\(.*\\)$" command-name)
+    (if (string-match "\\`erc-cmd-\\(.*\\)\\'" command-name)
         (concat "/" (match-string 1 command-name))
       command-name)))
 
@@ -2796,7 +2789,7 @@ VALUE is computed by evaluating the rest of LINE in Lisp."
     (erc-display-line
      (concat "Available user variables:\n"
              (apply
-              'concat
+              #'concat
               (mapcar
                (lambda (var)
                  (let ((val (symbol-value var)))
@@ -3775,7 +3768,7 @@ Unban all currently banned users in the current channel."
                t)))
           (erc-server-send (format "MODE %s b" chnl)))))
 
-     (t (let ((bans (mapcar 'cdr erc-channel-banlist)))
+     (t (let ((bans (mapcar #'cdr erc-channel-banlist)))
           (when bans
             ;; Glob the bans into groups of three, and carry out the unban.
             ;; eg. /mode #foo -bbb address@hidden address@hidden address@hidden
@@ -3930,7 +3923,7 @@ If `point' is at the beginning of a channel name, use 
that as default."
      (concat "Set topic of " (erc-default-target) ": ")
      (when erc-channel-topic
        (let ((ss (split-string erc-channel-topic "\C-o")))
-         (cons (apply 'concat (if (cdr ss) (butlast ss) ss))
+         (cons (apply #'concat (if (cdr ss) (butlast ss) ss))
                0))))))
   (let ((topic-list (split-string topic "\C-o"))) ; strip off the topic setter
     (erc-cmd-TOPIC (concat (erc-default-target) " " (car topic-list)))))
@@ -5052,7 +5045,7 @@ arg-modes is a list of triples of the form:
 
   (MODE-CHAR ON/OFF ARGUMENT)."
   (if (string-match "^\\s-*\\(\\S-+\\)\\(\\s-.*$\\|$\\)" mode-string)
-      (let ((chars (mapcar 'char-to-string (match-string 1 mode-string)))
+      (let ((chars (mapcar #'char-to-string (match-string 1 mode-string)))
             ;; arguments in channel modes
             (args-str (match-string 2 mode-string))
             (args nil)
@@ -5998,7 +5991,7 @@ Returns a list of the form (HIGH LOW), compatible with 
Emacs time format."
                             (if (> minutes 0)
                                 `("%d minutes, %d seconds" ,minutes ,seconds)
                               `("%d seconds" ,seconds))))
-          output        (apply 'format format-args))
+          output        (apply #'format format-args))
     ;; Change all "1 units" to "1 unit".
     (while (string-match "\\([^0-9]\\|^\\)1 \\S-+\\(s\\)" output)
       (setq output (erc-replace-match-subexpression-in-string
@@ -6246,7 +6239,7 @@ if `erc-away' is non-nil."
 
 (defun erc-format-channel-modes ()
   "Return the current channel's modes."
-  (concat (apply 'concat
+  (concat (apply #'concat
                  "+" erc-channel-modes)
           (cond ((and erc-channel-user-limit erc-channel-key)
                  (if erc-show-channel-key-p
@@ -6438,7 +6431,7 @@ All windows are opened in the current frame."
                 "Mode: "
                 (mapcar (lambda (e)
                           (list (symbol-name e)))
-                        (apropos-internal "-mode$" 'commandp))
+                        (apropos-internal "-mode\\'" 'commandp))
                 nil t))))
     (pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
     (funcall mode)
@@ -6634,7 +6627,7 @@ See also `format-spec'."
       (error "No format spec for message %s" msg))
     (when (functionp entry)
       (setq entry (apply entry args)))
-    (format-spec entry (apply 'format-spec-make args))))
+    (format-spec entry (apply #'format-spec-make args))))
 
 ;;; Various hook functions
 
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index da83ec6..15120cb 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -871,6 +871,13 @@ When run interactively, widen the buffer first."
   (goto-char (point-max))
   (recenter -1))
 
+(defun eshell/clear ()
+  "Scroll contents of eshell window out of sight, leaving a blank window."
+  (interactive)
+  (let ((number-newlines (count-lines (window-start) (point))))
+    (insert (make-string number-newlines ?\n)))
+    (eshell-send-input))
+
 (defun eshell-get-old-input (&optional use-current-region)
   "Return the command input on the current line."
   (if use-current-region
diff --git a/lisp/ido.el b/lisp/ido.el
index 563f406..60a59d6 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -1590,10 +1590,10 @@ enable the mode if ARG is omitted or nil."
   (when ido-everywhere
     (when (memq ido-mode '(both file))
       (put 'ido-everywhere 'file (cons read-file-name-function nil))
-      (setq read-file-name-function 'ido-read-file-name))
+      (setq read-file-name-function #'ido-read-file-name))
     (when (memq ido-mode '(both buffer))
       (put 'ido-everywhere 'buffer (cons read-buffer-function nil))
-      (setq read-buffer-function 'ido-read-buffer))))
+      (setq read-buffer-function #'ido-read-buffer))))
 
 (defvar ido-minor-mode-map-entry nil)
 
@@ -4782,7 +4782,7 @@ Modified from `icomplete-completions'."
 (put 'dired-do-rename 'ido 'ignore)
 
 ;;;###autoload
-(defun ido-read-buffer (prompt &optional default require-match)
+(defun ido-read-buffer (prompt &optional default require-match predicate)
   "Ido replacement for the built-in `read-buffer'.
 Return the name of a buffer selected.
 PROMPT is the prompt to give to the user.  DEFAULT if given is the default
@@ -4796,7 +4796,7 @@ If REQUIRE-MATCH is non-nil, an existing buffer must be 
selected."
     (if (eq ido-exit 'fallback)
        (let ((read-buffer-function nil))
          (run-hook-with-args 'ido-before-fallback-functions 'read-buffer)
-         (read-buffer prompt default require-match))
+         (read-buffer prompt default require-match predicate))
       buf)))
 
 ;;;###autoload
diff --git a/lisp/isearchb.el b/lisp/isearchb.el
index ffd4d62..5e7771c 100644
--- a/lisp/isearchb.el
+++ b/lisp/isearchb.el
@@ -75,7 +75,9 @@
 ;;   killing iswitchb.el and then trying to switch back is broken
 ;;   make sure TAB isn't broken
 
-(require 'iswitchb)
+;;; Code:
+
+(require 'iswitchb)                     ;FIXME: Don't rely on iswitchb!
 
 (defgroup isearchb nil
   "Switch between buffers using a mechanism like isearch."
@@ -118,7 +120,7 @@ Its purpose is to pass different call arguments to
   (interactive)
   (let* ((prompt "iswitch ")
         (iswitchb-method 'samewindow)
-        (buf (iswitchb-read-buffer prompt nil nil iswitchb-text t)))
+        (buf (iswitchb-read-buffer prompt nil nil nil iswitchb-text t)))
     (if (eq iswitchb-exit 'findfile)
        (call-interactively 'find-file)
       (when buf
diff --git a/lisp/misearch.el b/lisp/misearch.el
index dcc8195..6596911 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -234,7 +234,7 @@ set in `multi-isearch-buffers' or 
`multi-isearch-buffers-regexp'."
         (ido-ignore-item-temp-list bufs))
     (while (not (string-equal
                 (setq buf (read-buffer
-                           (if (eq read-buffer-function 'ido-read-buffer)
+                           (if (eq read-buffer-function #'ido-read-buffer)
                                "Next buffer to search (C-j to end): "
                              "Next buffer to search (RET to end): ")
                            nil t))
@@ -377,6 +377,8 @@ whose file names match the specified wildcard."
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward-regexp nil t)))
 
+(defvar unload-function-defs-list)
+
 (defun multi-isearch-unload-function ()
   "Remove autoloaded variables from `unload-function-defs-list'.
 Also prevent the feature from being reloaded via `isearch-mode-hook'."
diff --git a/lisp/mouse.el b/lisp/mouse.el
index e78eca4..c50913f 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -1801,6 +1801,8 @@ choose a font."
 (declare-function buffer-face-mode-invoke "face-remap"
                   (face arg &optional interactive))
 (declare-function font-face-attributes "font.c" (font &optional frame))
+(defvar w32-use-w32-font-dialog)
+(defvar w32-fixed-font-alist)
 
 (defun mouse-appearance-menu (event)
   "Show a menu for changing the default face in the current buffer."
@@ -1820,13 +1822,18 @@ choose a font."
        (define-key mouse-appearance-menu-map [text-scale-increase]
          '(menu-item "Increase Buffer Text Size" text-scale-increase))
        ;; Font selector
-       (if (functionp 'x-select-font)
+       (if (and (functionp 'x-select-font)
+                (or (not (boundp 'w32-use-w32-font-dialog))
+                    w32-use-w32-font-dialog))
            (define-key mouse-appearance-menu-map [x-select-font]
              '(menu-item "Change Buffer Font..." x-select-font))
          ;; If the select-font is unavailable, construct a menu.
          (let ((font-submenu (make-sparse-keymap "Change Text Font"))
-               (font-alist (cdr (append x-fixed-font-alist
-                                        (list (generate-fontset-menu))))))
+               (font-alist (cdr (append
+                                 (if (eq system-type 'windows-nt)
+                                     w32-fixed-font-alist
+                                   x-fixed-font-alist)
+                                 (list (generate-fontset-menu))))))
            (dolist (family font-alist)
              (let* ((submenu-name (car family))
                     (submenu-map (make-sparse-keymap submenu-name)))
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 5e61c09..4b64d95 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -42,6 +42,7 @@
 ;; browse-url-netscape                Netscape    1.1b1
 ;; browse-url-mosaic                  XMosaic/mMosaic <= 2.4
 ;; browse-url-cci                     XMosaic     2.5
+;; browse-url-conkeror                Conkeror    Dont know
 ;; browse-url-w3                      w3          0
 ;; browse-url-w3-gnudoit              w3 remotely
 ;; browse-url-text-*                 Any text browser     0
@@ -236,6 +237,7 @@ regexp should probably be \".\" to specify a default 
browser."
          (function-item :tag "Netscape" :value  browse-url-netscape)
          (function-item :tag "Mosaic" :value  browse-url-mosaic)
          (function-item :tag "Mosaic using CCI" :value  browse-url-cci)
+         (function-item :tag "Conkeror" :value  browse-url-conkeror)
          (function-item :tag "Text browser in an xterm window"
                         :value browse-url-text-xterm)
          (function-item :tag "Text browser in an Emacs window"
@@ -416,6 +418,13 @@ functionality is not available there."
   :type 'boolean
   :group 'browse-url)
 
+(defcustom browse-url-conkeror-new-window-is-buffer nil
+  "Whether to open up new windows in a buffer or a new window.
+If non-nill, then open the URL in a new buffer rather than a new window if
+`browse-url-conkeror' is asked to open it in a new window"
+  :type 'boolean
+  :group 'browse-url)
+
 (defcustom browse-url-galeon-new-window-is-tab nil
   "Whether to open up new windows in a tab or a new window.
 If non-nil, then open the URL in a new tab rather than a new window if
@@ -462,6 +471,17 @@ commands reverses the effect of this variable.  Requires 
Netscape version
   :type 'string
   :group 'browse-url)
 
+(defcustom browse-url-conkeror-program "conkeror"
+  "The name by which to invoke Conkeror."
+  :type 'string
+  :version "25.1"
+  :group 'browse-url)
+
+(defcustom browse-url-conkeror-arguments nil
+  "A list of strings to pass to Conkeror as arguments."
+  :type '(repeat (string :tag "Argument"))
+  :group 'browse-url)
+
 (defcustom browse-url-filename-alist
   `(("^/\\(address@hidden|address@hidden)?\\([^:]+\\):/*" . "ftp://\\2/";)
     ;; The above loses the username to avoid the browser prompting for
@@ -936,6 +956,7 @@ used instead of `browse-url-new-window-flag'."
     ((executable-find browse-url-kde-program) 'browse-url-kde)
     ((executable-find browse-url-netscape-program) 'browse-url-netscape)
     ((executable-find browse-url-mosaic-program) 'browse-url-mosaic)
+    ((executable-find browse-url-conkeror-program) 'browse-url-conkeror)
     ((executable-find browse-url-xterm-program) 'browse-url-text-xterm)
     ((locate-library "w3") 'browse-url-w3)
     (t
@@ -1359,6 +1380,41 @@ used instead of `browse-url-new-window-flag'."
   (process-send-string "browse-url" "disconnect\r\n")
   (delete-process "browse-url"))
 
+;; --- Conkeror ---
+;;;###autoload
+(defun browse-url-conkeror (url &optional new-window)
+  "Ask the Conkeror WWW browser to load URL.
+Default to the URL around or before point. The strings in the variable
+`browse-url-conkeror-arguments' are also passed to Conkeror.
+
+When called interactively, if variable `browse-url-new-window-flag'
+is non-nil, load the document in a new Conkeror window, otherwise use a random
+existing one. A non-nil interactive prefix argument reverses the effect of
+`browse-url-new-window-flag'
+
+If `browse-url-conkeror-new-window-is-buffer' then whenever a document would
+otherwise be loaded in a new window, it is loaded in a new buffer in an 
existing
+window instead.
+
+When called non-interatively, optional second argument NEW-WINDOW is used 
instead of
+`browse-url-new-window-flag'"
+  (interactive (browse-url-interactive-arg "URL: "))
+  (setq url (browse-url-encode-url url))
+  (let* ((process-environment (browse-url-process-environment)))
+    (apply 'start-process (format "conkeror %s" url)
+          nil
+          browse-url-conkeror-program
+          (append
+           browse-url-conkeror-arguments
+           (list
+            "-e"
+            (format "load_url_in_new_%s('%s')"
+                    (if (browse-url-maybe-new-window new-window)
+                        (if browse-url-conkeror-new-window-is-buffer
+                            "buffer"
+                          "window")
+                      "buffer")
+                    url))))))
 ;; --- W3 ---
 
 ;; External.
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el
index 6696dcf..a92ca4d 100644
--- a/lisp/net/tramp-adb.el
+++ b/lisp/net/tramp-adb.el
@@ -38,12 +38,14 @@
 ;; Pacify byte-compiler.
 (defvar directory-sep-char)
 
+;;;###tramp-autoload
 (defcustom tramp-adb-program "adb"
   "Name of the Android Debug Bridge program."
   :group 'tramp
   :version "24.4"
   :type 'string)
 
+;;;###tramp-autoload
 (defcustom tramp-adb-connect-if-not-connected nil
   "Try to run `adb connect' if provided device is not connected currently.
 It is used for TCP/IP devices."
@@ -55,6 +57,7 @@ It is used for TCP/IP devices."
 (defconst tramp-adb-method "adb"
   "*When this method name is used, forward all calls to Android Debug Bridge.")
 
+;;;###tramp-autoload
 (defcustom tramp-adb-prompt
   
"^\\(?:[[:digit:]]*|?\\)?\\(?:[[:alnum:address@hidden:alnum:]]*[^#\\$]*\\)?[#\\$][[:space:]]"
   "Regexp used as prompt in almquist shell."
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 1ea52eb..5988a28 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -127,6 +127,7 @@
 ;;;###tramp-autoload
 (add-to-list 'tramp-default-user-alist '("\\`synce\\'" nil nil))
 
+;;;###tramp-autoload
 (defcustom tramp-gvfs-zeroconf-domain "local"
   "Zeroconf domain to be used for discovering services, like host names."
   :group 'tramp
@@ -374,6 +375,7 @@ It has been changed in GVFS 1.14.")
 ;;   </signal>
 ;; </interface>
 
+;;;###tramp-autoload
 (defcustom tramp-bluez-discover-devices-timeout 60
   "Defines seconds since last bluetooth device discovery before rescanning.
 A value of 0 would require an immediate discovery during hostname
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 76d2b01..133d886 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -40,6 +40,7 @@
 (defvar vc-git-program)
 (defvar vc-hg-program)
 
+;;;###tramp-autoload
 (defcustom tramp-inline-compress-start-size 4096
   "The minimum size of compressing where inline transfer.
 When inline transfer, compress transferred data of file
@@ -48,6 +49,7 @@ If it is nil, no compression at all will be applied."
   :group 'tramp
   :type '(choice (const nil) integer))
 
+;;;###tramp-autoload
 (defcustom tramp-copy-size-limit 10240
   "The maximum file size where inline copying is preferred over an \
 out-of-the-band copy.
@@ -105,6 +107,27 @@ detected as prompt when being sent on echoing hosts, 
therefore.")
 (defconst tramp-end-of-heredoc (md5 tramp-end-of-output)
   "String used to recognize end of heredoc strings.")
 
+;;;###tramp-autoload
+(defcustom tramp-use-ssh-controlmaster-options t
+  "Whether to use `tramp-ssh-controlmaster-options'."
+  :group 'tramp
+  :version "24.4"
+  :type 'boolean)
+
+(defvar tramp-ssh-controlmaster-options nil
+  "Which ssh Control* arguments to use.
+
+If it is a string, it should have the form
+\"-o ControlMaster=auto -o ControlPath='address@hidden:%%p'
+-o ControlPersist=no\".  Percent characters in the ControlPath
+spec must be doubled, because the string is used as format string.
+
+Otherwise, it will be auto-detected by Tramp, if
+`tramp-use-ssh-controlmaster-options' is non-nil.  The value
+depends on the installed local ssh version.
+
+The string is used in `tramp-methods'.")
+
 ;; Initialize `tramp-methods' with the supported methods.
 ;;;###tramp-autoload
 (add-to-list 'tramp-methods
@@ -489,6 +512,7 @@ not be set here. Instead, it should be set via 
`tramp-remote-path'."
   :version "24.4"
   :type '(repeat string))
 
+;;;###tramp-autoload
 (defcustom tramp-sh-extra-args '(("/bash\\'" . "-norc -noprofile"))
   "Alist specifying extra arguments to pass to the remote shell.
 Entries are (REGEXP . ARGS) where REGEXP is a regular expression
@@ -2354,10 +2378,7 @@ The method used must be an out-of-band method."
              spec (format-spec-make
                    ?t (tramp-get-connection-property
                        (tramp-get-connection-process v) "temp-file" ""))
-             options (format-spec
-                      (if tramp-use-ssh-controlmaster-options
-                          tramp-ssh-controlmaster-options "")
-                      spec)
+             options (format-spec (tramp-ssh-controlmaster-options v) spec)
              spec (format-spec-make
                    ?h host ?u user ?p port ?r listener ?c options
                    ?k (if keep-date " " ""))
@@ -3704,6 +3725,10 @@ Only send the definition if it has not already been 
done."
                  (tramp-get-connection-process vec) "scripts" nil)))
     (unless (member name scripts)
       (with-tramp-progress-reporter vec 5 (format "Sending script `%s'" name)
+       ;; In bash, leading TABs like in `tramp-vc-registered-read-file-names'
+       ;; could result in unwanted command expansion.  Avoid this.
+       (setq script (tramp-compat-replace-regexp-in-string
+                     (make-string 1 ?\t) (make-string 8 ? ) script))
        ;; The script could contain a call of Perl.  This is masked with `%s'.
        (when (and (string-match "%s" script)
                   (not (tramp-get-remote-perl vec)))
@@ -4544,7 +4569,7 @@ Gateway hops are already opened."
 
     ;; In case the host name is not used for the remote shell
     ;; command, the user could be misguided by applying a random
-    ;; hostname.
+    ;; host name.
     (let* ((v (car target-alist))
           (method (tramp-file-name-method v))
           (host (tramp-file-name-host v)))
@@ -4566,6 +4591,53 @@ Gateway hops are already opened."
     ;; Result.
     target-alist))
 
+(defun tramp-ssh-controlmaster-options (vec)
+  "Return the Control* arguments of the local ssh."
+  (cond
+   ;; No options to be computed.
+   ((or (null tramp-use-ssh-controlmaster-options)
+       (null (assoc "%c" (tramp-get-method-parameter
+                          (tramp-file-name-method vec) 'tramp-login-args))))
+    "")
+
+   ;; There is already a value to be used.
+   ((stringp tramp-ssh-controlmaster-options) tramp-ssh-controlmaster-options)
+
+   ;; Determine the options.
+   (t (setq tramp-ssh-controlmaster-options "")
+      (let ((case-fold-search t))
+       (ignore-errors
+         (when (executable-find "ssh")
+           (with-temp-buffer
+             (tramp-call-process vec "ssh" nil t nil "-o" "ControlMaster")
+             (goto-char (point-min))
+             (when (search-forward-regexp "missing.+argument" nil t)
+               (setq tramp-ssh-controlmaster-options "-o ControlMaster=auto")))
+           (unless (zerop (length tramp-ssh-controlmaster-options))
+             (with-temp-buffer
+               ;; When we use a non-existing host name, we could run
+               ;; into DNS timeouts.  So we use "localhost" with an
+               ;; improper port, expecting nobody runs sshd on the
+               ;; telnet port.
+               (tramp-call-process
+                vec "ssh" nil t nil
+                "-p" "23" "-o" "ControlPath=%C" "localhost")
+               (goto-char (point-min))
+               (setq tramp-ssh-controlmaster-options
+                     (if (search-forward-regexp "unknown.+key" nil t)
+                         (concat tramp-ssh-controlmaster-options
+                                 " -o ControlPath='address@hidden:%%p'")
+                       (concat tramp-ssh-controlmaster-options
+                               " -o ControlPath='tramp.%%C'"))))
+             (with-temp-buffer
+               (tramp-call-process vec "ssh" nil t nil "-o" "ControlPersist")
+               (goto-char (point-min))
+               (when (search-forward-regexp "missing.+argument" nil t)
+                 (setq tramp-ssh-controlmaster-options
+                       (concat tramp-ssh-controlmaster-options
+                               " -o ControlPersist=no"))))))))
+      tramp-ssh-controlmaster-options)))
+
 (defun tramp-maybe-open-connection (vec)
   "Maybe open a connection VEC.
 Does not do anything if a connection is already open, but re-opens the
@@ -4647,8 +4719,7 @@ connection if a previous connection has died for some 
reason."
              (let* ((target-alist (tramp-compute-multi-hops vec))
                     ;; We will apply `tramp-ssh-controlmaster-options'
                     ;; only for the first hop.
-                    (options (if tramp-use-ssh-controlmaster-options
-                                 tramp-ssh-controlmaster-options ""))
+                    (options (tramp-ssh-controlmaster-options vec))
                     (process-connection-type tramp-process-connection-type)
                     (process-adaptive-read-buffering nil)
                     (coding-system-for-read nil)
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index d5fe17f..14360b9 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -70,17 +70,20 @@
     tramp-smb-method
     '((tramp-parse-netrc "~/.netrc"))))
 
+;;;###tramp-autoload
 (defcustom tramp-smb-program "smbclient"
   "Name of SMB client to run."
   :group 'tramp
   :type 'string)
 
+;;;###tramp-autoload
 (defcustom tramp-smb-acl-program "smbcacls"
   "Name of SMB acls to run."
   :group 'tramp
   :type 'string
   :version "24.4")
 
+;;;###tramp-autoload
 (defcustom tramp-smb-conf "/dev/null"
   "Path of the smb.conf file.
 If it is nil, no smb.conf will be added to the `tramp-smb-program'
@@ -280,6 +283,7 @@ See `tramp-actions-before-shell' for more info.")
 Operations not mentioned here will be handled by the default Emacs 
primitives.")
 
 ;; Options for remote processes via winexe.
+;;;###tramp-autoload
 (defcustom tramp-smb-winexe-program "winexe"
   "Name of winexe client to run.
 If it isn't found in the local $PATH, the absolute path of winexe
@@ -288,6 +292,7 @@ shall be given.  This is needed for remote processes."
   :type 'string
   :version "24.3")
 
+;;;###tramp-autoload
 (defcustom tramp-smb-winexe-shell-command "powershell.exe"
   "Shell to be used for processes on remote machines.
 This must be Powershell V2 compatible."
@@ -295,6 +300,7 @@ This must be Powershell V2 compatible."
   :type 'string
   :version "24.3")
 
+;;;###tramp-autoload
 (defcustom tramp-smb-winexe-shell-command-switch "-file -"
   "Command switch used together with `tramp-smb-winexe-shell-command'.
 This can be used to disable echo etc."
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 953525f..10bb769 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -307,43 +307,6 @@ started on the local host.  You should specify a remote 
host
 `localhost' or the name of the local host.  Another host name is
 useful only in combination with `tramp-default-proxies-alist'.")
 
-;;;###tramp-autoload
-(defconst tramp-ssh-controlmaster-options
-  (let ((result "")
-       (case-fold-search t))
-    (ignore-errors
-      (when (executable-find "ssh")
-       (with-temp-buffer
-         (call-process "ssh" nil t nil "-o" "ControlMaster")
-         (goto-char (point-min))
-         (when (search-forward-regexp "missing.+argument" nil t)
-           (setq result "-o ControlMaster=auto")))
-       (unless (zerop (length result))
-         (with-temp-buffer
-           (call-process
-            "ssh" nil t nil "-o" "ControlPath=%C" "host.does.not.exist")
-           (goto-char (point-min))
-           (if (search-forward-regexp "unknown.+key" nil t)
-               (setq result
-                     (concat result " -o ControlPath='address@hidden:%%p'"))
-             (setq result (concat result " -o ControlPath='tramp.%%C'"))))
-         (with-temp-buffer
-           (call-process "ssh" nil t nil "-o" "ControlPersist")
-           (goto-char (point-min))
-           (when (search-forward-regexp "missing.+argument" nil t)
-             (setq result (concat result " -o ControlPersist=no")))))))
-    result)
-    "Call ssh to detect whether it supports the Control* arguments.
-Return a string to be used in `tramp-methods'.")
-
-;;;###tramp-autoload
-(defcustom tramp-use-ssh-controlmaster-options
-  (not (zerop (length tramp-ssh-controlmaster-options)))
-  "Whether to use `tramp-ssh-controlmaster-options'."
-  :group 'tramp
-  :version "24.4"
-  :type 'boolean)
-
 (defcustom tramp-default-method
   ;; An external copy method seems to be preferred, because it performs
   ;; much better for large files, and it hasn't too serious delays
@@ -374,9 +337,7 @@ Return a string to be used in `tramp-methods'.")
            (fboundp 'auth-source-search)
            ;; ssh-agent is running.
            (getenv "SSH_AUTH_SOCK")
-           (getenv "SSH_AGENT_PID")
-           ;; We could reuse the connection.
-           (> (length tramp-ssh-controlmaster-options) 0))
+           (getenv "SSH_AGENT_PID"))
        "scp"
       "ssh"))
    ;; Fallback.
diff --git a/lisp/obsolete/iswitchb.el b/lisp/obsolete/iswitchb.el
index 6b1e534..111de85 100644
--- a/lisp/obsolete/iswitchb.el
+++ b/lisp/obsolete/iswitchb.el
@@ -175,10 +175,10 @@
 ;; iswitchb-read-buffer has been written to be a drop in replacement
 ;; for the normal buffer selection routine `read-buffer'.  To use
 ;; iswitch for all buffer selections in Emacs, add:
-;; (setq read-buffer-function 'iswitchb-read-buffer)
+;; (setq read-buffer-function #'iswitchb-read-buffer)
 ;; (This variable was introduced in Emacs 20.3.)
 ;; XEmacs users can get the same behavior by doing:
-;; (defalias 'read-buffer 'iswitchb-read-buffer)
+;; (defalias 'read-buffer #'iswitchb-read-buffer)
 ;; since `read-buffer' is defined in lisp.
 
 ;; Using iswitchb for other completion tasks.
@@ -586,7 +586,7 @@ in a separate window.
           ))))
 
 (defun iswitchb-read-buffer (prompt &optional default require-match
-                                   start matches-set)
+                                   _predicate start matches-set)
   "Replacement for the built-in `read-buffer'.
 Return the name of a buffer selected.
 PROMPT is the prompt to give to the user.
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 2ed3a74..3800cfb 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -4,7 +4,7 @@
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: Michael Mauger <address@hidden>
-;; Version: 3.4
+;; Version: 3.5
 ;; Keywords: comm languages processes
 ;; URL: http://savannah.gnu.org/projects/emacs/
 
@@ -3296,13 +3296,13 @@ Allows the suppression of continuation prompts.")
 (defun sql-starts-with-prompt-re ()
   "Anchor the prompt expression at the beginning of the output line.
 Remove the start of line regexp."
-  (replace-regexp-in-string "\\^" "\\\\`" comint-prompt-regexp))
+  (concat "\\`" comint-prompt-regexp))
 
 (defun sql-ends-with-prompt-re ()
   "Anchor the prompt expression at the end of the output line.
-Remove the start of line regexp from the prompt expression since
-it may not follow newline characters in the output line."
-  (concat (replace-regexp-in-string "\\^" "" sql-prompt-regexp) "\\'"))
+Match a SQL prompt or a password prompt."
+  (concat "\\(?:\\(?:" sql-prompt-regexp "\\)\\|"
+          "\\(?:" comint-password-prompt-regexp "\\)\\)\\'"))
 
 (defun sql-interactive-remove-continuation-prompt (oline)
   "Strip out continuation prompts out of the OLINE.
@@ -3321,7 +3321,17 @@ to the next chunk to properly match the broken-up prompt.
 If the filter gets confused, it should reset and stop filtering
 to avoid deleting non-prompt output."
 
-  (when comint-prompt-regexp
+  ;; continue gathering lines of text iff
+  ;;  + we know what a prompt looks like, and
+  ;;  + there is held text, or
+  ;;  + there are continuation prompt yet to come, or
+  ;;  + not just a prompt string
+  (when (and comint-prompt-regexp
+             (or (> (length (or sql-preoutput-hold "")) 0)
+                 (> (or sql-output-newline-count 0) 0)
+                 (not (or (string-match sql-prompt-regexp oline)
+                          (string-match sql-prompt-cont-regexp oline)))))
+
     (save-match-data
       (let (prompt-found last-nl)
 
@@ -3357,16 +3367,19 @@ to avoid deleting non-prompt output."
                 sql-preoutput-hold ""))
 
         ;; Break up output by physical lines if we haven't hit the final prompt
-        (unless (and (not (string= oline ""))
-                     (string-match (sql-ends-with-prompt-re) oline)
-                     (>= (match-end 0) (length oline)))
-          (setq last-nl 0)
-          (while (string-match "\n" oline last-nl)
-            (setq last-nl (match-end 0)))
-          (setq sql-preoutput-hold (concat (substring oline last-nl)
-                                           sql-preoutput-hold)
-                oline (substring oline 0 last-nl))))))
-   oline)
+        (let ((end-re (sql-ends-with-prompt-re)))
+          (unless (and (not (string= oline ""))
+                       (string-match end-re oline)
+                       (>= (match-end 0) (length oline)))
+            ;; Find everything upto the last nl
+            (setq last-nl 0)
+            (while (string-match "\n" oline last-nl)
+              (setq last-nl (match-end 0)))
+            ;; Hold after the last nl, return upto last nl
+            (setq sql-preoutput-hold (concat (substring oline last-nl)
+                                             sql-preoutput-hold)
+                  oline (substring oline 0 last-nl)))))))
+  oline)
 
 ;;; Sending the region to the SQLi buffer.
 
diff --git a/lisp/replace.el b/lisp/replace.el
index e0636e0..70b86dd 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1369,7 +1369,7 @@ See also `multi-occur-in-matching-buffers'."
           (ido-ignore-item-temp-list bufs))
       (while (not (string-equal
                   (setq buf (read-buffer
-                             (if (eq read-buffer-function 'ido-read-buffer)
+                             (if (eq read-buffer-function #'ido-read-buffer)
                                  "Next buffer to search (C-j to end): "
                                "Next buffer to search (RET to end): ")
                              nil t))
diff --git a/lisp/startup.el b/lisp/startup.el
index 999e53e..7fa929a 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -875,7 +875,8 @@ please check its value")
     ;; processed.  This is consistent with the way main in emacs.c
     ;; does things.
     (while (and (not done) args)
-      (let* ((longopts '(("--no-init-file") ("--no-site-file") ("--debug-init")
+      (let* ((longopts '(("--no-init-file") ("--no-site-file")
+                         ("--no-x-resources") ("--debug-init")
                          ("--user") ("--iconic") ("--icon-type") ("--quick")
                         ("--no-blinking-cursor") ("--basic-display")))
              (argi (pop args))
@@ -906,7 +907,9 @@ please check its value")
         ((member argi '("-Q" "-quick"))
          (setq init-file-user nil
                site-run-file nil
-               inhibit-x-resources t))
+                inhibit-x-resources t))
+         ((member argi '("-no-x-resources"))
+          (setq inhibit-x-resources t))
         ((member argi '("-D" "-basic-display"))
          (setq no-blinking-cursor t
                emacs-basic-display t)
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 0f46413..8733614 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-15  Stefan Monnier  <address@hidden>
+
+       * url-handlers.el (url-insert-file-contents): Call
+       after-insert-file-set-coding like insert-file-contents, to set
+       buffer-file-coding-system (bug#20010).
+
 2015-01-22  Paul Eggert  <address@hidden>
 
        Don't downcase system diagnostics' first letters
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index 23006e1..ff3eafd 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -1,4 +1,4 @@
-;;; url-handlers.el --- file-name-handler stuff for URL loading
+;;; url-handlers.el --- file-name-handler stuff for URL loading  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 1996-1999, 2004-2015 Free Software Foundation, Inc.
 
@@ -228,7 +228,7 @@ the arguments that would have been passed to OPERATION."
       ;; a local process.
       nil)))
 
-(defun url-handler-file-remote-p (filename &optional identification connected)
+(defun url-handler-file-remote-p (filename &optional identification _connected)
   (let ((url (url-generic-parse-url filename)))
     (if (and (url-type url) (not (equal (url-type url) "file")))
        ;; Maybe we can find a suitable check for CONNECTED.  For now,
@@ -250,7 +250,7 @@ the arguments that would have been passed to OPERATION."
 ;; The actual implementation
 ;;;###autoload
 (defun url-copy-file (url newname &optional ok-if-already-exists
-                         keep-time preserve-uid-gid)
+                         _keep-time _preserve-uid-gid)
   "Copy URL to NEWNAME.  Both args must be strings.
 Signals a `file-already-exists' error if file NEWNAME already exists,
 unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
@@ -334,8 +334,13 @@ They count bytes from the beginning of the body."
         (unless (cadr size-and-charset)
           ;; If the headers don't specify any particular charset, use the
           ;; usual heuristic/rules that we apply to files.
-          (decode-coding-inserted-region start (point) url visit beg end 
replace))
-        (list url (car size-and-charset))))))
+          (decode-coding-inserted-region start (point) url
+                                         visit beg end replace))
+        (let ((inserted (car size-and-charset)))
+          (when (fboundp 'after-insert-file-set-coding)
+            (let ((insval (after-insert-file-set-coding inserted visit)))
+              (if insval (setq inserted insval))))
+          (list url inserted))))))
 
 (put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents)
 
diff --git a/lisp/w32-vars.el b/lisp/w32-vars.el
index ae42ee7..f9212be 100644
--- a/lisp/w32-vars.el
+++ b/lisp/w32-vars.el
@@ -34,10 +34,17 @@
 
 ;; Redefine the font selection to use the standard W32 dialog
 (defcustom w32-use-w32-font-dialog t
-  "Use the standard font dialog.
+  "If non-nil, use the standard Windows font dialog for font selection.
 If nil, pop up a menu of a fixed set of fonts including fontsets, like
-X does.  See `w32-fixed-font-alist' for the font menu definition."
+X does.  See `w32-fixed-font-alist' for the fonts to appear in the menu.
+
+Setting this variable directly does not have any effect;
+use either \\[customize] or set `mouse-appearance-menu-map' to nil
+after changing the value of this variable."
   :type 'boolean
+  :set (lambda (symbol value)
+        (set symbol value)
+        (setq mouse-appearance-menu-map nil))
   :group 'w32)
 
 (defvar w32-list-proportional-fonts nil
@@ -104,11 +111,11 @@ X does.  See `w32-fixed-font-alist' for the font menu 
definition."
       "-*-Lucida Sans Typewriter-semibold-r-*-*-16-*-*-*-c-*-iso8859-1"))
     ("Courier"
      ("Courier 10x8"
-      "-*-Courier-*normal-r-*-*-*-97-*-*-c-80-iso8859-1")
+      "-*-Courier New-normal-r-*-*-*-97-*-*-c-80-iso8859-1")
      ("Courier 12x9"
-      "-*-Courier-*normal-r-*-*-*-120-*-*-c-90-iso8859-1")
+      "-*-Courier New-normal-r-*-*-*-120-*-*-c-90-iso8859-1")
      ("Courier 15x12"
-      "-*-Courier-*normal-r-*-*-*-150-*-*-c-120-iso8859-1")
+      "-*-Courier New-normal-r-*-*-*-150-*-*-c-120-iso8859-1")
      ;; For these, we specify the point height.
      ("")
      ("8" "-*-Courier New-normal-r-*-*-11-*-*-*-c-*-iso8859-1")
diff --git a/lisp/widget.el b/lisp/widget.el
index f8faa0f..539f91e 100644
--- a/lisp/widget.el
+++ b/lisp/widget.el
@@ -83,6 +83,9 @@ create identical widgets:
 * (apply 'widget-create CLASS ARGS)
 
 The third argument DOC is a documentation string for the widget."
+  ;;
+  (unless (or (null doc) (stringp doc))
+    (error "widget documentation must be `nil' or a string."))
   (put name 'widget-type (cons class args))
   (put name 'widget-documentation (purecopy doc))
   name)
diff --git a/src/ChangeLog b/src/ChangeLog
index d9612db..fbf8fb4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,24 @@
+2015-03-16  Stefan Monnier  <address@hidden>
+
+       * minibuf.c (Fread_buffer): Add `predicate' argument.
+       * callint.c (Fcall_interactively): Adjust calls accordingly.
+
+2015-03-15  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (handle_invisible_prop): Fix up it->position even when
+       we are going to load overlays at the beginning of the invisible
+       text.
+       (setup_for_ellipsis): Reset the ignore_overlay_strings_at_pos_p
+       flag also here.
+       (next_overlay_string): Set the overlay_strings_at_end_processed_p
+       flag only if the overlays just processed were actually loaded at
+       EOB.
+
+2015-03-14  Daniel Colascione  <address@hidden>
+
+       * emacs.c (standard_args): Add --no-x-resources.
+       (usage_message): Document that -Q implies --no-x-resources.
+
 2015-03-13  Paul Eggert  <address@hidden>
 
        * frame.c (x_get_resource_string) [!USE_GTK]: Don't define.
diff --git a/src/callint.c b/src/callint.c
index 0c6c030..cf50e0c 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -531,13 +531,13 @@ invoke it.  If KEYS is omitted or nil, the return value of
          args[i] = Fcurrent_buffer ();
          if (EQ (selected_window, minibuf_window))
            args[i] = Fother_buffer (args[i], Qnil, Qnil);
-         args[i] = Fread_buffer (callint_message, args[i], Qt);
+         args[i] = Fread_buffer (callint_message, args[i], Qt, Qnil);
          break;
 
        case 'B':               /* Name of buffer, possibly nonexistent.  */
          args[i] = Fread_buffer (callint_message,
                                  Fother_buffer (Fcurrent_buffer (), Qnil, 
Qnil),
-                                 Qnil);
+                                 Qnil, Qnil);
          break;
 
         case 'c':              /* Character.  */
diff --git a/src/emacs.c b/src/emacs.c
index 94025a2..02b2c30 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -240,6 +240,7 @@ Initialization options:\n\
 --no-init-file, -q          load neither ~/.emacs nor default.el\n\
 --no-loadup, -nl            do not load loadup.el into bare Emacs\n\
 --no-site-file              do not load site-start.el\n\
+--no-x-resources            do not load X resources\n\
 --no-site-lisp, -nsl        do not add site-lisp directories to load-path\n\
 --no-splash                 do not display a splash screen on startup\n\
 --no-window-system, -nw     do not communicate with X, ignoring $DISPLAY\n\
@@ -247,6 +248,7 @@ Initialization options:\n\
     "\
 --quick, -Q                 equivalent to:\n\
                               -q --no-site-file --no-site-lisp --no-splash\n\
+                              --no-x-resources\n\
 --script FILE               run FILE as an Emacs Lisp script\n\
 --terminal, -t DEVICE       use DEVICE for terminal I/O\n\
 --user, -u USER             load ~USER/.emacs instead of your own\n\
@@ -1667,6 +1669,7 @@ static const struct standard_args standard_args[] =
   { "-quick", 0, 55, 0 },
   { "-q", "--no-init-file", 50, 0 },
   { "-no-init-file", 0, 50, 0 },
+  { "-no-x-resources", "--no-x-resources", 40, 0 },
   { "-no-site-file", "--no-site-file", 40, 0 },
   { "-u", "--user", 30, 1 },
   { "-user", 0, 30, 1 },
diff --git a/src/minibuf.c b/src/minibuf.c
index e7c288b..c033169 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1081,7 +1081,7 @@ A user option, or customizable variable, is one for which
   return Fintern (name, Qnil);
 }
 
-DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
+DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 4, 0,
        doc: /* Read the name of a buffer and return as a string.
 Prompt with PROMPT.
 Optional second arg DEF is value to return if user enters an empty line.
@@ -1093,8 +1093,11 @@ The argument PROMPT should be a string ending with a 
colon and a space.
 If `read-buffer-completion-ignore-case' is non-nil, completion ignores
 case while reading the buffer name.
 If `read-buffer-function' is non-nil, this works by calling it as a
-function, instead of the usual behavior.  */)
-  (Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match)
+function, instead of the usual behavior.
+Optional arg PREDICATE if non-nil is a function limiting the buffers that can
+be considered.  */)
+  (Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match,
+   Lisp_Object predicate)
 {
   Lisp_Object result;
   char *s;
@@ -1136,11 +1139,16 @@ function, instead of the usual behavior.  */)
        }
 
       result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
-                                Qnil, require_match, Qnil,
+                                predicate, require_match, Qnil,
                                 Qbuffer_name_history, def, Qnil);
     }
   else
-    result = call3 (Vread_buffer_function, prompt, def, require_match);
+    result = (NILP (predicate)
+             /* Partial backward compatibility for older read_buffer_functions
+                which don't expect a `predicate' argument.  */
+             ? call3 (Vread_buffer_function, prompt, def, require_match)
+             : call4 (Vread_buffer_function, prompt, def, require_match,
+                      predicate));
   return unbind_to (count, result);
 }
 
diff --git a/src/xdisp.c b/src/xdisp.c
index 189dd86..da470db 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4418,6 +4418,27 @@ handle_invisible_prop (struct it *it)
              IT_BYTEPOS (*it) = CHAR_TO_BYTE (newpos);
            }
 
+         if (display_ellipsis_p)
+            {
+              /* Make sure that the glyphs of the ellipsis will get
+                 correct `charpos' values.  If we would not update
+                 it->position here, the glyphs would belong to the
+                 last visible character _before_ the invisible
+                 text, which confuses `set_cursor_from_row'.
+
+                 We use the last invisible position instead of the
+                 first because this way the cursor is always drawn on
+                 the first "." of the ellipsis, whenever PT is inside
+                 the invisible text.  Otherwise the cursor would be
+                 placed _after_ the ellipsis when the point is after the
+                 first invisible character.  */
+             if (!STRINGP (it->object))
+               {
+                 it->position.charpos = newpos - 1;
+                 it->position.bytepos = CHAR_TO_BYTE (it->position.charpos);
+               }
+           }
+
          /* If there are before-strings at the start of invisible
             text, and the text is invisible because of a text
             property, arrange to show before-strings because 20.x did
@@ -4449,23 +4470,6 @@ handle_invisible_prop (struct it *it)
            }
          else if (display_ellipsis_p)
             {
-              /* Make sure that the glyphs of the ellipsis will get
-                 correct `charpos' values.  If we would not update
-                 it->position here, the glyphs would belong to the
-                 last visible character _before_ the invisible
-                 text, which confuses `set_cursor_from_row'.
-
-                 We use the last invisible position instead of the
-                 first because this way the cursor is always drawn on
-                 the first "." of the ellipsis, whenever PT is inside
-                 the invisible text.  Otherwise the cursor would be
-                 placed _after_ the ellipsis when the point is after the
-                 first invisible character.  */
-             if (!STRINGP (it->object))
-               {
-                 it->position.charpos = newpos - 1;
-                 it->position.bytepos = CHAR_TO_BYTE (it->position.charpos);
-               }
              it->ellipsis_p = true;
              /* Let the ellipsis display before
                 considering any properties of the following char.
@@ -4510,6 +4514,11 @@ setup_for_ellipsis (struct it *it, int len)
   if (it->saved_face_id < 0 || it->saved_face_id != it->face_id)
     it->saved_face_id = it->face_id = DEFAULT_FACE_ID;
 
+  /* If the ellipsis represents buffer text, it means we advanced in
+     the buffer, so we should no longer ignore overlay strings.  */
+  if (it->method == GET_FROM_BUFFER)
+    it->ignore_overlay_strings_at_pos_p = false;
+
   it->method = GET_FROM_DISPLAY_VECTOR;
   it->ellipsis_p = true;
 }
@@ -5452,7 +5461,6 @@ next_overlay_string (struct it *it)
                   && it->stop_charpos <= it->end_charpos));
       it->current.overlay_string_index = -1;
       it->n_overlay_strings = 0;
-      it->overlay_strings_charpos = -1;
       /* If there's an empty display string on the stack, pop the
         stack, to resync the bidi iterator with IT's position.  Such
         empty strings are pushed onto the stack in
@@ -5469,8 +5477,18 @@ next_overlay_string (struct it *it)
       /* If we're at the end of the buffer, record that we have
         processed the overlay strings there already, so that
         next_element_from_buffer doesn't try it again.  */
-      if (NILP (it->string) && IT_CHARPOS (*it) >= it->end_charpos)
+      if (NILP (it->string)
+         && IT_CHARPOS (*it) >= it->end_charpos
+         && it->overlay_strings_charpos >= it->end_charpos)
        it->overlay_strings_at_end_processed_p = true;
+      /* Note: we reset overlay_strings_charpos only here, to make
+        sure the just-processed overlays were indeed at EOB.
+        Otherwise, overlays on text with invisible text property,
+        which are processed with IT's position past the invisible
+        text, might fool us into thinking the overlays at EOB were
+        already processed (linum-mode can cause this, for
+        example).  */
+      it->overlay_strings_charpos = -1;
     }
   else
     {
diff --git a/test/ChangeLog b/test/ChangeLog
index 6a474e1..e150aba 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,16 @@
+2015-03-17  Stefan Monnier  <address@hidden>
+
+       * automated/cl-lib-tests.el: Use lexical-binding.
+       (cl-lib-arglist-performance): Refine test to the case where one of the
+       fields has a non-nil default value.  Use existing `mystruct' defstruct.
+       (cl-lib-struct-accessors): Use `pcase' to be a bit more flexible in the
+       accepted outputs.
+
+2015-03-16  Ken Brown  <address@hidden>
+
+       * automated/tramp-tests.el (tramp--test-special-characters):
+       Don't test "\t" in file names on Cygwin.  (Bug#20119)
+
 2015-03-10  Jackson Ray Hamilton  <address@hidden>
 
        * indent/js-indent-init-dynamic.js: Fix spelling error.
@@ -73,8 +86,8 @@
 
 2015-03-03  Daniel Colascione  <address@hidden>
 
-       * automated/generator-tests.el (cps-testcase): Use
-       `cps-inhibit-atomic-optimization' instead of
+       * automated/generator-tests.el (cps-testcase):
+       Use `cps-inhibit-atomic-optimization' instead of
        `cps-disable-atomic-optimization'.
        (cps-test-declarations-preserved): New test.
 
@@ -179,8 +192,8 @@
 
 2015-02-07  Dmitry Gutov  <address@hidden>
 
-       * automated/vc-tests.el (vc-test--working-revision): Fix
-       `vc-working-revision' checks to be compared against nil, which is
+       * automated/vc-tests.el (vc-test--working-revision):
+       Fix `vc-working-revision' checks to be compared against nil, which is
        what is should return for unregistered files.
 
 2015-02-06 Nicolas Petton <address@hidden>
diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el
index 1c36e7d..ce0e591 100644
--- a/test/automated/cl-lib-tests.el
+++ b/test/automated/cl-lib-tests.el
@@ -1,4 +1,4 @@
-;;; cl-lib.el --- tests for emacs-lisp/cl-lib.el
+;;; cl-lib.el --- tests for emacs-lisp/cl-lib.el  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
@@ -204,7 +204,10 @@
                     :b :a :a 42)
            '(42 :a))))
 
-(cl-defstruct mystruct (abc :readonly t) def)
+(cl-defstruct (mystruct
+               (:constructor cl-lib--con-1 (&aux (abc 1)))
+               (:constructor cl-lib--con-2 (&optional def)))
+  (abc 5 :readonly t) (def nil))
 (ert-deftest cl-lib-struct-accessors ()
   (let ((x (make-mystruct :abc 1 :def 2)))
     (should (eql (cl-struct-slot-value 'mystruct 'abc x) 1))
@@ -213,8 +216,17 @@
     (should (eql (cl-struct-slot-value 'mystruct 'def x) -1))
     (should (eql (cl-struct-slot-offset 'mystruct 'abc) 1))
     (should-error (cl-struct-slot-offset 'mystruct 'marypoppins))
-    (should (equal (cl-struct-slot-info 'mystruct)
-                   '((cl-tag-slot) (abc :readonly t) (def))))))
+    (should (pcase (cl-struct-slot-info 'mystruct)
+              (`((cl-tag-slot) (abc 5 :readonly t)
+                 (def . ,(or `nil `(nil))))
+               t)))))
+
+(ert-deftest cl-lib-arglist-performance ()
+  ;; An `&aux' should not cause lambda's arglist to be turned into an &rest
+  ;; that's parsed by hand.
+  (should (equal () (help-function-arglist 'cl-lib--con-1)))
+  (should (pcase (help-function-arglist 'cl-lib--con-2)
+            (`(&optional ,_) t))))
 
 (ert-deftest cl-the ()
   (should (eql (cl-the integer 42) 42))
@@ -427,4 +439,11 @@
 (ert-deftest cl-flet-test ()
   (should (equal (cl-flet ((f1 (x) x)) (let ((x #'f1)) (funcall x 5))) 5)))
 
+(ert-deftest cl-lib-test-typep ()
+  (cl-deftype cl-lib-test-type (&optional x) `(member ,x))
+  ;; Make sure we correctly implement the rule that deftype's optional args
+  ;; default to `*' rather than to nil.
+  (should (cl-typep '* 'cl-lib-test-type))
+  (should-not (cl-typep 1 'cl-lib-test-type)))
+
 ;;; cl-lib.el ends here
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index 020f31f..9ba6743 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -1621,12 +1621,15 @@ This requires restrictions of file name syntax."
 
 (defun tramp--test-special-characters ()
   "Perform the test in `tramp-test30-special-characters*'."
-  ;; Newlines, slashes and backslashes in file names are not supported.
-  ;; So we don't test.
+  ;; Newlines, slashes and backslashes in file names are not
+  ;; supported.  So we don't test.  And we don't test the tab
+  ;; character on Windows or Cygwin, because the backslash is
+  ;; interpreted as a path separator, preventing "\t" from being
+  ;; expanded to <TAB>.
   (tramp--test-check-files
    (if (tramp--test-smb-or-windows-nt-p)
        "foo bar baz"
-     (if (tramp--test-adb-p)
+     (if (or (tramp--test-adb-p) (eq system-type 'cygwin))
         " foo bar baz "
        " foo\tbar baz\t"))
    "$foo$bar$$baz$"



reply via email to

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