[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: