Update runtime files.
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index b2b1600..5a4376d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2020 Sep 25
+*eval.txt*	For Vim version 8.2.  Last change: 2020 Oct 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -897,7 +897,7 @@
 All expressions within one level are parsed from left to right.
 
 
-expr1				*expr1* *trinary* *falsy-operator* *E109*
+expr1				*expr1* *trinary* *falsy-operator* *??* *E109*
 -----
 
 The trinary operator: expr2 ? expr1 : expr1
@@ -3503,7 +3503,7 @@
 <		The first and third echo result in 3 ('e' plus composing
 		character is 3 bytes), the second echo results in 1 ('e' is
 		one byte).
-		Only works different from byteidx() when 'encoding' is set to
+		Only works differently from byteidx() when 'encoding' is set to
 		a Unicode encoding.
 
 		Can also be used as a |method|: >
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index ed6916f..91d22de 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 8.2.  Last change: 2020 May 31
+*index.txt*     For Vim version 8.2.  Last change: 2020 Oct 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -784,10 +784,10 @@
 				   lines down
 |gk|		gk		1  like "k", but when 'wrap' on go N screen
 				   lines up
-|gn|		gn	      1,2  find the next match with the last used
-				   search pattern and Visually select it
 |gm|		gm		1  go to character at middle of the screenline
 |gM|		gM		1  go to character at middle of the text line
