Updated runtime files.
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index bc9e641..2368750 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -117,7 +117,9 @@
 
 Currently up to 10 channels can be in use at the same time. *E897*
 
-When the channel can't be opened you will get an error message.
+When the channel can't be opened you will get an error message.  There is a
+difference between MS-Windows and Unix: On Unix when the port doesn't exist
+ch_open() fails quickly.  On MS-Windows "waittime" applies.
 *E898* *E899* *E900* *E901* *E902*
 
 If there is an error reading or writing a channel it will be closed.
@@ -169,6 +171,9 @@
 On read error or ch_close() the string "DETACH" is sent, if still possible.
 The channel will then be inactive.
 
+It is also possible to use ch_sendraw() on a JSON or JS channel.  The caller
+is then completely responsible for correct encoding and decoding.
+
 ==============================================================================
 4. Vim commands						*channel-commands*
 
@@ -266,6 +271,8 @@
 This {string} can also be JSON, use |jsonencode()| to create it and
 |jsondecode()| to handle a received JSON message.
 
+It is not possible to use |ch_sendexpr()| on a raw channel.
+
 ==============================================================================
 6. Job control						*job-control*
 
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 1f009cc..8ebe3ad 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2703,10 +2703,12 @@
 		{only available when compiled with the |+channel| feature}
 
 ch_sendexpr({handle}, {expr} [, {callback}])		*ch_sendexpr()*
-		Send {expr} over JSON channel {handle}.  See |channel-use|.
+		Send {expr} over channel {handle}.  The {expr} is encoded
+		according to the type of channel.  The function cannot be used
+		with a raw channel.  See |channel-use|.  *E912*
 
 		When {callback} is given returns immediately.  Without
-		{callback} waits for a JSON response and returns the decoded
+		{callback} waits for a response and returns the decoded
 		expression.  When there is an error or timeout returns an
 		empty string.
 
@@ -2718,8 +2720,10 @@
 		{only available when compiled with the |+channel| feature}
 
 ch_sendraw({handle}, {string} [, {callback}])		*ch_sendraw()*
-		Send {string} over raw channel {handle}.  See |channel-raw|.
-		Works like |ch_sendexpr()|, but does not decode the response.
+		Send {string} over channel {handle}.
+		Works like |ch_sendexpr()|, but does not encode the request or
+		decode the response.  The caller is responsible for the
+		correct contents.  See |channel-use|.
 
 		{only available when compiled with the |+channel| feature}
 
