emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] xwidget_mvp 8169972 3/3: Merge branch 'master' into xwidge


From: Joakim Verona
Subject: [Emacs-diffs] xwidget_mvp 8169972 3/3: Merge branch 'master' into xwidget_mvp
Date: Sat, 14 Mar 2015 17:14:40 +0000

branch: xwidget_mvp
commit 816997258fa43ff4a6f4858d5128d6d772a0883b
Merge: c7a4c30 85f1a56
Author: Joakim Verona <address@hidden>
Commit: Joakim Verona <address@hidden>

    Merge branch 'master' into xwidget_mvp
---
 ChangeLog                             |    2 +-
 etc/NEWS                              |    2 +
 lisp/ChangeLog                        |   73 ++++++++++++++++++++----
 lisp/ChangeLog.16                     |    4 +-
 lisp/gnus/ChangeLog                   |   19 ++++++
 lisp/gnus/gnus-registry.el            |   39 ++++++-------
 lisp/gnus/message.el                  |    2 +-
 lisp/gnus/registry.el                 |    9 ++-
 lisp/ido.el                           |   10 +++-
 lisp/info-look.el                     |   47 +++++++++------
 lisp/international/fontset.el         |    1 +
 lisp/international/quail.el           |    7 +--
 lisp/progmodes/js.el                  |   73 +++++++++++++++++++++++
 lisp/simple.el                        |   41 ++++++++++++--
 src/ChangeLog                         |   21 +++++++-
 src/editfns.c                         |    2 +-
 src/frame.c                           |    2 +-
 src/systime.h                         |    2 -
 src/w32font.c                         |  102 ++++++++++++++++++++++++++++-----
 test/ChangeLog                        |   20 +++++++
 test/indent/js-indent-init-dynamic.js |   30 ++++++++++
 test/indent/js-indent-init-t.js       |   21 +++++++
 test/indent/js.js                     |    7 ++-
 23 files changed, 445 insertions(+), 91 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5e5c922..4f6523e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -394,7 +394,7 @@
 
 2014-11-25  Glenn Morris  <address@hidden>
 
-       * configure.ac: Fix yesterday's use of uninitialised $version.
+       * configure.ac: Fix yesterday's use of uninitialized $version.
 
 2014-11-25  Oscar Fuentes  <address@hidden>
 
diff --git a/etc/NEWS b/etc/NEWS
index ad8b6f2..75d55de 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -389,6 +389,8 @@ The remainder were:
 
 ** New ERT function `ert-summarize-tests-batch-and-exit'.
 
+** New js.el option `js-indent-first-init'.
+
 ---
 ** `Info-fontify-maximum-menu-size' can be t for no limit.
 
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c25f4ef..d393190 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,54 @@
+2015-03-13  Kevin Ryde  <address@hidden>
+
+       info-look fixes for Texinfo 5
+       * info-look.el (c-mode, bison-mode, makefile-mode)
+       (makefile-automake-mode, texinfo-mode, autoconf-mode, awk-mode)
+       (latex-mode, emacs-lisp-mode, sh-mode, cfengine-mode): Match
+       `foo' and 'foo' and ‘foo’ for @item and similar.
+       (latex-mode): Match multi-arg \frac{num}{den} or \sqrt[root]{n} in
+       suffix regexp.
+
+2015-03-12  Juri Linkov  <address@hidden>
+
+       * simple.el (next-line-or-history-element)
+       (previous-line-or-history-element): Remember the goal column of
+       possibly multi-line input, and restore it afterwards.  (Bug#19824)
+
+2015-03-12  Rasmus Pank Roulund  <address@hidden>
+
+       * ido.el (ido-add-virtual-buffers-to-list): Include bookmark-alist
+       files (bug#19335).
+
+2015-03-12  Eli Zaretskii  <address@hidden>
+
+       * international/fontset.el (script-representative-chars): Add a
+       representative character for 'vai'.
+
+2015-03-11  Stefan Monnier  <address@hidden>
+
+       * international/quail.el (quail-input-method):
+       Use with-silent-modifications.
+
+       * simple.el (goto-history-element): Don't burp on t history.
+
+2015-03-10  Paul Eggert  <address@hidden>
+
+       Prefer "initialize" to "initialise"
+       * progmodes/js.el (js-indent-first-init):
+       Rename from js-indent-first-initialiser, to avoid worrying about
+       American vs British spelling.  All uses changed.
+
+2015-03-10  Glenn Morris  <address@hidden>
+
+       * progmodes/js.el (js-indent-first-initialiser):
+       Fix doc, type, version.
+
+2015-03-10  Jackson Ray Hamilton  <address@hidden>
+
+       * progmodes/js.el (js-indent-first-initialiser): New option.
+       (js--maybe-goto-declaration-keyword-end): New function.
+       (js--proper-indentation): Use js--maybe-goto-declaration-keyword-end.
+
 2015-03-10  Thomas Fitzsimmons  <address@hidden>
 
        * net/ldap.el (ldap-attribute-syntaxes-alist): Add LDAP attributes
@@ -28,14 +79,14 @@
 
 2015-03-08  Dmitry Gutov  <address@hidden>
 
-       * progmodes/ruby-mode.el (ruby-font-lock-keywords): Use
-       `font-lock-constant-face' for nil, true and false.  Highlight
-       `self' as a keyword.  (Bug#17733)
+       * progmodes/ruby-mode.el (ruby-font-lock-keywords):
+       Use `font-lock-constant-face' for nil, true and false.
+       Highlight `self' as a keyword.  (Bug#17733)
 
 2015-03-08  Nobuyoshi Nakada  <address@hidden>
 
-       * progmodes/ruby-mode.el (ruby-syntax-before-regexp-re): Expect
-       beginning of regexp also after open brace or vertical bar.
+       * progmodes/ruby-mode.el (ruby-syntax-before-regexp-re):
+       Expect beginning of regexp also after open brace or vertical bar.
        (Bug#20026)
 
 2015-03-07  Stefan Monnier  <address@hidden>
@@ -259,8 +310,8 @@
 2015-03-03  Agustín Martín Domingo  <address@hidden>
 
        Improve string search in `flyspell-word-search-*`. (Bug#16800)
-       * textmodes/flyspell.el (flyspell-duplicate-distance): Limit
-       default search distance for duplicated words to 40000.
+       * textmodes/flyspell.el (flyspell-duplicate-distance):
+       Limit default search distance for duplicated words to 40000.
        (flyspell-word-search-backward, flyspell-word-search-forward):
        Search as full word with defined casechars, not as substring.
 
@@ -4540,7 +4591,7 @@
        (tildify-foreach-region-function): New variable specifying
        a function determining portions of buffer that should be
        tildified.  It allows major modes to create a filtering function
-       more elaborate than a set of regular expressions.  Initialised to
+       more elaborate than a set of regular expressions.  Initialized to
        `tildify--deprecated-ignore-evironments' by default to handle now
        deprecated `tildify-ignored-environments-alist' variable.
        (tildify--foreach-region): A new function that takes
@@ -9004,7 +9055,7 @@
        file-format 2 --- ie. no local printers --- and 3 --- i.e. may have
        local printers.
        (ses-localvars): Add local variables needed for local printer handling.
-       (ses-set-localvars): Handle hashmap initialisation.
+       (ses-set-localvars): Handle hashmap initialization.
        (ses-paramlines-plist): Add param-line for number of local printers.
        (ses-paramfmt-plist): New defconst, needed for code factorization
        between functions `ses-set-parameter' and
@@ -12264,7 +12315,7 @@
        * progmodes/cc-mode.el (c-initialize-cc-mode): Add CC Mode hooks
        to electric-indent-{,local-}-mode.
        (c-basic-common-init): Set electric-indent-inhibit.
-       Initialise c-electric-flag from electric-indent-mode.
+       Initialize c-electric-flag from electric-indent-mode.
        (c-electric-indent-mode-hook, c-electric-indent-local-mode-hook):
        New hook functions which propagate electric-indent-mode to CC mode.
 
@@ -24201,7 +24252,7 @@
 
 2013-04-30  Alan Mackenzie  <address@hidden>
 
-       Handle arbitrarily long C++ member initialisation lists.
+       Handle arbitrarily long C++ member initialization lists.
        * progmodes/cc-engine.el (c-back-over-member-initializers):
        new function.
        (c-guess-basic-syntax): New CASE 5R (extracted from 5B) to handle
diff --git a/lisp/ChangeLog.16 b/lisp/ChangeLog.16
index 14ee914..bf8a973 100644
--- a/lisp/ChangeLog.16
+++ b/lisp/ChangeLog.16
@@ -6751,7 +6751,7 @@
 2012-09-09  Alan Mackenzie  <address@hidden>
 
        * progmodes/cc-engine.el (c-state-cache-init):
-       Initialise c-state-semi-nonlit-pos-cache\(-limit\)? properly.
+       Initialize c-state-semi-nonlit-pos-cache\(-limit\)? properly.
        (c-record-parse-state-state):
        Record c-state-semi-nonlit-pos-cache\(-limit\)?.
 
@@ -15662,7 +15662,7 @@
        (c-nonlabel-token-key): Allow string literals for AWK.
        Refactor for the other modes.
 
-       Large brace-block initialisation makes CC Mode slow: Fix.
+       Large brace-block initialization makes CC Mode slow: Fix.
        Tidy up and accelerate c-in-literal, etc. by using the c-parse-state
        routines.  Limit backward searching in c-font-lock-enclosing.decl.
 
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 763267c..64124bc 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,22 @@
+2015-03-11  Stefan Monnier  <address@hidden>
+
+       * gnus-registry.el (gnus-registry-handle-action)
+       (gnus-registry-post-process-groups): Don't add-to-list on a local var.
+       (gnus-registry-keywords): Make it do something.
+       (gnus-registry-import-eld): Remove unused var `new-entry'.
+       (gnus-registry-action): Remove unused var `to-name'.
+       (gnus-registry-make-db): Prefer `make-instance' to avoid
+       compiler warnings.
+       (gnus-registry-load, gnus-registry-fixup-registry): Avoid `oset'.
+
+       * registry.el (registry-db): Don't oset-default an instance-allocated
+       slot.
+
+2015-03-10  Glenn Morris  <address@hidden>
+
+       * message.el (message-valid-fqdn-regexp): Bump :version for
+       2014-11-17 change.
+
 2015-03-08  Rasmus Pank Roulund  <address@hidden>
 
        * gnus-notifications.el (gnus-notifications-action): Raise window
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index ac903a2..1d5887d 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -277,16 +277,16 @@ This can slow pruning down.  Set to nil to perform no 
sorting."
 (defun gnus-registry-fixup-registry (db)
   (when db
     (let ((old (oref db tracked)))
-      (oset db precious
+      (setf (oref db precious)
             (append gnus-registry-extra-entries-precious
                     '()))
-      (oset db max-size
+      (setf (oref db max-size)
             (or gnus-registry-max-entries
                 most-positive-fixnum))
-      (oset db prune-factor
+      (setf (oref db prune-factor)
             (or gnus-registry-prune-factor
                0.1))
-      (oset db tracked
+      (setf (oref db tracked)
             (append gnus-registry-track-extra
                     '(mark group keyword)))
       (when (not (equal old (oref db tracked)))
@@ -297,14 +297,13 @@ This can slow pruning down.  Set to nil to perform no 
sorting."
 (defun gnus-registry-make-db (&optional file)
   (interactive "fGnus registry persistence file: \n")
   (gnus-registry-fixup-registry
-   (registry-db
-    "Gnus Registry"
-    :file (or file gnus-registry-cache-file)
-    ;; these parameters are set in `gnus-registry-fixup-registry'
-    :max-size most-positive-fixnum
-    :version registry-db-version
-    :precious nil
-    :tracked nil)))
+   (make-instance 'registry-db
+                  :file (or file gnus-registry-cache-file)
+                  ;; these parameters are set in `gnus-registry-fixup-registry'
+                  :max-size most-positive-fixnum
+                  :version registry-db-version
+                  :precious nil
+                  :tracked nil)))
 
 (defvar gnus-registry-db (gnus-registry-make-db)
   "The article registry by Message ID.  See `registry-db'.")
@@ -336,7 +335,7 @@ This is not required after changing 
`gnus-registry-cache-file'."
                           old-file-name file)))
             (progn
               (gnus-registry-read old-file-name)
-              (oset gnus-registry-db :file file)
+              (setf (oref gnus-registry-db :file) file)
               (gnus-message 1 "Registry filename changed to %s" file))
           (gnus-registry-remake-db t))))
       (error
@@ -398,8 +397,7 @@ This is not required after changing 
`gnus-registry-cache-file'."
          (sender (nth 0 (gnus-registry-extract-addresses
                          (mail-header-from data-header))))
          (from (gnus-group-guess-full-name-from-command-method from))
-         (to (if to (gnus-group-guess-full-name-from-command-method to) nil))
-         (to-name (if to to "the Bit Bucket")))
+         (to (if to (gnus-group-guess-full-name-from-command-method to) nil)))
     (gnus-message 7 "Gnus registry: article %s %s from %s to %s"
                   id (if method "respooling" "going") from to)
 