+|gn|		gn	      1,2  find the next match with the last used
+				   search pattern and Visually select it
 |go|		go		1  cursor to byte N in the buffer
 |gp|		["x]gp		2  put the text [from register x] after the
 				   cursor N times, leave the cursor after it
@@ -1317,6 +1317,7 @@
 |:filetype|	:filet[ype]	switch file type detection on/off
 |:filter|	:filt[er]	filter output of following command
 |:find|		:fin[d]		find file in 'path' and edit it
+|:final|	:final		declare an immutable variable in Vim9
 |:finally|	:fina[lly]	part of a :try command
 |:finish|	:fini[sh]	quit sourcing a Vim script
 |:first|	:fir[st]	go to the first file in the argument list
@@ -1691,6 +1692,7 @@
 |:unsilent|	:uns[ilent]	run a command not silently
 |:update|	:up[date]	write buffer if modified
 |:vglobal|	:v[global]	execute commands for not matching lines
+|:var|		:var		variable declaration in Vim9
 |:version|	:ve[rsion]	print version number and other info
 |:verbose|	:verb[ose]	execute command with 'verbose' set
 |:vertical|	:vert[ical]	make following command split vertically
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index cfd48b5..276ab50 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2020 Sep 09
+*map.txt*       For Vim version 8.2.  Last change: 2020 Oct 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -252,6 +252,17 @@
 the abbreviation.  You can use this to decide how to expand the {lhs}.  You
 should not either insert or change the v:char.
 
+In case you want the mapping to not do anything, you can have the expression
+evaluate to an empty string.  If something changed that requires Vim to
+go through the main loop (e.g. to update the display), return "\<Ignore>".
+This is similar to "nothing" but makes Vim return from the loop that waits for
+input. Example: >
+	func s:OpenPopup()
+	  call popup_create(... arguments ...)
+	  return "\<Ignore>"
+	endfunc
+	nnoremap <expr> <F3> <Sid>OpenPopup()
+
 Be very careful about side effects!  The expression is evaluated while
 obtaining characters, you may very well make the command dysfunctional.
 For this reason the following is blocked:
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 713f3ba..88b3d2b 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.2.  Last change: 2020 Sep 15
+*options.txt*	For Vim version 8.2.  Last change: 2020 Oct 10
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2554,7 +2554,7 @@
 	"x" delete each combining character on its own.  When it is off (the
 	default) the character along with its combining characters are
 	deleted.
-	Note: When 'delcombine' is set "xx" may work different from "2x"!
+	Note: When 'delcombine' is set "xx" may work differently from "2x"!
 
 	This is useful for Arabic, Hebrew and many other languages where one
 	may have combining characters overtop of base characters, and want
@@ -4682,7 +4682,7 @@
 	    characters.  Example: "abc;ABC"
 	Example: "aA,fgh;FGH,cCdDeE"
 	Special characters need to be preceded with a backslash.  These are
-	";", ',' and backslash itself.
+	";", ',', '"', '|' and backslash itself.
 
 	This will allow you to activate vim actions without having to switch
 	back and forth between the languages.  Your language characters will
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 46ff76a..f6c96d0 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 8.2.  Last change: 2020 Aug 15
+*repeat.txt*    For Vim version 8.2.  Last change: 2020 Oct 09
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -271,6 +271,9 @@
 			directories are added to 'runtimepath'.  This is
 			useful in your .vimrc.  The plugins will then be
 			loaded during initialization, see |load-plugins|.
+			Note that for ftdetect scripts to be loaded
+			you will need to write `filetype plugin indent on`
+			AFTER all `packadd!` commands.
 
 			Also see |pack-add|.
 			{only available when compiled with |+eval|}
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 49baae6..5fd41c5 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -2447,6 +2447,7 @@
 :filter	various.txt	/*:filter*
 :fin	editing.txt	/*:fin*
 :fina	eval.txt	/*:fina*
+:final	vim9.txt	/*:final*
 :finally	eval.txt	/*:finally*
 :find	editing.txt	/*:find*
 :fini	repeat.txt	/*:fini*
@@ -3371,6 +3372,7 @@
 :up	editing.txt	/*:up*
 :update	editing.txt	/*:update*
 :v	repeat.txt	/*:v*
+:var	vim9.txt	/*:var*
 :ve	various.txt	/*:ve*
 :ver	various.txt	/*:ver*
 :verb	various.txt	/*:verb*
@@ -3689,6 +3691,7 @@
 >where	repeat.txt	/*>where*
 ?	pattern.txt	/*?*
 ?<CR>	pattern.txt	/*?<CR>*
+??	eval.txt	/*??*
 @	repeat.txt	/*@*
 @/	change.txt	/*@\/*
 @:	repeat.txt	/*@:*
@@ -6328,6 +6331,8 @@
 f	motion.txt	/*f*
 false	vim9.txt	/*false*
 false-variable	eval.txt	/*false-variable*
+falsy	eval.txt	/*falsy*
+falsy-operator	eval.txt	/*falsy-operator*
 faq	intro.txt	/*faq*
 farsi	farsi.txt	/*farsi*
 farsi.txt	farsi.txt	/*farsi.txt*
@@ -9656,6 +9661,7 @@
 true	vim9.txt	/*true*
 true-variable	eval.txt	/*true-variable*
 trunc()	eval.txt	/*trunc()*
+truthy	eval.txt	/*truthy*
 try-conditionals	eval.txt	/*try-conditionals*
 try-echoerr	eval.txt	/*try-echoerr*
 try-finally	eval.txt	/*try-finally*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index d47ecca..9795a0f 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2020 Sep 28
+*todo.txt*      For Vim version 8.2.  Last change: 2020 Oct 10
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,26 +38,13 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Popup windows: don't send any keys from ":normal" to popup filter?
-  Can drop ex_normal_busy_done then.
-
-Move Test_let_* from test_vim9_script to test_vim9_assign
-
-Modifiers in GTK: issue #6457.  CTRL-6 should work, like CTRL-@ and CTRL-_.
-
-3 October: remove using :let in Vim9 script.
-
-Go back to not using string/list/dict as falsy/thruthy boolean?
-    or only make "||" and "&&" result in a boolean?
 Making everything work:
+- If a function is defined in a block it may need to keep the block-locals,
+  like a compiled closure.
 - Fix memory leaks in test_vim9_assign, remove "if 0"
 - Fix memory leaks in test_vim9_script
-- At the Vim9 script level, keep script variables local to the block they are
-  declared in, like in Javascript (using :let).
-  -> Need to remember what variables were declared and delete them when
-     leaving the block.
-  -> if a function is defined it may need to keep the block-locals
-  Then Implement { } block at the script level.
+- Closure arguments should be more strict, like any function call?
+- Remove v:disallow_let
 - Recognize call to assert_fails() and execute it in the function context?
   Won't work if the command itself fails, not an expression failure:
 	assert_fails("unknown", "E99:")
@@ -70,10 +57,15 @@
 	did_catch = true
     endtry
     assert_true('did_catch')
-  Add a new command, 
+  Add a new command perhaps:
     assertfail
        unknown
     endassertfail E99:.*unknown
+- Make map() give an error if the resulting type is wrong.
+  Add mapnew() or mapcopy() to create a new List/Dict for the result, which
+  can have a different value type.
+- Error message for "'yes && 0" is "using String as a Number", should be "using
+  String as a Bool".
 - Run the same tests in :def and Vim9 script, like in Test_expr7_not()
 - In autocmd: use legacy syntax, not whatever the current script uses?
 - need to check type when a declaration specifies a type: #6507
@@ -86,9 +78,6 @@
   Also "list[0] += value".  test in Test_assign_dict_unknown_type().
 - ":put" with ISN_PUT does not handle range correctly, e.g. ":$-2put".
   Add command to parse range at runtime?
-- Make map() give an error if the resulting type is wrong.
-  Add mapnew() to create a new List/Dict for the result, which can have a
-  different value type.
 - When defining an :autocmd or :command, how to specify using Vim9 syntax?
   - always do this when defined in a Vim9 script
   - add some command modifier.
@@ -183,6 +172,11 @@
 - compile "expr" and "call" expression of a channel in channel_exe_cmd()?
 
 Popup windows:
+- Add a flag to make a popup window focusable?
+    CTRL-W P cycle over any preview window or focusable popup, end up back in
+	     current window.
+    ? - switch between current window and all popup windows
+    Esc in popup window goes back to previous current window
 - Cursor not updated before a redraw, making it jump. (#5943)
 - Add a termcap entry for changing the cursor when it goes under the popup and
   back.  like t_SI and t_EI  (t_SU and t_EU, where "U" means under?)
@@ -291,6 +285,11 @@
 
 Error numbers available: E653
 
+Mapping with partial match not executed properly in GTK. (Ingo Karkat, #7082)
+
+Patch for Template string: #4634
+Have another look at the implementation.
+
 Patch to implement the vimtutor with a plugin: #6414
 Was originally written by Felipe Morales.
 
@@ -303,6 +302,16 @@
 
 Patch for blockwise paste reporting changes: #6660.
 
+Add an option to not fetch terminal codes in xterm, to avoid flicker when t_Co
+changes.
+
+Add an option to start_timer() to return from the input loop with K_IGNORE.
+This is useful e.g. when a popup was created that disables mappings, we need
+to return from vgetc() to make this happen.  #7011
+
+Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
+Scroll doesn't work correctly, why?
+
 Expanding <mods> should put the tab number from cmdmod.tab before "tab".
 Any way to convert "$" back by using a special value? (#6901)
 
@@ -331,15 +340,16 @@
     BufIsRenamed  (after buffer ID gets another name)
 The buffer list and windows are locked, no changes possible
 
-Make it possible to map (console and GUI):  #6457
-    <C-[>   0x27   or is this <Esc> ?
-    <C-\>   0x28
-    <C-]>   0x29
-    <C-^>   0x30
-    <C-_>   0x31
+Matchparen doesn't remove highlight after undo. (#7054)
+Is OK when syntax HL is active.
 
-Patch for Template string: #4634
-Have another look at the implementation.
+Currently Del can be used to delete the last character of a typed count.
+Can it also be used to delete an incomplete Normal mode command? (#7096)
+After an operator: should work.  After "a" or "i" for text objects: should
+work.
+
+Using "au!" after "filetype on" is a bit slow.  Can the matching of
+autocommands be made faster?  (#7056)
 
 Valgrind warns for uninitialized values in f_term_dumpwrite().
 
@@ -538,6 +548,7 @@
 13, #2910)  Can't reproduce?
 
 Display messed up with matchparen, wrapping and scrolling. (#5638)
+Screen update bug related to matchparen.  (Chris Heath, 2017 Mar 4, #1532)
 
 When getting a focus event halfway a mapping this aborts the mapping.  E.g.
 when "qq" is mapped and after the first "q" the mouse is moved outside of the
@@ -1263,8 +1274,6 @@
 g_main_context_iteration() doesn't return.  Need to trigger an event when the
 timer expires.
 
-Screen update bug related to matchparen.  (Chris Heath, 2017 Mar 4, #1532)
-
 Rule to use "^" for statusline does not work if a space is defined with
 highlighting for both stl and stlnc.  Patch by Ken Hamada (itchyny, 2016 Dec 11)
 
@@ -1497,8 +1506,6 @@
 Second problem in #966: ins_compl_add_tv() uses get_dict_string() multiple
 times, overwrites the one buffer. (Nikolay Pavlov, 2016 Aug 5)
 
-Filetype plugin for awk. (Doug Kearns, 2016 Sep 5)
-
 Patch to improve map documentation. Issue #799.
 
 We can use '. to go to the last change in the current buffer, but how about
@@ -1718,8 +1725,6 @@
 Patch to add :lockjumps. (Carlo Baldassi, 2015 May 25)
 OK to not block marks?
 
-Mixup of highlighting when there is a match and SpellBad. (ZyX, 2015 Jan 1)
-
 Patch on Issue 72: 'autochdir' causes problems for :vimgrep.
 
 When two SIGWINCH arrive very quickly, the second one may be lost.
@@ -1786,14 +1791,6 @@
 
 Problem with transparent and matchgroup.  Issue #475
 
-Spell files use a latin single quote. Unicode also has another single quote:
-0x2019.  (Ron Aaron, 2014 Apr 4)
-New OpenOffice spell files support this with ICONV.  But they are not
-compatible with Vim spell files.  The old files can no longer be downloaded.
-
-Spell checking: Add a feature to only consider two spaces after a dot to start
-a new sentence.  Don't give the capitalization error when there is one space.
-
 Idea: For a window in the middle (has window above and below it), use
 right-mouse-drag on the status line to move a window up/down without changing
 its height?  It's like dragging the status bar above it at the same time.
@@ -2468,9 +2465,6 @@
 
 Add "no_hlsearch" to winsaveview().
 
-Cursorline highlighting combines with Search ('hlsearch') but not with
-SpellBad. (Jim Karsten, 2009 Mar 18)
-
 When 'foldmethod' is "indent", adding an empty line below a fold and then
 indented text, creates a new fold instead of joining it with the previous one.
 (Evan Laforge, 2009 Oct 17)
@@ -2977,12 +2971,6 @@
 
 GUI: When combining fg en bg make sure they are not equal.
 
-Spell checking: Add a way to specify punctuation characters.  Add the
-superscript numbers by default: 0x2070, 0xb9, 0xb2, 0xb3, 0x2074 - 0x2079.
-
-Spell checking in popup menu: If the only problem is the case of the first
-character, don't offer "ignore" and "add to word list".
-
 Use different pt_br dictionary for spell checking. (Jackson A. Aquino, 2006
 Jun 5)
 
@@ -2996,10 +2984,6 @@
 
 There should be something about spell checking in the user manual.
 
-Spell menu: When using the Popup menu to select a replacement word,
-":spellrepeat" doesn't work.  SpellReplace() uses setline().  Can it use "z="
-somehow?  Or use a new function.
-
 Mac: Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)
 
 Add an option to specify the character to use when a double-width character is
@@ -3283,6 +3267,29 @@
 - Minimal Vi with bidi support: https://github.com/aligrudi/neatvi
   By Ali Gholami Rudi, also worked on arabic.c
 
+
+Spell checking:
+-   When 'cursorline' is set and the first word should have SpellCap
+    highlighting, redrawing the line removes it when moving the cursor away
+    from the line. (#7085)  Would need to inspect the end of the previous line
+    and update "capcol_lnum" and "cap_col".
+-   Mixup of highlighting when there is a match and SpellBad. (ZyX, 2015 Jan 1)
+-   Spell files use a latin single quote. Unicode also has another single
+    quote: 0x2019.  (Ron Aaron, 2014 Apr 4)
+    New OpenOffice spell files support this with ICONV.  But they are not
+    compatible with Vim spell files.  The old files can no longer be
+    downloaded.
+-   Add a feature to only consider two spaces after a dot to start a new
+    sentence.  Don't give the capitalization error when there is one space.
+-   Add a way to specify punctuation characters.  Add the superscript numbers
+    by default: 0x2070, 0xb9, 0xb2, 0xb3, 0x2074 - 0x2079.
+-   In popup menu: If the only problem is the case of the first character,
+    don't offer "ignore" and "add to word list".
+-   Spell menu: When using the Popup menu to select a replacement word,
+    ":spellrepeat" doesn't work.  SpellReplace() uses setline().  Can it use
+    "z=" somehow?  Or use a new function.
+
+
 Quickfix/Location List:
 -   Window size is wrong when using quickfix window. (Lifepillar, 2018 Aug 24,
     #2999)
diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt
index 6192c23..431b9cd 100644
--- a/runtime/doc/version8.txt
+++ b/runtime/doc/version8.txt
@@ -48515,7 +48515,7 @@
 Files:      src/eval.c, src/testdir/test_vim9_expr.vim
 
 Patch 8.2.1205
-Problem:    Vim9: && and || work different when not compiled.
+Problem:    Vim9: && and || work differently when not compiled.
 Solution:   Keep the value.
 Files:      src/eval.c, src/testdir/test_vim9_expr.vim
 
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index feb889d..fdbcefc 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2020 Sep 26
+*vim9.txt*	For Vim version 8.2.  Last change: 2020 Oct 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -164,12 +164,12 @@
 
 When using `:function` or `:def` to specify a nested function inside a `:def`
 function, this nested function is local to the code block it is defined in.
-In a `:def` function it is not possible to define a script-local function.  it
+In a `:def` function it is not possible to define a script-local function.  It
 is possible to define a global function by using the "g:" prefix.
 
 When referring to a function and no "s:" or "g:" prefix is used, Vim will
 search for the function:
-- in the function scope
+- in the function scope, in block scopes
 - in the script scope, possibly imported
 - in the list of global functions
 However, it is recommended to always use "g:" to refer to a global function
@@ -1140,7 +1140,7 @@
 	def Func(arg1 number, arg2 string) bool
 
 The first is more familiar for anyone used to C or Java.  The second one
-doesn't really has an advantage over the first, so let's discard the second.
+doesn't really have an advantage over the first, so let's discard the second.
 
 Since we use type inference the type can be left out when it can be inferred
 from the value.  This means that after `var` we don't know if a type or a name
@@ -1155,19 +1155,35 @@
 
 Expressions ~
 
-Expression evaluation was already close to what JavaScript and other languages
-are doing.  Some details are unexpected and can be fixed.  For example how the
-|| and && operators work.  Legacy Vim script: >
-	var value = 44
-	...
-	var result = value || 0  # result == 1
+Expression evaluation was already close to what other languages are doing.
+Some details are unexpected and can be improved.  For example a boolean
+condition would accept a string, convert it to a number and check if the
+number is non-zero.  This is unexpected and often leads to mistakes, since
+text not starting with a number would be converted to zero, which is
+considered false.  Thus a string would not give an error and be considered
+false if it doesn't start with a number.  That is confusing.
 
-Vim9 script works like JavaScript/TypeScript, keep the value: >
-	var value = 44
-	...
-	var result = value || 0  # result == 44
+In Vim9 type checking is more strict to avoid mistakes.  Where a condition is
+used, e.g. with the `:if` command and the `||` operator, only boolean-like
+values are accepted:
+	true:  `true`, `v:true`, `1`, `0 < 9`
+	false: `false`, `v:false`, `0`, `0 > 9`
+Note that the number zero is false and the number one is true.  This is more
+persmissive than most other languages.  It was done because many builtin
+functions return these values.
 
-TODO: the semantics of || and && need to be reconsidered.
+If you have any type of value and want to use it as a boolean, use the `!!`
+operator:
+	true: !`!'text'`, `!![99]`, `!!{'x': 1}`, `!!99`
+	false: `!!''`, `!![]`, `!!{}`
+
+From a language like JavaScript we have this handy construct: >
+	GetName() || 'unknown'
+However, this conflicts with only allowing a boolean for a condition.
+Therefore the "??" operator was added: >
+	GetName() ?? 'unknown'
+Here you can explicitly express your intention to use the value as-is and not
+result in a boolean. This is called the |falsy-operator|.
 
 
 Import and Export ~