diff --git a/runtime/doc/tags b/runtime/doc/tags
index d547cfd..66b0aa6 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4435,7 +4435,14 @@
 E903	channel.txt	/*E903*
 E904	channel.txt	/*E904*
 E905	channel.txt	/*E905*
+E906	channel.txt	/*E906*
+E907	eval.txt	/*E907*
+E908	eval.txt	/*E908*
+E909	eval.txt	/*E909*
 E91	options.txt	/*E91*
+E910	eval.txt	/*E910*
+E911	eval.txt	/*E911*
+E912	eval.txt	/*E912*
 E92	message.txt	/*E92*
 E93	windows.txt	/*E93*
 E94	windows.txt	/*E94*
@@ -6811,8 +6818,13 @@
 javascript-cinoptions	indent.txt	/*javascript-cinoptions*
 javascript-indenting	indent.txt	/*javascript-indenting*
 job-control	channel.txt	/*job-control*
+job_start()	eval.txt	/*job_start()*
+job_status()	eval.txt	/*job_status()*
+job_stop()	eval.txt	/*job_stop()*
 join()	eval.txt	/*join()*
 jsbterm-mouse	options.txt	/*jsbterm-mouse*
+jsdecode()	eval.txt	/*jsdecode()*
+jsencode()	eval.txt	/*jsencode()*
 jsondecode()	eval.txt	/*jsondecode()*
 jsonencode()	eval.txt	/*jsonencode()*
 jtags	tagsrch.txt	/*jtags*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index d516430..a6faab3 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.4.  Last change: 2016 Feb 04
+*todo.txt*      For Vim version 7.4.  Last change: 2016 Feb 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -81,32 +81,36 @@
   Patch by Christian, 2016 Jan 29.
 
 +channel:
-- use a timeout for connect()
-  Patch from Yasuhiro Matsumoto, Feb 2
-  Change connect() second argument to a dict with items:
-    mode
-    timeout
-    callback
+- implement job control:
+	job argument: redirect stdin/stdout
+	job argument: killonexit
+	let job = job_maystart('command', {address}, {options})
 - When receiving malformed json starting with a quote it doesn't get
   discarded.
+- add ch_status(): Whether channel is open.  Perhaps also mode, timeout.
+  When channel closes invoke channel callback.
 - add ch_setcallback()
 - add ch_settimeout()
 - cleanup on exit?  in mch_getout() and getout().
-- Add more contents to channel.txt
+- Add a test for the channel callback.
 - implement debug log
-- implement job control:
-	let job = job_start('command', {options})
-	call job_stop(job)
-	let job = job_maystart('command', {address}, {options})
-    options:
-        - keep running when Vim exits
-- add remark undo sync, is there a way to force it?
-- Add a test with a server that can send canned responses.
+- Add timestamp to queued messages and callbacks with ID, remove after a
+  minute.
+- add remark about undo sync, is there a way to force it?
 - Add more testing in json_test.c
 - make sure errors lead to a useful error msg. ["ex","foobar"]
-- set timeout for channel.
-- implement check for ID in response.
 - json: implement UTF-16 surrogate pair.
+- Need way to uniquely identify a window, no matter how windows are
+  rearranged.  Same for tab pages.
+      getwinid()             ID of current winow
+      getwinid({nr})         ID of window {nr}
+      getwinid({nr}, {tab})  ID of window {nr} in tab page {tab}
+      getwinnr({id})	     window nr of {id} or -1 if not open
+      gettabnr({id})	     tab page nr of {id} or -1 if not open
+      gotowin({id})
+  Make it so that the window ID can be used where currently a window nr is used
+- For connection to server, a "keep open" flag would be useful.  Retry
+  connecting in the main loop with zero timeout.
 
 Patch on #608: (Ken Takata)
 https://bitbucket.org/k_takata/vim-ktakata-mq/src/479934b94fd56b064c9e4bd8737585c5df69d56a/fix-gvimext-loadlibrary.patch?fileviewer=file-view-default
@@ -217,6 +221,8 @@
 Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
 https://gist.github.com/presuku/d3d6b230b9b6dcfc0477
 
+Patch to add TagNotFound autocommand. (Anton Lindqvist, 2016 Feb 3)
+
 Illegal memory access, requires ASAN to see. (Dominique Pelle, 2015 Jul 28)
 
 Gvim: when both Tab and CTRL-I are mapped, use CTRL-I not for Tab.
@@ -265,6 +271,9 @@
 Build with Python on Mac does not always use the right library.
 (Kazunobu Kuriyama, 2015 Mar 28)
 
+Patch to add GTK 3 support. (Kazunobu Kuriyama, 2016 Feb 6)
+Does not fully work yet.
+
 Need a Vim equivalent of Python's None and a way to test for it.
 Use v:none.  var == v:none
 
@@ -621,6 +630,7 @@
 possible. (Christian Brabandt, 2014 Mar 12, update Aug 22)
 
 Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
+It can replace the BeOS code, which is likely not used anymore.
 
 Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)
 
@@ -2607,7 +2617,7 @@
     Need better separation of Vim core and GUI code.
 8   When fontset support is enabled, setting 'guifont' to a single font
     doesn't work.
-8   Menu priority for sub-menus for: Amiga, BeOS.
+8   Menu priority for sub-menus for: Amiga.
 8   When translating menus ignore the part after the Tab, the shortcut.  So
     that the same menu item with a different shortcut (e.g., for the Mac) are
     still translated.