@@ -455,7 +453,8 @@ This is not required after changing 
`gnus-registry-cache-file'."
         (let ((new (or (assq (first kv) entry)
                        (list (first kv)))))
           (dolist (toadd (cdr kv))
-            (add-to-list 'new toadd t))
+            (unless (member toadd new)
+              (setq new (append new (list toadd)))))
           (setq entry (cons new
                             (assq-delete-all (first kv) entry))))))
     (gnus-message 10 "Gnus registry: new entry for %s is %S"
@@ -699,7 +698,7 @@ possible.  Uses `gnus-registry-split-strategy'."
                  10
                  "%s: stripped group %s to %s"
                  log-agent group short-name))
-              (add-to-list 'out short-name))
+              (pushnew short-name out :test #'equal))
           ;; else...
           (gnus-message
            7
@@ -785,8 +784,9 @@ Overrides existing keywords with FORCE set non-nil."
           (gnus-registry-set-id-key id 'keyword words)))))
 
 (defun gnus-registry-keywords ()
-  (let ((table (registry-lookup-secondary gnus-registry-db 'keyword)))
-    (when table (maphash (lambda (k v) k) table))))
+  (let ((table (registry-lookup-secondary gnus-registry-db 'keyword))
+        (ks ()))
+    (when table (maphash (lambda (k _v) (push k ks)) table) ks)))
 
 (defun gnus-registry-find-keywords (keyword)
   (interactive (list
@@ -1104,7 +1104,6 @@ only the last one's marks are returned."
         (setq entry (car-safe old)
               old (cdr-safe old))
         (let* ((id (car-safe entry))
-               (new-entry (gnus-registry-get-or-make-entry id))
                (rest (cdr-safe entry))
                (groups (loop for p in rest
                              when (stringp p)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 112f0ba..04145de 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -1969,7 +1969,7 @@ You must have the \"hashcash\" binary installed, see 
`hashcash-path'."
   ;; "dead" nato bitnet uucp
   "Regular expression that matches a valid FQDN."
   ;; see also: gnus-button-valid-fqdn-regexp
-  :version "22.1"
+  :version "25.1"
   :group 'message-headers
   :type 'regexp)
 
diff --git a/lisp/gnus/registry.el b/lisp/gnus/registry.el
index 881eb9f..1c83b93 100644
--- a/lisp/gnus/registry.el
+++ b/lisp/gnus/registry.el
@@ -98,7 +98,12 @@
             :type (or null float)
             :documentation "The registry version.")
    (max-size :initarg :max-size
-             ;; :initform most-positive-fixnum ;; see below
+            ;; EIEIO's :initform is not 100% compatible with CLOS in
+            ;; that if the form is an atom, it assumes it's constant
+            ;; value rather than an expression, so in order to get the value
+            ;; of `most-positive-fixnum', we need to use an
+            ;; expression that's not just a symbol.
+             :initform (symbol-value 'most-positive-fixnum)
              :type integer
              :custom integer
              :documentation "The maximum number of registry entries.")
@@ -123,8 +128,6 @@
    (data :initarg :data
          :type hash-table
          :documentation "The data hashtable.")))
-;; Do this separately, since defclass doesn't allow expressions in :initform.
-(oset-default 'registry-db max-size most-positive-fixnum)
 
 (defmethod initialize-instance :BEFORE ((this registry-db) slots)
   "Check whether a registry object needs to be upgraded."
diff --git a/lisp/ido.el b/lisp/ido.el
index 1f4e3fa..563f406 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -3480,8 +3480,14 @@ This is to make them appear as if they were \"virtual 
buffers\"."
   ;; the file which the user might thought was still open.
   (unless recentf-mode (recentf-mode 1))
   (setq ido-virtual-buffers nil)
-  (let (name)
-    (dolist (head recentf-list)
+  (let ((bookmarks (and (boundp 'bookmark-alist)
+                        bookmark-alist))
+        name)
+    (dolist (head (append
+                   recentf-list
+                   (delq nil (mapcar (lambda (bookmark)
+                                       (cdr (assoc 'filename bookmark)))
+                                     bookmarks))))
       (setq name (file-name-nondirectory head))
       ;; In case HEAD is a directory with trailing /.  See bug#14552.
       (when (equal name "")
diff --git a/lisp/info-look.el b/lisp/info-look.el
index 1baea46..9cf185e 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -35,6 +35,11 @@
 ;;  (or CTAN mirrors)
 ;; Perl: <URL:ftp://ftp.cpan.org/pub/CPAN/doc/manual/texinfo/> (or CPAN 
mirrors)
 
+;; Traditionally, makeinfo quoted `like this', but version 5 and later
+;; quotes 'like this' or ‘like this’.  Doc specs with patterns
+;; therefore match open and close quotes with ['`‘] and ['’],
+;; respectively.
+
 ;;; Code:
 
 (require 'info)
@@ -716,12 +721,12 @@ Return nil if there is nothing appropriate in the buffer 
near point."
              ;; suffix "\\>" is not used because that sends DBL_MAX to
              ;; DBL_MAX_EXP ("_" is a non-word char)
             ("(libc)Variable Index" nil
-              "^\\([ \t]+-+ \\(Variable\\|Macro\\): .*\\<\\|`\\)"
-              "\\( \\|'?$\\)")
+              "^\\([ \t]+-+ \\(Variable\\|Macro\\): .*\\<\\|['`‘]\\)"
+              "\\( \\|['’]?$\\)")
             ("(libc)Type Index" nil
              "^[ \t]+-+ Data Type: \\<" "\\>")
             ("(termcap)Var Index" nil
-             "^[ \t]*`" "'"))
+             "^[ \t]*['`‘]" "['’]"))
  :parse-rule 'info-lookup-guess-c-symbol)
 
 (info-lookup-maybe-add-help
@@ -733,7 +738,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
  :mode 'bison-mode
  :regexp "[:;|]\\|%\\([%{}]\\|[_a-z]+\\)\\|YY[_A-Z]+\\|yy[_a-z]+"
  :doc-spec '(("(bison)Index" nil
-             "`" "'"))
+             "['`‘]" "['’]"))
  :parse-rule "[:;|]\\|%\\([%{}]\\|[_a-zA-Z][_a-zA-Z0-9]*\\)"
  :other-modes '(c-mode))
 
@@ -741,7 +746,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
  :mode 'makefile-mode
  :regexp "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z][_a-zA-Z0-9-]*"
  :doc-spec '(("(make)Name Index" nil
-             "^[ \t]*`" "'"))
+             "^[ \t]*['`‘]" "['’]"))
  :parse-rule "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+")
 
 (info-lookup-maybe-add-help
@@ -756,15 +761,16 @@ Return nil if there is nothing appropriate in the buffer 
near point."
  :doc-spec   '(
                ;; "(automake)Macro Index" is autoconf macros used in
                ;; configure.ac, not Makefile.am, so don't have that here.
-               ("(automake)Variable Index" nil "^[ \t]*`" "'")
+               ("(automake)Variable Index" nil "^[ \t]*['`‘]" "['’]")
                ;; In automake 1.4 macros and variables were a combined node.
-               ("(automake)Macro and Variable Index" nil "^[ \t]*`" "'")
+               ("(automake)Macro and Variable Index" nil "^[ \t]*['`‘]"
+               "['’]")
                ;; Directives like "if" are in the "General Index".
                ;; Prefix "`" since the text for say `+=' isn't always an
                ;; @item etc and so not always at the start of a line.
-               ("(automake)General Index" nil "`" "'")
+               ("(automake)General Index" nil "['`‘]" "['’]")
                ;; In automake 1.3 there was just a single "Index" node.
-               ("(automake)Index" nil "`" "'"))
+               ("(automake)Index" nil "['`‘]" "['’]"))
  :other-modes '(makefile-mode))
 
 (info-lookup-maybe-add-help
@@ -775,7 +781,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
              (lambda (item)
                (if (string-match "^\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\( .*\\)?$" 
item)
                    (concat "@" (match-string 1 item))))
-             "`" "[' ]")))
+             "['`‘]" "['’ ]")))
 
 (info-lookup-maybe-add-help
  :mode 'm4-mode
@@ -821,7 +827,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
             ;; macros (eg. AC_PROG_CC).  Ensure this is after the autoconf
             ;; index, so as to prefer the autoconf docs.
             ("(automake)Macro and Variable Index" nil
-             "^[ \t]*`" "'"))
+             "^[ \t]*['`‘]" "['’]"))
  ;; Autoconf symbols are M4 macros.  Thus use M4's parser.
  :parse-rule 'ignore
  :other-modes '(m4-mode))
@@ -846,7 +852,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
                   ;; Built-in functions (matches to many entries).
                   ((string-match "^[a-z]+$" item)
                    item))))
-             "`" "\\([ \t]*([^)]*)\\)?'")))
+             "['`‘]" "\\([ \t]*([^)]*)\\)?['’]")))
 
 (info-lookup-maybe-add-help
  :mode 'perl-mode
@@ -885,16 +891,19 @@ Return nil if there is nothing appropriate in the buffer 
near point."
                   ;; From http://home.gna.org/latexrefman
                   "(latex2e)Command Index"
                 "(latex)Command Index")
-             nil "`" "\\({[^}]*}\\)?'")))
+             ;; \frac{NUM}{DEN} etc can have more than one {xx} argument.
+             ;; \sqrt[ROOT]{num} and others can have square brackets.
+             nil "[`'‘]" "\\({[^}]*}|\\[[^]]*\\]\\)*['’]")))
+
 
 (info-lookup-maybe-add-help
  :mode 'emacs-lisp-mode
  :regexp "[^][()`',\" \t\n]+"
  :doc-spec '(;; Commands with key sequences appear in nodes as `foo' and
              ;; those without as `M-x foo'.
-             ("(emacs)Command Index"  nil "`\\(M-x[ \t\n]+\\)?" "'")
+             ("(emacs)Command Index"  nil "['`‘]\\(M-x[ \t\n]+\\)?" "['’]")
              ;; Variables normally appear in nodes as just `foo'.
-             ("(emacs)Variable Index" nil "`" "'")
+             ("(emacs)Variable Index" nil "['`‘]" "['’]")
              ;; Almost all functions, variables, etc appear in nodes as
              ;; " -- Function: foo" etc.  A small number of aliases and
              ;; symbols appear only as `foo', and will miss out on exact
@@ -976,9 +985,9 @@ Return nil if there is nothing appropriate in the buffer 
near point."
  ;; bash has "." and ":" in its index, but those chars will probably never
  ;; work in info, so don't bother matching them in the regexp.
  :regexp "\\([a-zA-Z0-9_-]+\\|address@hidden|\\[\\[?\\|]]?\\)"
- :doc-spec '(("(bash)Builtin Index"       nil "^`" "[ .']")
-             ("(bash)Reserved Word Index" nil "^`" "[ .']")
-             ("(bash)Variable Index"      nil "^`" "[ .']")
+ :doc-spec '(("(bash)Builtin Index"       nil "^['`‘]" "[ .'’]")
+             ("(bash)Reserved Word Index" nil "^['`‘]" "[ .'’]")
+             ("(bash)Variable Index"      nil "^['`‘]" "[ .'’]")
 
              ;; coreutils (version 4.5.10) doesn't have a separate program
              ;; index, so exclude extraneous stuff (most of it) by demanding
@@ -1026,7 +1035,7 @@ Return nil if there is nothing appropriate in the buffer 
near point."
                  item))
              ;; This gets functions in evaluated classes.  Other
              ;; possible patterns don't seem to work too well.
-             "`" "(")))
+             "['`‘]" "(")))
 
 (info-lookup-maybe-add-help
  :mode 'Custom-mode
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index 8eb1c0d..06a47af 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -153,6 +153,7 @@
        (cyrillic #x42F)
        (armenian #x531)
        (hebrew #x5D0)
+       (vai #xA500)
        (arabic #x628)
        (syriac #x710)
        (thaana #x78C)
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index 2755fd6..5e422bf 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -202,7 +202,7 @@ It is an alist of translations and corresponding keys."
 See also the documentation of `quail-define-package'."
   (nth 11 quail-current-package))
 (defsubst quail-overlay-plist ()
-  "Return property list of an overly used in the current Quail package."
+  "Return property list of an overlay used in the current Quail package."
   (nth 12 quail-current-package))
 (defsubst quail-update-translation-function ()
   "Return a function for updating translation in the current Quail package."
@@ -1335,9 +1335,7 @@ If STR has `advice' text property, append the following 
special event:
          overriding-local-map)
       (list key)
     (quail-setup-overlays (quail-conversion-keymap))
-    (let ((modified-p (buffer-modified-p))
-         (buffer-undo-list t)
-         (inhibit-modification-hooks t))
+    (with-silent-modifications
       (unwind-protect
          (let ((input-string (if (quail-conversion-keymap)
                                  (quail-start-conversion key)
@@ -1349,7 +1347,6 @@ If STR has `advice' text property, append the following 
special event:
                  (list (aref input-string 0))
                (quail-input-string-to-events input-string))))
        (quail-delete-overlays)
-       (set-buffer-modified-p modified-p)
        ;; Run this hook only when the current input method doesn't require
        ;; conversion.  When conversion is required, the conversion function
        ;; should run this hook at a proper timing.
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index d7712e4..ff00298 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -509,6 +509,48 @@ getting timeout messages."
   :type 'integer
   :group 'js)
 
+(defcustom js-indent-first-init nil
+  "Non-nil means specially indent the first variable declaration's initializer.
+Normally, the first declaration's initializer is unindented, and
+subsequent declarations have their identifiers aligned with it:
+
+  var o = {
+      foo: 3
+  };
+
+  var o = {
+      foo: 3
+  },
+      bar = 2;
+
+If this option has the value t, indent the first declaration's
+initializer by an additional level:
+
+  var o = {
+          foo: 3
+      };
+
+  var o = {
+          foo: 3
+      },
+      bar = 2;
+
+If this option has the value `dynamic', if there is only one declaration,
+don't indent the first one's initializer; otherwise, indent it.
+
+  var o = {
+      foo: 3
+  };
+
+  var o = {
+          foo: 3
+      },
+      bar = 2;"
+  :version "25.1"
+  :type '(choice (const nil) (const t) (const dynamic))
+  :safe 'symbolp
+  :group 'js)
+
 ;;; KeyMap
 
 (defvar js-mode-map
@@ -1858,6 +1900,36 @@ In particular, return the buffer position of the first 
`for' kwd."
       (goto-char for-kwd)
       (current-column))))
 
+(defun js--maybe-goto-declaration-keyword-end (parse-status)
+  "Helper function for `js--proper-indentation'.
+Depending on the value of `js-indent-first-init', move
+point to the end of a variable declaration keyword so that
+indentation is aligned to that column."
+  (cond
+   ((eq js-indent-first-init t)
+    (when (looking-at js--declaration-keyword-re)
+      (goto-char (1+ (match-end 0)))))
+   ((eq js-indent-first-init 'dynamic)
+    (let ((bracket (nth 1 parse-status))
+          declaration-keyword-end
+          at-closing-bracket-p
+          comma-p)
+      (when (looking-at js--declaration-keyword-re)
+        (setq declaration-keyword-end (match-end 0))
+        (save-excursion
+          (goto-char bracket)
+          (setq at-closing-bracket-p
+                (condition-case nil
+                    (progn
+                      (forward-sexp)
+                      t)
+                  (error nil)))
+          (when at-closing-bracket-p
+            (while (forward-comment 1))
+            (setq comma-p (looking-at-p ","))))
+        (when comma-p
+          (goto-char (1+ declaration-keyword-end))))))))
+
 (defun js--proper-indentation (parse-status)
   "Return the proper indentation for the current line."
   (save-excursion
@@ -1891,6 +1963,7 @@ In particular, return the buffer position of the first 
`for' kwd."
                    (skip-syntax-backward " ")
                    (when (eq (char-before) ?\)) (backward-list))
                    (back-to-indentation)
+                   (js--maybe-goto-declaration-keyword-end parse-status)
                    (let* ((in-switch-p (unless same-indent-p
                                          (looking-at "\\_<switch\\_>")))
                           (same-indent-p (or same-indent-p
diff --git a/lisp/simple.el b/lisp/simple.el
index 1e64f99..98188a0 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1940,7 +1940,9 @@ The argument NABS specifies the absolute history 
position."
        (user-error (if minibuffer-default
                         "End of defaults; no next item"
                       "End of history; no default available")))
-    (if (> nabs (length (symbol-value minibuffer-history-variable)))
+    (if (> nabs (if (listp (symbol-value minibuffer-history-variable))
+                    (length (symbol-value minibuffer-history-variable))
+                  0))
        (user-error "Beginning of history; no preceding item"))
     (unless (memq last-command '(next-history-element
                                 previous-history-element))
@@ -1990,7 +1992,14 @@ When point moves over the bottom line of multi-line 
minibuffer, puts ARGth
 next element of the minibuffer history in the minibuffer."
   (interactive "^p")
   (or arg (setq arg 1))
-  (let ((old-point (point)))
+  (let* ((old-point (point))
+        ;; Remember the original goal column of possibly multi-line input
+        ;; excluding the length of the prompt on the first line.
+        (prompt-end (minibuffer-prompt-end))
+        (old-column (unless (and (eolp) (> (point) prompt-end))
+                      (if (= (line-number-at-pos) 1)
+                          (max (- (current-column) (1- prompt-end)) 0)
+                        (current-column)))))
     (condition-case nil
        (with-no-warnings
          (next-line arg))
@@ -1998,7 +2007,14 @@ next element of the minibuffer history in the 
minibuffer."
        ;; Restore old position since `line-move-visual' moves point to
        ;; the end of the line when it fails to go to the next line.
        (goto-char old-point)
-       (next-history-element arg)))))
+       (next-history-element arg)
+       ;; Restore the original goal column on the last line
+       ;; of possibly multi-line input.
+       (goto-char (point-max))
+       (when old-column
+        (if (= (line-number-at-pos) 1)
+            (move-to-column (+ old-column (1- (minibuffer-prompt-end))))
+          (move-to-column old-column)))))))
 
 (defun previous-line-or-history-element (&optional arg)
   "Move cursor vertically up ARG lines, or to the previous history element.
@@ -2006,7 +2022,14 @@ When point moves over the top line of multi-line 
minibuffer, puts ARGth
 previous element of the minibuffer history in the minibuffer."
   (interactive "^p")
   (or arg (setq arg 1))
-  (let ((old-point (point)))
+  (let* ((old-point (point))
+        ;; Remember the original goal column of possibly multi-line input
+        ;; excluding the length of the prompt on the first line.
+        (prompt-end (minibuffer-prompt-end))
+        (old-column (unless (and (eolp) (> (point) prompt-end))
+                      (if (= (line-number-at-pos) 1)
+                          (max (- (current-column) (1- prompt-end)) 0)
+                        (current-column)))))
     (condition-case nil
        (with-no-warnings
          (previous-line arg))
@@ -2014,7 +2037,15 @@ previous element of the minibuffer history in the 
minibuffer."
        ;; Restore old position since `line-move-visual' moves point to
        ;; the beginning of the line when it fails to go to the previous line.
        (goto-char old-point)
-       (previous-history-element arg)))))
+       (previous-history-element arg)
+       ;; Restore the original goal column on the first line
+       ;; of possibly multi-line input.
+       (goto-char (minibuffer-prompt-end))
+       (if old-column
+          (if (= (line-number-at-pos) 1)
+              (move-to-column (+ old-column (1- (minibuffer-prompt-end))))
+            (move-to-column old-column))
+        (goto-char (line-end-position)))))))
 
 (defun next-complete-history-element (n)
   "Get next history element which completes the minibuffer before the point.
diff --git a/src/ChangeLog b/src/ChangeLog
index fc77618..d9612db 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,21 @@
+2015-03-13  Paul Eggert  <address@hidden>
+
+       * frame.c (x_get_resource_string) [!USE_GTK]: Don't define.
+
+       * editfns.c, systime.h (mktime_z) [!HAVE_TZALLOC]: Now static.
+
+2015-03-12  Eli Zaretskii  <address@hidden>
+
+       * w32font.c (font_supported_scripts): Add subranges for Latin
+       Supplement, Latin Extended-A/B, Vai, Supplemental Punctuation, Tai
+       Le, Buginese, Yijing Hexagrams, Ancient Greek Numbers, Tai Xuan
+       Jing, Counting Rods, Sundanese, Lepcha, Ol Chiki, Saurashtra,
+       Kayah Li, Rejang, Ancient Symbols, Phistos Disc, Carian, Lycian,
+       Lydian, Dominoe Tiles, and Mahjong Tiles.  Break the Mathematical
+       Alphanumeric Symbols into several "scripts" like fontset.el does.
+       (Bug#19993)
+       (syms_of_w32font): DEFSYM all the new script symbols.
+
 2015-03-07  Eli Zaretskii  <address@hidden>
 
        * w32fns.c <ImmReleaseContext_Proc, ImmSetCompositionWindow_Proc>:
@@ -1431,7 +1449,8 @@
 2015-01-06  Jan Djärv  <address@hidden>
 
        * nsterm.m (x_set_window_size): Call updateFrameSize to get real
-       size instead of using widht/height.  The frame may be constrained.
+       size instead of using widht/height.  The frame may be
+       constrained (Bug#19482).
 
 2015-01-05  Paul Eggert  <address@hidden>
 
diff --git a/src/editfns.c b/src/editfns.c
index dbcb316..7c146f1 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1411,7 +1411,7 @@ check_time_validity (int validity)
 /* A substitute for mktime_z on platforms that lack it.  It's not
    thread-safe, but should be good enough for Emacs in typical use.  */
 #ifndef HAVE_TZALLOC
-time_t
+static time_t
 mktime_z (timezone_t tz, struct tm *tm)
 {
   char *oldtz = getenv ("TZ");
diff --git a/src/frame.c b/src/frame.c
index aa07219..2208655 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -4188,7 +4188,7 @@ display_x_get_resource (Display_Info *dpyinfo, 
Lisp_Object attribute,
                            attribute, class, component, subclass);
 }
 
-#if defined HAVE_X_WINDOWS && !defined USE_X_TOOLKIT
+#if defined HAVE_X_WINDOWS && !defined USE_X_TOOLKIT && !defined USE_GTK
 /* Used when C code wants a resource value.  */
 /* Called from oldXMenu/Create.c.  */
 char *
diff --git a/src/systime.h b/src/systime.h
index 4787c51..744af17 100644
--- a/src/systime.h
+++ b/src/systime.h
@@ -118,8 +118,6 @@ extern struct timespec lisp_time_argument (Lisp_Object);
 typedef char const *timezone_t;
 INLINE timezone_t tzalloc (char const *name) { return name; }
 INLINE void tzfree (timezone_t tz) { }
-/* Defined in editfns.c.  */
-extern time_t mktime_z (timezone_t, struct tm *);
 #endif
 
 INLINE_HEADER_END
diff --git a/src/w32font.c b/src/w32font.c
index 422f082..7799459 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -2127,9 +2127,18 @@ font_supported_scripts (FONTSIGNATURE * sig)
     supported = Fcons ((sym), supported)
 
   SUBRANGE (0, Qlatin);
-  /* The following count as latin too, ASCII should be present in these fonts,
-     so don't need to mark them separately.  */
   /* 1: Latin-1 supplement, 2: Latin Extended A, 3: Latin Extended B.  */
+  /* Most fonts that support Latin will have good coverage of the
+     Extended blocks, so in practice marking them below is not really
+     needed, or useful: if a font claims support for, say, Latin
+     Extended-B, but does not contain glyphs for some of the
+     characters in the range, the user will have to augment her
+     fontset to display those few characters.  But we mark these
+     subranges here anyway, for the marginal use cases where they
+     might make a difference.  */
+  SUBRANGE (1, Qlatin);
+  SUBRANGE (2, Qlatin);
+  SUBRANGE (3, Qlatin);
   SUBRANGE (4, Qphonetic);
   /* 5: Spacing and tone modifiers, 6: Combining Diacritical Marks.  */
   SUBRANGE (7, Qgreek);
@@ -2137,7 +2146,12 @@ font_supported_scripts (FONTSIGNATURE * sig)
   SUBRANGE (9, Qcyrillic);
   SUBRANGE (10, Qarmenian);
   SUBRANGE (11, Qhebrew);
-  /* 12: Vai.  */
+  /* Bit 12 is rather useless if the user has Hebrew fonts installed,
+     because apparently at some point in the past bit 12 was "Hebrew
+     Extended", and many Hebrew fonts still have this bit set.  The
+     only workaround is to customize fontsets to use fonts like Ebrima
+     or Quivira.  */
+  SUBRANGE (12, Qvai);
   SUBRANGE (13, Qarabic);
   SUBRANGE (14, Qnko);
   SUBRANGE (15, Qdevanagari);
@@ -2153,8 +2167,11 @@ font_supported_scripts (FONTSIGNATURE * sig)
   SUBRANGE (25, Qlao);
   SUBRANGE (26, Qgeorgian);
   SUBRANGE (27, Qbalinese);
-  /* 28: Hangul Jamo.  */
-  /* 29: Latin Extended, 30: Greek Extended, 31: Punctuation.  */
+  /* 28: Hangul Jamo -- covered by the default fontset.  */
+  /* 29: Latin Extended, 30: Greek Extended -- covered above.  */
+  /* 31: Supplemental Punctuation -- most probably be masked by
+     Courier New, so fontset customization is needed.  */
+  SUBRANGE (31, Qsymbol);
   /* 32-47: Symbols (defined below).  */
   SUBRANGE (48, Qcjk_misc);
   /* Match either 49: katakana or 50: hiragana for kana.  */
@@ -2169,6 +2186,9 @@ font_supported_scripts (FONTSIGNATURE * sig)
   SUBRANGE (59, Qhan); /* There are others, but this is the main one.  */
   SUBRANGE (59, Qideographic_description); /* Windows lumps this in.  */
   SUBRANGE (59, Qkanbun); /* And this.  */
+  /* These are covered well either by the default Courier New or by
+     CJK fonts that are set up specially in the default fontset.  So
+     marking them here wouldn't be useful.  */
   /* 60: Private use, 61: CJK strokes and compatibility.  */
   /* 62: Alphabetic Presentation, 63: Arabic Presentation A.  */
   /* 64: Combining half marks, 65: Vertical and CJK compatibility.  */
@@ -2197,31 +2217,54 @@ font_supported_scripts (FONTSIGNATURE * sig)
   SUBRANGE (87, Qdeseret);
   SUBRANGE (88, Qbyzantine_musical_symbol);
   SUBRANGE (88, Qmusical_symbol); /* Windows doesn't distinguish these.  */
-  SUBRANGE (89, Qmathematical);
+  SUBRANGE (89, Qmathematical_bold); /* See fontset.el:setup-default-fontset.  
*/
+  SUBRANGE (89, Qmathematical_italic);
+  SUBRANGE (89, Qmathematical_bold_italic);
+  SUBRANGE (89, Qmathematical_script);
+  SUBRANGE (89, Qmathematical_bold_script);
+  SUBRANGE (89, Qmathematical_fraktur);
+  SUBRANGE (89, Qmathematical_double_struck);
+  SUBRANGE (89, Qmathematical_bold_fraktur);
+  SUBRANGE (89, Qmathematical_sans_serif);
+  SUBRANGE (89, Qmathematical_sans_serif_bold);
+  SUBRANGE (89, Qmathematical_sans_serif_italic);
+  SUBRANGE (89, Qmathematical_sans_serif_bold_italic);
+  SUBRANGE (89, Qmathematical_monospace);
   /* 90: Private use, 91: Variation selectors, 92: Tags.  */
   SUBRANGE (93, Qlimbu);
   SUBRANGE (94, Qtai_le);
-  /* 95: New Tai Le */
-  SUBRANGE (90, Qbuginese);
+  SUBRANGE (95, Qtai_le);
+  SUBRANGE (96, Qbuginese);
   SUBRANGE (97, Qglagolitic);
   SUBRANGE (98, Qtifinagh);
   /* 99: Yijing Hexagrams.  */
+  SUBRANGE (99, Qhan);
   SUBRANGE (100, Qsyloti_nagri);
   SUBRANGE (101, Qlinear_b);
-  /* 102: Ancient Greek Numbers.  */
+  SUBRANGE (102, Qancient_greek_number);
   SUBRANGE (103, Qugaritic);
   SUBRANGE (104, Qold_persian);
   SUBRANGE (105, Qshavian);
   SUBRANGE (106, Qosmanya);
   SUBRANGE (107, Qcypriot);
   SUBRANGE (108, Qkharoshthi);
-  /* 109: Tai Xuan Jing.  */
+  SUBRANGE (109, Qtai_xuan_jing_symbol);
   SUBRANGE (110, Qcuneiform);
-  /* 111: Counting Rods, 112: Sundanese, 113: Lepcha, 114: Ol Chiki.  */
-  /* 115: Saurashtra, 116: Kayah Li, 117: Rejang.  */
+  SUBRANGE (111, Qcounting_rod_numeral);
+  SUBRANGE (112, Qsundanese);
+  SUBRANGE (113, Qlepcha);
+  SUBRANGE (114, Qol_chiki);
+  SUBRANGE (115, Qsaurashtra);
+  SUBRANGE (116, Qkayah_li);
+  SUBRANGE (117, Qrejang);
   SUBRANGE (118, Qcham);
-  /* 119: Ancient symbols, 120: Phaistos Disc.  */
-  /* 121: Carian, Lycian, Lydian, 122: Dominoes, Mahjong tiles.  */
+  SUBRANGE (119, Qancient_symbol);
+  SUBRANGE (120, Qphaistos_disc);
+  SUBRANGE (121, Qlycian);
+  SUBRANGE (121, Qcarian);
+  SUBRANGE (121, Qlydian);
+  SUBRANGE (122, Qdomino_tile);
+  SUBRANGE (122, Qmahjong_tile);
   /* 123-127: Reserved.  */
 
   /* There isn't really a main symbol range, so include symbol if any
@@ -2530,6 +2573,7 @@ syms_of_w32font (void)
   DEFSYM (Qcyrillic, "cyrillic");
   DEFSYM (Qarmenian, "armenian");
   DEFSYM (Qhebrew, "hebrew");
+  DEFSYM (Qvai, "vai");
   DEFSYM (Qarabic, "arabic");
   DEFSYM (Qsyriac, "syriac");
   DEFSYM (Qnko, "nko");
@@ -2567,7 +2611,19 @@ syms_of_w32font (void)
   DEFSYM (Qyi, "yi");
   DEFSYM (Qbyzantine_musical_symbol, "byzantine-musical-symbol");
   DEFSYM (Qmusical_symbol, "musical-symbol");
-  DEFSYM (Qmathematical, "mathematical");
+  DEFSYM (Qmathematical_bold, "mathematical-bold");
+  DEFSYM (Qmathematical_italic, "mathematical-italic");
+  DEFSYM (Qmathematical_bold_italic, "mathematical-bold-italic");
+  DEFSYM (Qmathematical_script, "mathematical-script");
+  DEFSYM (Qmathematical_bold_script, "mathematical-bold-script");
+  DEFSYM (Qmathematical_fraktur, "mathematical-fraktur");
+  DEFSYM (Qmathematical_double_struck, "mathematical-double-struck");
+  DEFSYM (Qmathematical_bold_fraktur, "mathematical-bold-fraktur");
+  DEFSYM (Qmathematical_sans_serif, "mathematical-sans-serif");
+  DEFSYM (Qmathematical_sans_serif_bold, "mathematical-sans-serif-bold");
+  DEFSYM (Qmathematical_sans_serif_italic, "mathematical-sans-serif-italic");
+  DEFSYM (Qmathematical_sans_serif_bold_italic, 
"mathematical-sans-serif-bold-italic");
+  DEFSYM (Qmathematical_monospace, "mathematical-monospace");
   DEFSYM (Qcham, "cham");
   DEFSYM (Qphonetic, "phonetic");
   DEFSYM (Qbalinese, "balinese");
@@ -2594,6 +2650,22 @@ syms_of_w32font (void)
   DEFSYM (Qtai_le, "tai_le");
   DEFSYM (Qtifinagh, "tifinagh");
   DEFSYM (Qugaritic, "ugaritic");
+  DEFSYM (Qlycian, "lycian");
+  DEFSYM (Qcarian, "carian");
+  DEFSYM (Qlydian, "lydian");
+  DEFSYM (Qdomino_tile, "domino-tile");
+  DEFSYM (Qmahjong_tile, "mahjong-tile");
+  DEFSYM (Qtai_xuan_jing_symbol, "tai-xuan-jing-symbol");
+  DEFSYM (Qcounting_rod_numeral, "counting-rod-numeral");
+  DEFSYM (Qancient_symbol, "ancient-symbol");
+  DEFSYM (Qphaistos_disc, "phaistos-disc");
+  DEFSYM (Qancient_greek_number, "ancient-greek-number");
+  DEFSYM (Qsundanese, "sundanese");
+  DEFSYM (Qlepcha, "lepcha");
+  DEFSYM (Qol_chiki, "ol-chiki");
+  DEFSYM (Qsaurashtra, "saurashtra");
+  DEFSYM (Qkayah_li, "kayah-li");
+  DEFSYM (Qrejang, "rejang");
 
   /* W32 font encodings.  */
   DEFVAR_LISP ("w32-charset-info-alist",
diff --git a/test/ChangeLog b/test/ChangeLog
index 03cc281..6a474e1 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,23 @@
+2015-03-10  Jackson Ray Hamilton  <address@hidden>
+
+       * indent/js-indent-init-dynamic.js: Fix spelling error.
+
+2015-03-10  Paul Eggert  <address@hidden>
+
+       Prefer "initialize" to "initialise"
+       * indent/js-indent-init-t.js: Rename from
+       indent/js-indent-first-initialiser-t.js.
+       * indent/js-indent-init-dynamic.js: Rename from
+       test/indent/js-indent-first-initialiser-dynamic.js.
+
+2015-03-10  Jackson Ray Hamilton  <address@hidden>
+
+       * indent/js.js: Add local variables.
+
+       * indent/js-indent-first-initialiser-t.js:
+       * indent/js-indent-first-initialiser-dynamic.js:
+       New tests for `js-indent-first-initialiser'.
+
 2015-03-10  Przemyslaw Wojnowski  <address@hidden>
 
        * automated/cl-lib-tests.el: Add tests for plusp, second, ...
diff --git a/test/indent/js-indent-init-dynamic.js 
b/test/indent/js-indent-init-dynamic.js
new file mode 100644
index 0000000..536a976
--- /dev/null
+++ b/test/indent/js-indent-init-dynamic.js
@@ -0,0 +1,30 @@
+var foo = function() {
+  return 7;
+};
+
+var foo = function() {
+      return 7;
+    },
+    bar = 8;
+
+var foo = function() {
+      return 7;
+    },
+    bar = function() {
+      return 8;
+    };
+
+// Local Variables:
+// indent-tabs-mode: nil
+// js-indent-level: 2
+// js-indent-first-init: dynamic
+// End:
+
+// The following test intentionally produces a scan error and should
+// be placed below all other tests to prevent awkward indentation.
+// (It still thinks it's within the body of a function.)
+
+var foo = function() {
+  return 7;
+  ,
+  bar = 8;
diff --git a/test/indent/js-indent-init-t.js b/test/indent/js-indent-init-t.js
new file mode 100644
index 0000000..bb75542
--- /dev/null
+++ b/test/indent/js-indent-init-t.js
@@ -0,0 +1,21 @@
+var foo = function() {
+      return 7;
+    };
+
+var foo = function() {
+      return 7;
+    },
+    bar = 8;
+
+var foo = function() {
+      return 7;
+    },
+    bar = function() {
+      return 8;
+    };
+
+// Local Variables:
+// indent-tabs-mode: nil
+// js-indent-level: 2
+// js-indent-first-init: t
+// End:
diff --git a/test/indent/js.js b/test/indent/js.js
index f41849d..ad7cb56 100644
--- a/test/indent/js.js
+++ b/test/indent/js.js
@@ -1,5 +1,3 @@
-// -*- js-indent-level: 2 -*-
-
 var a = 1;
 b = 2;
 
@@ -65,3 +63,8 @@ b +=
 
 baz(`http://foo.bar/${tee}`)
   .qux();
+
+// Local Variables:
+// indent-tabs-mode: nil
+// js-indent-level: 2
+// End:



reply via email to

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