xref: /vim-8.2.3635/runtime/doc/channel.txt (revision 6aa57295)
1*channel.txt*      For Vim version 8.2.  Last change: 2020 Oct 17
2
3
4		  VIM REFERENCE MANUAL	  by Bram Moolenaar
5
6
7		      Inter-process communication		*channel*
8
9Vim uses channels to communicate with other processes.
10A channel uses a socket or pipes.			*socket-interface*
11Jobs can be used to start processes and communicate with them.
12The Netbeans interface also uses a channel. |netbeans|
13
141. Overview				|job-channel-overview|
152. Channel demo				|channel-demo|
163. Opening a channel			|channel-open|
174. Using a JSON or JS channel		|channel-use|
185. Channel commands			|channel-commands|
196. Using a RAW or NL channel		|channel-raw|
207. More channel functions		|channel-more|
218. Channel functions details		|channel-functions-details|
229. Starting a job with a channel	|job-start|
2310. Starting a job without a channel	|job-start-nochannel|
2411. Job functions			|job-functions-details|
2512. Job options				|job-options|
2613. Controlling a job			|job-control|
2714. Using a prompt buffer		|prompt-buffer|
28
29{only when compiled with the |+channel| feature for channel stuff}
30	You can check this with: `has('channel')`
31{only when compiled with the |+job| feature for job stuff}
32	You can check this with: `has('job')`
33
34==============================================================================
351. Overview						*job-channel-overview*
36
37There are four main types of jobs:
381. A daemon, serving several Vim instances.
39   Vim connects to it with a socket.
402. One job working with one Vim instance, asynchronously.
41   Uses a socket or pipes.
423. A job performing some work for a short time, asynchronously.
43   Uses a socket or pipes.
444. Running a filter, synchronously.
45   Uses pipes.
46
47For when using sockets See |job-start|, |job-start-nochannel| and
48|channel-open|.  For 2 and 3, one or more jobs using pipes, see |job-start|.
49For 4 use the ":{range}!cmd" command, see |filter|.
50
51Over the socket and pipes these protocols are available:
52RAW	nothing known, Vim cannot tell where a message ends
53NL	every message ends in a NL (newline) character
54JSON	JSON encoding |json_encode()|
55JS	JavaScript style JSON-like encoding |js_encode()|
56
57Common combination are:
58- Using a job connected through pipes in NL mode.  E.g., to run a style
59  checker and receive errors and warnings.
60- Using a daemon, connecting over a socket in JSON mode.  E.g. to lookup
61  cross-references in a database.
62
63==============================================================================
642. Channel demo				*channel-demo* *demoserver.py*
65
66This requires Python.  The demo program can be found in
67$VIMRUNTIME/tools/demoserver.py
68Run it in one terminal.  We will call this T1.
69
70Run Vim in another terminal.  Connect to the demo server with: >
71	let channel = ch_open('localhost:8765')
72
73In T1 you should see:
74	=== socket opened === ~
75
76You can now send a message to the server: >
77	echo ch_evalexpr(channel, 'hello!')
78
79The message is received in T1 and a response is sent back to Vim.
80You can see the raw messages in T1.  What Vim sends is:
81	[1,"hello!"] ~
82And the response is:
83	[1,"got it"] ~
84The number will increase every time you send a message.
85
86The server can send a command to Vim.  Type this on T1 (literally, including
87the quotes):
88	["ex","echo 'hi there'"] ~
89And you should see the message in Vim. You can move the cursor a word forward:
90	["normal","w"] ~
91
92To handle asynchronous communication a callback needs to be used: >
93	func MyHandler(channel, msg)
94	  echo "from the handler: " . a:msg
95	endfunc
96	call ch_sendexpr(channel, 'hello!', {'callback': "MyHandler"})
97Vim will not wait for a response.  Now the server can send the response later
98and MyHandler will be invoked.
99
100Instead of giving a callback with every send call, it can also be specified
101when opening the channel: >
102	call ch_close(channel)
103	let channel = ch_open('localhost:8765', {'callback': "MyHandler"})
104	call ch_sendexpr(channel, 'hello!')
105
106When trying out channels it's useful to see what is going on.  You can tell
107Vim to write lines in log file: >
108	call ch_logfile('channellog', 'w')
109See |ch_logfile()|.
110
111==============================================================================
1123. Opening a channel					*channel-open*
113
114To open a channel: >
115    let channel = ch_open({address} [, {options}])
116    if ch_status(channel) == "open"
117      " use the channel
118
119Use |ch_status()| to see if the channel could be opened.
120
121{address} has the form "hostname:port".  E.g., "localhost:8765".
122
123When using an IPv6 address, enclose it within square brackets.  E.g.,
124"[2001:db8::1]:8765".
125
126{options} is a dictionary with optional entries:	*channel-open-options*
127
128"mode" can be:						*channel-mode*
129	"json" - Use JSON, see below; most convenient way. Default.
130	"js"   - Use JS (JavaScript) encoding, more efficient than JSON.
131	"nl"   - Use messages that end in a NL character
132	"raw"  - Use raw messages
133						*channel-callback* *E921*
134"callback"	A function that is called when a message is received that is
135		not handled otherwise.  It gets two arguments: the channel
136		and the received message. Example: >
137	func Handle(channel, msg)
138	  echo 'Received: ' . a:msg
139	endfunc
140	let channel = ch_open("localhost:8765", {"callback": "Handle"})
141<
142		When "mode" is "json" or "js" the "msg" argument is the body
143		of the received message, converted to Vim types.
144		When "mode" is "nl" the "msg" argument is one message,
145		excluding the NL.
146		When "mode" is "raw" the "msg" argument is the whole message
147		as a string.
148
149		For all callbacks: Use |function()| to bind it to arguments
150		and/or a Dictionary.  Or use the form "dict.function" to bind
151		the Dictionary.
152
153		Callbacks are only called at a "safe" moment, usually when Vim
154		is waiting for the user to type a character.  Vim does not use
155		multi-threading.
156
157							*close_cb*
158"close_cb"	A function that is called when the channel gets closed, other
159		than by calling ch_close().  It should be defined like this: >
160	func MyCloseHandler(channel)
161<		Vim will invoke callbacks that handle data before invoking
162		close_cb, thus when this function is called no more data will
163		be passed to the callbacks.  However, if a callback causes Vim
164		to check for messages, the close_cb may be invoked while still
165		in the callback.  The plugin must handle this somehow, it can
166		be useful to know that no more data is coming.
167							*channel-drop*
168"drop"		Specifies when to drop messages:
169		    "auto"	When there is no callback to handle a message.
170				The "close_cb" is also considered for this.
171		    "never"	All messages will be kept.
172
173							*channel-noblock*
174"noblock"	Same effect as |job-noblock|.  Only matters for writing.
175
176							*waittime*
177"waittime"	The time to wait for the connection to be made in
178		milliseconds.  A negative number waits forever.
179
180		The default is zero, don't wait, which is useful if a local
181		server is supposed to be running already.  On Unix Vim
182		actually uses a 1 msec timeout, that is required on many
183		systems.  Use a larger value for a remote server, e.g.  10
184		msec at least.
185							*channel-timeout*
186"timeout"	The time to wait for a request when blocking, E.g. when using
187		ch_evalexpr().  In milliseconds.  The default is 2000 (2
188		seconds).
189
190When "mode" is "json" or "js" the "callback" is optional.  When omitted it is
191only possible to receive a message after sending one.
192
193To change the channel options after opening it use |ch_setoptions()|.  The
194arguments are similar to what is passed to |ch_open()|, but "waittime" cannot
195be given, since that only applies to opening the channel.
196
197For example, the handler can be added or changed: >
198    call ch_setoptions(channel, {'callback': callback})
199When "callback" is empty (zero or an empty string) the handler is removed.
200
201After a callback has been invoked Vim will update the screen and put the
202cursor back where it belongs.  Thus the callback should not need to do
203`:redraw`.
204
205The timeout can be changed: >
206    call ch_setoptions(channel, {'timeout': msec})
207<
208							  *channel-close* *E906*
209Once done with the channel, disconnect it like this: >
210    call ch_close(channel)
211When a socket is used this will close the socket for both directions.  When
212pipes are used (stdin/stdout/stderr) they are all closed.  This might not be
213what you want!  Stopping the job with job_stop() might be better.
214All readahead is discarded, callbacks will no longer be invoked.
215
216Note that a channel is closed in three stages:
217  - The I/O ends, log message: "Closing channel". There can still be queued
218    messages to read or callbacks to invoke.
219  - The readahead is cleared, log message: "Clearing channel".  Some variables
220    may still reference the channel.
221  - The channel is freed, log message: "Freeing channel".
222
223When the channel can't be opened you will get an error message.  There is a
224difference between MS-Windows and Unix: On Unix when the port doesn't exist
225ch_open() fails quickly.  On MS-Windows "waittime" applies.
226*E898* *E901* *E902*
227
228If there is an error reading or writing a channel it will be closed.
229*E630* *E631*
230
231==============================================================================
2324. Using a JSON or JS channel					*channel-use*
233
234If mode is JSON then a message can be sent synchronously like this: >
235    let response = ch_evalexpr(channel, {expr})
236This awaits a response from the other side.
237
238When mode is JS this works the same, except that the messages use
239JavaScript encoding.  See |js_encode()| for the difference.
240
241To send a message, without handling a response or letting the channel callback
242handle the response: >
243    call ch_sendexpr(channel, {expr})
244
245To send a message and letting the response handled by a specific function,
246asynchronously: >
247    call ch_sendexpr(channel, {expr}, {'callback': Handler})
248
249Vim will match the response with the request using the message ID.  Once the
250response is received the callback will be invoked.  Further responses with the
251same ID will be ignored.  If your server sends back multiple responses you
252need to send them with ID zero, they will be passed to the channel callback.
253
254The {expr} is converted to JSON and wrapped in an array.  An example of the
255message that the receiver will get when {expr} is the string "hello":
256	[12,"hello"] ~
257
258The format of the JSON sent is:
259    [{number},{expr}]
260
261In which {number} is different every time.  It must be used in the response
262(if any):
263
264    [{number},{response}]
265
266This way Vim knows which sent message matches with which received message and
267can call the right handler.  Also when the messages arrive out of order.
268
269A newline character is terminating the JSON text.  This can be used to
270separate the read text.  For example, in Python:
271	splitidx = read_text.find('\n')
272	message = read_text[:splitidx]
273	rest = read_text[splitidx + 1:]
274
275The sender must always send valid JSON to Vim.  Vim can check for the end of
276the message by parsing the JSON.  It will only accept the message if the end
277was received.  A newline after the message is optional.
278
279When the process wants to send a message to Vim without first receiving a
280message, it must use the number zero:
281    [0,{response}]
282
283Then channel handler will then get {response} converted to Vim types.  If the
284channel does not have a handler the message is dropped.
285
286It is also possible to use ch_sendraw() and ch_evalraw() on a JSON or JS
287channel.  The caller is then completely responsible for correct encoding and
288decoding.
289
290==============================================================================
2915. Channel commands					*channel-commands*
292
293With a JSON channel the process can send commands to Vim that will be
294handled by Vim internally, it does not require a handler for the channel.
295
296Possible commands are:				*E903* *E904* *E905*
297    ["redraw", {forced}]
298    ["ex",     {Ex command}]
299    ["normal", {Normal mode command}]
300    ["expr",   {expression}, {number}]
301    ["expr",   {expression}]
302    ["call",   {func name}, {argument list}, {number}]
303    ["call",   {func name}, {argument list}]
304
305With all of these: Be careful what these commands do!  You can easily
306interfere with what the user is doing.  To avoid trouble use |mode()| to check
307that the editor is in the expected state.  E.g., to send keys that must be
308inserted as text, not executed as a command:
309    ["ex","if mode() == 'i' | call feedkeys('ClassName') | endif"] ~
310
311Errors in these commands are normally not reported to avoid them messing up
312the display.  If you do want to see them, set the 'verbose' option to 3 or
313higher.
314
315
316Command "redraw" ~
317
318The other commands do not explicitly update the screen, so that you can send a
319sequence of commands without the cursor moving around.  A redraw can happen as
320a side effect of some commands.  You must end with the "redraw" command to
321show any changed text and show the cursor where it belongs.
322
323The argument is normally an empty string:
324	["redraw", ""] ~
325To first clear the screen pass "force":
326	["redraw", "force"] ~
327
328
329Command "ex" ~
330
331The "ex" command is executed as any Ex command.  There is no response for
332completion or error.  You could use functions in an |autoload| script:
333	["ex","call myscript#MyFunc(arg)"]
334
335You can also use "call |feedkeys()|" to insert any key sequence.
336
337When there is an error a message is written to the channel log, if it exists,
338and v:errmsg is set to the error.
339
340
341Command "normal" ~
342
343The "normal" command is executed like with ":normal!", commands are not
344mapped.  Example to open the folds under the cursor:
345	["normal" "zO"]
346
347
348Command "expr"  with response ~
349
350The "expr" command can be used to get the result of an expression.  For
351example, to get the number of lines in the current buffer:
352	["expr","line('$')", -2] ~
353
354It will send back the result of the expression:
355	[-2, "last line"] ~
356The format is:
357	[{number}, {result}]
358
359Here {number} is the same as what was in the request.  Use a negative number
360to avoid confusion with message that Vim sends.  Use a different number on
361every request to be able to match the request with the response.
362
363{result} is the result of the evaluation and is JSON encoded.  If the
364evaluation fails or the result can't be encoded in JSON it is the string
365"ERROR".
366
367
368Command "expr" without a response ~
369
370This command is similar to "expr" above, but does not send back any response.
371Example:
372	["expr","setline('$', ['one', 'two', 'three'])"] ~
373There is no third argument in the request.
374
375
376Command "call" ~
377
378This is similar to "expr", but instead of passing the whole expression as a
379string this passes the name of a function and a list of arguments.  This
380avoids the conversion of the arguments to a string and escaping and
381concatenating them.  Example:
382	["call", "line", ["$"], -2] ~
383
384Leave out the fourth argument if no response is to be sent:
385	["call", "setline", ["$", ["one", "two", "three"]]] ~
386
387==============================================================================
3886. Using a RAW or NL channel				*channel-raw*
389
390If mode is RAW or NL then a message can be sent like this: >
391    let response = ch_evalraw(channel, {string})
392
393The {string} is sent as-is.  The response will be what can be read from the
394channel right away.  Since Vim doesn't know how to recognize the end of the
395message you need to take care of it yourself.  The timeout applies for reading
396the first byte, after that it will not wait for anything more.
397
398If mode is "nl" you can send a message in a similar way.  You are expected
399to put in the NL after each message.  Thus you can also send several messages
400ending in a NL at once.  The response will be the text up to and including the
401first NL.  This can also be just the NL for an empty response.
402If no NL was read before the channel timeout an empty string is returned.
403
404To send a message, without expecting a response: >
405    call ch_sendraw(channel, {string})
406The process can send back a response, the channel handler will be called with
407it.
408
409To send a message and letting the response handled by a specific function,
410asynchronously: >
411    call ch_sendraw(channel, {string}, {'callback': 'MyHandler'})
412
413This {string} can also be JSON, use |json_encode()| to create it and
414|json_decode()| to handle a received JSON message.
415
416It is not possible to use |ch_evalexpr()| or |ch_sendexpr()| on a raw channel.
417
418A String in Vim cannot contain NUL bytes.  To send or receive NUL bytes read
419or write from a buffer.  See |in_io-buffer| and |out_io-buffer|.
420
421==============================================================================
4227. More channel functions				*channel-more*
423
424To obtain the status of a channel: ch_status(channel).  The possible results
425are:
426	"fail"		Failed to open the channel.
427	"open"		The channel can be used.
428	"buffered"	The channel was closed but there is data to read.
429	"closed"	The channel was closed.
430
431To obtain the job associated with a channel: ch_getjob(channel)
432
433To read one message from a channel: >
434	let output = ch_read(channel)
435This uses the channel timeout.  To read without a timeout, just get any
436message that is available: >
437	let output = ch_read(channel, {'timeout': 0})
438When no message was available then the result is v:none for a JSON or JS mode
439channels, an empty string for a RAW or NL channel.  You can use |ch_canread()|
440to check if there is something to read.
441
442Note that when there is no callback, messages are dropped.  To avoid that add
443a close callback to the channel.
444
445To read all output from a RAW channel that is available: >
446	let output = ch_readraw(channel)
447To read the error output: >
448	let output = ch_readraw(channel, {"part": "err"})
449
450ch_read() and ch_readraw() use the channel timeout.  When there is nothing to
451read within that time an empty string is returned.  To specify a different
452timeout in msec use the "timeout" option:
453	{"timeout": 123} ~
454To read from the error output use the "part" option:
455	{"part": "err"} ~
456To read a message with a specific ID, on a JS or JSON channel:
457	{"id": 99} ~
458When no ID is specified or the ID is -1, the first message is returned. This
459overrules any callback waiting for this message.
460
461For a RAW channel this returns whatever is available, since Vim does not know
462where a message ends.
463For a NL channel this returns one message.
464For a JS or JSON channel this returns one decoded message.
465This includes any sequence number.
466
467==============================================================================
4688. Channel functions details			*channel-functions-details*
469
470ch_canread({handle})						*ch_canread()*
471		Return non-zero when there is something to read from {handle}.
472		{handle} can be a Channel or a Job that has a Channel.
473
474		This is useful to read from a channel at a convenient time,
475		e.g. from a timer.
476
477		Note that messages are dropped when the channel does not have
478		a callback.  Add a close callback to avoid that.
479
480		Can also be used as a |method|: >
481			GetChannel()->ch_canread()
482
483ch_close({handle})						*ch_close()*
484		Close {handle}.  See |channel-close|.
485		{handle} can be a Channel or a Job that has a Channel.
486		A close callback is not invoked.
487
488		Can also be used as a |method|: >
489			GetChannel()->ch_close()
490
491ch_close_in({handle})						*ch_close_in()*
492		Close the "in" part of {handle}.  See |channel-close-in|.
493		{handle} can be a Channel or a Job that has a Channel.
494		A close callback is not invoked.
495
496		Can also be used as a |method|: >
497			GetChannel()->ch_close_in()
498
499
500ch_evalexpr({handle}, {expr} [, {options}])			*ch_evalexpr()*
501		Send {expr} over {handle}.  The {expr} is encoded
502		according to the type of channel.  The function cannot be used
503		with a raw channel.  See |channel-use|.
504		{handle} can be a Channel or a Job that has a Channel.
505								*E917*
506		{options} must be a Dictionary.  It must not have a "callback"
507		entry.  It can have a "timeout" entry to specify the timeout
508		for this specific request.
509
510		ch_evalexpr() waits for a response and returns the decoded
511		expression.  When there is an error or timeout it returns an
512		empty string.
513
514		Note that while waiting for the response, Vim handles other
515		messages.  You need to make sure this doesn't cause trouble.
516
517		Can also be used as a |method|: >
518			GetChannel()->ch_evalexpr(expr)
519
520
521ch_evalraw({handle}, {string} [, {options}])		*ch_evalraw()*
522		Send {string} over {handle}.
523		{handle} can be a Channel or a Job that has a Channel.
524
525		Works like |ch_evalexpr()|, but does not encode the request or
526		decode the response.  The caller is responsible for the
527		correct contents.  Also does not add a newline for a channel
528		in NL mode, the caller must do that.  The NL in the response
529		is removed.
530		Note that Vim does not know when the text received on a raw
531		channel is complete, it may only return the first part and you
532		need to use |ch_readraw()| to fetch the rest.
533		See |channel-use|.
534
535		Can also be used as a |method|: >
536			GetChannel()->ch_evalraw(rawstring)
537
538ch_getbufnr({handle}, {what})				 *ch_getbufnr()*
539		Get the buffer number that {handle} is using for String {what}.
540		{handle} can be a Channel or a Job that has a Channel.
541		{what} can be "err" for stderr, "out" for stdout or empty for
542		socket output.
543		Returns -1 when there is no buffer.
544
545		Can also be used as a |method|: >
546			GetChannel()->ch_getbufnr(what)
547
548ch_getjob({channel})						*ch_getjob()*
549		Get the Job associated with {channel}.
550		If there is no job calling |job_status()| on the returned Job
551		will result in "fail".
552
553		Can also be used as a |method|: >
554			GetChannel()->ch_getjob()
555
556
557ch_info({handle})						*ch_info()*
558		Returns a Dictionary with information about {handle}.  The
559		items are:
560		   "id"		  number of the channel
561		   "status"	  "open", "buffered" or "closed", like
562				  ch_status()
563		When opened with ch_open():
564		   "hostname"	  the hostname of the address
565		   "port"	  the port of the address
566		   "sock_status"  "open" or "closed"
567		   "sock_mode"	  "NL", "RAW", "JSON" or "JS"
568		   "sock_io"	  "socket"
569		   "sock_timeout" timeout in msec
570		When opened with job_start():
571		   "out_status"	  "open", "buffered" or "closed"
572		   "out_mode"	  "NL", "RAW", "JSON" or "JS"
573		   "out_io"	  "null", "pipe", "file" or "buffer"
574		   "out_timeout"  timeout in msec
575		   "err_status"	  "open", "buffered" or "closed"
576		   "err_mode"	  "NL", "RAW", "JSON" or "JS"
577		   "err_io"	  "out", "null", "pipe", "file" or "buffer"
578		   "err_timeout"  timeout in msec
579		   "in_status"	  "open" or "closed"
580		   "in_mode"	  "NL", "RAW", "JSON" or "JS"
581		   "in_io"	  "null", "pipe", "file" or "buffer"
582		   "in_timeout"	  timeout in msec
583
584		Can also be used as a |method|: >
585			GetChannel()->ch_info()
586
587
588ch_log({msg} [, {handle}])					*ch_log()*
589		Write String {msg} in the channel log file, if it was opened
590		with |ch_logfile()|.
591		When {handle} is passed the channel number is used for the
592		message.
593		{handle} can be a Channel or a Job that has a Channel.  The
594		Channel must be open for the channel number to be used.
595
596		Can also be used as a |method|: >
597			'did something'->ch_log()
598
599
600ch_logfile({fname} [, {mode}])					*ch_logfile()*
601		Start logging channel activity to {fname}.
602		When {fname} is an empty string: stop logging.
603
604		When {mode} is omitted or "a" append to the file.
605		When {mode} is "w" start with an empty file.
606
607		Use |ch_log()| to write log messages.  The file is flushed
608		after every message, on Unix you can use "tail -f" to see what
609		is going on in real time.
610
611		To enable the log very early, to see what is received from a
612		terminal during startup, use |--cmd|: >
613			vim --cmd "call ch_logfile('logfile', 'w')"
614<
615		This function is not available in the |sandbox|.
616		NOTE: the channel communication is stored in the file, be
617		aware that this may contain confidential and privacy sensitive
618		information, e.g. a password you type in a terminal window.
619
620		Can also be used as a |method|: >
621			'logfile'->ch_logfile('w')
622
623
624ch_open({address} [, {options}])				*ch_open()*
625		Open a channel to {address}.  See |channel|.
626		Returns a Channel.  Use |ch_status()| to check for failure.
627
628		{address} is a String and has the form "hostname:port", e.g.,
629		"localhost:8765".
630
631		When using an IPv6 address, enclose it within square brackets.
632		E.g., "[2001:db8::1]:8765".
633
634		If {options} is given it must be a |Dictionary|.
635		See |channel-open-options|.
636
637		Can also be used as a |method|: >
638			GetAddress()->ch_open()
639
640
641ch_read({handle} [, {options}])					*ch_read()*
642		Read from {handle} and return the received message.
643		{handle} can be a Channel or a Job that has a Channel.
644		For a NL channel this waits for a NL to arrive, except when
645		there is nothing more to read (channel was closed).
646		See |channel-more|.
647
648		Can also be used as a |method|: >
649			GetChannel()->ch_read()
650
651
652ch_readblob({handle} [, {options}])			*ch_readblob()*
653		Like ch_read() but reads binary data and returns a |Blob|.
654		See |channel-more|.
655
656		Can also be used as a |method|: >
657			GetChannel()->ch_readblob()
658
659
660ch_readraw({handle} [, {options}])			*ch_readraw()*
661		Like ch_read() but for a JS and JSON channel does not decode
662		the message.  For a NL channel it does not block waiting for
663		the NL to arrive, but otherwise works like ch_read().
664		See |channel-more|.
665
666		Can also be used as a |method|: >
667			GetChannel()->ch_readraw()
668
669
670ch_sendexpr({handle}, {expr} [, {options}])			*ch_sendexpr()*
671		Send {expr} over {handle}.  The {expr} is encoded
672		according to the type of channel.  The function cannot be used
673		with a raw channel.
674		See |channel-use|.				*E912*
675		{handle} can be a Channel or a Job that has a Channel.
676
677		Can also be used as a |method|: >
678			GetChannel()->ch_sendexpr(expr)
679
680
681ch_sendraw({handle}, {expr} [, {options}])		*ch_sendraw()*
682		Send |String| or |Blob| {expr} over {handle}.
683		Works like |ch_sendexpr()|, but does not encode the request or
684		decode the response.  The caller is responsible for the
685		correct contents.  Also does not add a newline for a channel
686		in NL mode, the caller must do that.  The NL in the response
687		is removed.
688		See |channel-use|.
689
690		Can also be used as a |method|: >
691			GetChannel()->ch_sendraw(rawexpr)
692
693
694ch_setoptions({handle}, {options})			*ch_setoptions()*
695		Set options on {handle}:
696			"callback"	the channel callback
697			"timeout"	default read timeout in msec
698			"mode"		mode for the whole channel
699		See |ch_open()| for more explanation.
700		{handle} can be a Channel or a Job that has a Channel.
701
702		Note that changing the mode may cause queued messages to be
703		lost.
704
705		These options cannot be changed:
706			"waittime"	only applies to |ch_open()|
707
708		Can also be used as a |method|: >
709			GetChannel()->ch_setoptions(options)
710
711
712ch_status({handle} [, {options}])				*ch_status()*
713		Return the status of {handle}:
714			"fail"		failed to open the channel
715			"open"		channel can be used
716			"buffered"	channel can be read, not written to
717			"closed"	channel can not be used
718		{handle} can be a Channel or a Job that has a Channel.
719		"buffered" is used when the channel was closed but there is
720		still data that can be obtained with |ch_read()|.
721
722		If {options} is given it can contain a "part" entry to specify
723		the part of the channel to return the status for: "out" or
724		"err".  For example, to get the error status: >
725			ch_status(job, {"part": "err"})
726<
727		Can also be used as a |method|: >
728			GetChannel()->ch_status()
729
730==============================================================================
7319. Starting a job with a channel			*job-start* *job*
732
733To start a job and open a channel for stdin/stdout/stderr: >
734    let job = job_start(command, {options})
735
736You can get the channel with: >
737    let channel = job_getchannel(job)
738
739The channel will use NL mode.  If you want another mode it's best to specify
740this in {options}.  When changing the mode later some text may have already
741been received and not parsed correctly.
742
743If the command produces a line of output that you want to deal with, specify
744a handler for stdout: >
745    let job = job_start(command, {"out_cb": "MyHandler"})
746The function will be called with the channel and a message. You would define
747it like this: >
748    func MyHandler(channel, msg)
749
750Without the handler you need to read the output with |ch_read()| or
751|ch_readraw()|. You can do this in the close callback, see |read-in-close-cb|.
752
753Note that if the job exits before you read the output, the output may be lost.
754This depends on the system (on Unix this happens because closing the write end
755of a pipe causes the read end to get EOF).  To avoid this make the job sleep
756for a short while before it exits.
757
758The handler defined for "out_cb" will not receive stderr.  If you want to
759handle that separately, add an "err_cb" handler: >
760    let job = job_start(command, {"out_cb": "MyHandler",
761	    \			  "err_cb": "ErrHandler"})
762
763If you want to handle both stderr and stdout with one handler use the
764"callback" option: >
765    let job = job_start(command, {"callback": "MyHandler"})
766
767Depending on the system, starting a job can put Vim in the background, the
768started job gets the focus.  To avoid that, use the `foreground()` function.
769This might not always work when called early, put in the callback handler or
770use a timer to call it after the job has started.
771
772You can send a message to the command with ch_evalraw().  If the channel is in
773JSON or JS mode you can use ch_evalexpr().
774
775There are several options you can use, see |job-options|.
776For example, to start a job and write its output in buffer "dummy": >
777	let logjob = job_start("tail -f /tmp/log",
778			     \ {'out_io': 'buffer', 'out_name': 'dummy'})
779	sbuf dummy
780
781
782Job input from a buffer ~
783							*in_io-buffer*
784To run a job that reads from a buffer: >
785	let job = job_start({command},
786	    \ {'in_io': 'buffer', 'in_name': 'mybuffer'})
787<
788							*E915* *E918*
789The buffer is found by name, similar to |bufnr()|. The buffer must exist and
790be loaded when job_start() is called.
791
792By default this reads the whole buffer.  This can be changed with the "in_top"
793and "in_bot" options.
794
795A special mode is when "in_top" is set to zero and "in_bot" is not set: Every
796time a line is added to the buffer, the last-but-one line will be sent to the
797job stdin.  This allows for editing the last line and sending it when pressing
798Enter.
799							*channel-close-in*
800When not using the special mode the pipe or socket will be closed after the
801last line has been written.  This signals the reading end that the input
802finished.  You can also use |ch_close_in()| to close it sooner.
803
804NUL bytes in the text will be passed to the job (internally Vim stores these
805as NL bytes).
806
807
808Reading job output in the close callback ~
809							*read-in-close-cb*
810If the job can take some time and you don't need intermediate results, you can
811add a close callback and read the output there: >
812
813	func! CloseHandler(channel)
814	  while ch_status(a:channel, {'part': 'out'}) == 'buffered'
815	    echomsg ch_read(a:channel)
816	  endwhile
817	endfunc
818	let job = job_start(command, {'close_cb': 'CloseHandler'})
819
820You will want to do something more useful than "echomsg".
821
822==============================================================================
82310. Starting a job without a channel			*job-start-nochannel*
824
825To start another process without creating a channel: >
826    let job = job_start(command,
827	\ {"in_io": "null", "out_io": "null", "err_io": "null"})
828
829This starts {command} in the background, Vim does not wait for it to finish.
830
831When Vim sees that neither stdin, stdout or stderr are connected, no channel
832will be created.  Often you will want to include redirection in the command to
833avoid it getting stuck.
834
835There are several options you can use, see |job-options|.
836
837							*job-start-if-needed*
838To start a job only when connecting to an address does not work, do something
839like this: >
840	let channel = ch_open(address, {"waittime": 0})
841	if ch_status(channel) == "fail"
842	  let job = job_start(command)
843	  let channel = ch_open(address, {"waittime": 1000})
844	endif
845
846Note that the waittime for ch_open() gives the job one second to make the port
847available.
848
849==============================================================================
85011. Job functions					*job-functions-details*
851
852job_getchannel({job})					 *job_getchannel()*
853		Get the channel handle that {job} is using.
854		To check if the job has no channel: >
855			if string(job_getchannel(job)) == 'channel fail'
856<
857		Can also be used as a |method|: >
858			GetJob()->job_getchannel()
859
860job_info([{job}])					*job_info()*
861		Returns a Dictionary with information about {job}:
862		   "status"	what |job_status()| returns
863		   "channel"	what |job_getchannel()| returns
864		   "cmd"	List of command arguments used to start the job
865		   "process"	process ID
866		   "tty_in"	terminal input name, empty when none
867		   "tty_out"	terminal output name, empty when none
868		   "exitval"	only valid when "status" is "dead"
869		   "exit_cb"	function to be called on exit
870		   "stoponexit"	|job-stoponexit|
871
872		   Only in Unix:
873		   "termsig"	the signal which terminated the process
874				(See |job_stop()| for the values)
875				only valid when "status" is "dead"
876
877		   Only in MS-Windows:
878		   "tty_type"	Type of virtual console in use.
879				Values are "winpty" or "conpty".
880				See 'termwintype'.
881
882		Without any arguments, returns a List with all Job objects.
883
884		Can also be used as a |method|: >
885			GetJob()->job_info()
886
887
888job_setoptions({job}, {options})			*job_setoptions()*
889		Change options for {job}.  Supported are:
890		   "stoponexit"	|job-stoponexit|
891		   "exit_cb"	|job-exit_cb|
892
893		Can also be used as a |method|: >
894			GetJob()->job_setoptions(options)
895
896
897job_start({command} [, {options}])			*job_start()*
898		Start a job and return a Job object.  Unlike |system()| and
899		|:!cmd| this does not wait for the job to finish.
900		To start a job in a terminal window see |term_start()|.
901
902		If the job fails to start then |job_status()| on the returned
903		Job object results in "fail" and none of the callbacks will be
904		invoked.
905
906		{command} can be a String.  This works best on MS-Windows.  On
907		Unix it is split up in white-separated parts to be passed to
908		execvp().  Arguments in double quotes can contain white space.
909
910		{command} can be a List, where the first item is the executable
911		and further items are the arguments.  All items are converted
912		to String.  This works best on Unix.
913
914		On MS-Windows, job_start() makes a GUI application hidden. If
915		want to show it, Use |:!start| instead.
916
917		The command is executed directly, not through a shell, the
918		'shell' option is not used.  To use the shell: >
919	let job = job_start(["/bin/sh", "-c", "echo hello"])
920<		Or: >
921	let job = job_start('/bin/sh -c "echo hello"')
922<		Note that this will start two processes, the shell and the
923		command it executes.  If you don't want this use the "exec"
924		shell command.
925
926		On Unix $PATH is used to search for the executable only when
927		the command does not contain a slash.
928
929		The job will use the same terminal as Vim.  If it reads from
930		stdin the job and Vim will be fighting over input, that
931		doesn't work.  Redirect stdin and stdout to avoid problems: >
932	let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"])
933<
934		The returned Job object can be used to get the status with
935		|job_status()| and stop the job with |job_stop()|.
936
937		Note that the job object will be deleted if there are no
938		references to it.  This closes the stdin and stderr, which may
939		cause the job to fail with an error.  To avoid this keep a
940		reference to the job.  Thus instead of: >
941	call job_start('my-command')
942<		use: >
943	let myjob = job_start('my-command')
944<		and unlet "myjob" once the job is not needed or is past the
945		point where it would fail (e.g. when it prints a message on
946		startup).  Keep in mind that variables local to a function
947		will cease to exist if the function returns.  Use a
948		script-local variable if needed: >
949	let s:myjob = job_start('my-command')
950<
951		{options} must be a Dictionary.  It can contain many optional
952		items, see |job-options|.
953
954		Can also be used as a |method|: >
955			BuildCommand()->job_start()
956
957
958job_status({job})					*job_status()* *E916*
959		Returns a String with the status of {job}:
960			"run"	job is running
961			"fail"	job failed to start
962			"dead"	job died or was stopped after running
963
964		On Unix a non-existing command results in "dead" instead of
965		"fail", because a fork happens before the failure can be
966		detected.
967
968		If in Vim9 script a variable is declared with type "job" but
969		never assigned to, passing that variable to job_status()
970		returns "fail".
971
972		If an exit callback was set with the "exit_cb" option and the
973		job is now detected to be "dead" the callback will be invoked.
974
975		For more information see |job_info()|.
976
977		Can also be used as a |method|: >
978			GetJob()->job_status()
979
980
981job_stop({job} [, {how}])					*job_stop()*
982		Stop the {job}.  This can also be used to signal the job.
983
984		When {how} is omitted or is "term" the job will be terminated.
985		For Unix SIGTERM is sent.  On MS-Windows the job will be
986		terminated forcedly (there is no "gentle" way).
987		This goes to the process group, thus children may also be
988		affected.
989
990		Effect for Unix:
991			"term"	 SIGTERM (default)
992			"hup"	 SIGHUP
993			"quit"	 SIGQUIT
994			"int"	 SIGINT
995			"kill"	 SIGKILL (strongest way to stop)
996			number	 signal with that number
997
998		Effect for MS-Windows:
999			"term"	 terminate process forcedly (default)
1000			"hup"	 CTRL_BREAK
1001			"quit"	 CTRL_BREAK
1002			"int"	 CTRL_C
1003			"kill"	 terminate process forcedly
1004			Others	 CTRL_BREAK
1005
1006		On Unix the signal is sent to the process group.  This means
1007		that when the job is "sh -c command" it affects both the shell
1008		and the command.
1009
1010		The result is a Number: 1 if the operation could be executed,
1011		0 if "how" is not supported on the system.
1012		Note that even when the operation was executed, whether the
1013		job was actually stopped needs to be checked with
1014		|job_status()|.
1015
1016		If the status of the job is "dead", the signal will not be
1017		sent.  This is to avoid to stop the wrong job (esp. on Unix,
1018		where process numbers are recycled).
1019
1020		When using "kill" Vim will assume the job will die and close
1021		the channel.
1022
1023		Can also be used as a |method|: >
1024			GetJob()->job_stop()
1025
1026
1027==============================================================================
102812. Job options						*job-options*
1029
1030The {options} argument in job_start() is a dictionary.  All entries are
1031optional.  Some options can be used after the job has started, using
1032job_setoptions(job, {options}).  Many options can be used with the channel
1033related to the job, using ch_setoptions(channel, {options}).
1034See |job_setoptions()| and |ch_setoptions()|.
1035
1036						*in_mode* *out_mode* *err_mode*
1037"in_mode"		mode specifically for stdin, only when using pipes
1038"out_mode"		mode specifically for stdout, only when using pipes
1039"err_mode"		mode specifically for stderr, only when using pipes
1040			See |channel-mode| for the values.
1041
1042			Note: when setting "mode" the part specific mode is
1043			overwritten.  Therefore set "mode" first and the part
1044			specific mode later.
1045
1046			Note: when writing to a file or buffer and when
1047			reading from a buffer NL mode is used by default.
1048
1049						*job-noblock*
1050"noblock": 1		When writing use a non-blocking write call.  This
1051			avoids getting stuck if Vim should handle other
1052			messages in between, e.g. when a job sends back data
1053			to Vim.  It implies that when `ch_sendraw()` returns
1054			not all data may have been written yet.
1055			This option was added in patch 8.1.0350, test with: >
1056				if has("patch-8.1.350")
1057				  let options['noblock'] = 1
1058				endif
1059<
1060						*job-callback*
1061"callback": handler	Callback for something to read on any part of the
1062			channel.
1063						*job-out_cb* *out_cb*
1064"out_cb": handler	Callback for when there is something to read on
1065			stdout.  Only for when the channel uses pipes.  When
1066			"out_cb" wasn't set the channel callback is used.
1067			The two arguments are the channel and the message.
1068
1069						*job-err_cb* *err_cb*
1070"err_cb": handler	Callback for when there is something to read on
1071			stderr.  Only for when the channel uses pipes.  When
1072			"err_cb" wasn't set the channel callback is used.
1073			The two arguments are the channel and the message.
1074						*job-close_cb*
1075"close_cb": handler	Callback for when the channel is closed.  Same as
1076			"close_cb" on |ch_open()|, see |close_cb|.
1077						*job-drop*
1078"drop": when		Specifies when to drop messages.  Same as "drop" on
1079			|ch_open()|, see |channel-drop|.  For "auto" the
1080			exit_cb is not considered.
1081						*job-exit_cb*
1082"exit_cb": handler	Callback for when the job ends.  The arguments are the
1083			job and the exit status.
1084			Vim checks up to 10 times per second for jobs that
1085			ended.  The check can also be triggered by calling
1086			|job_status()|, which may then invoke the exit_cb
1087			handler.
1088			Note that data can be buffered, callbacks may still be
1089			called after the process ends.
1090							*job-timeout*
1091"timeout": time		The time to wait for a request when blocking, E.g.
1092			when using ch_evalexpr().  In milliseconds.  The
1093			default is 2000 (2 seconds).
1094						*out_timeout* *err_timeout*
1095"out_timeout": time	Timeout for stdout.  Only when using pipes.
1096"err_timeout": time	Timeout for stderr.  Only when using pipes.
1097			Note: when setting "timeout" the part specific mode is
1098			overwritten.  Therefore set "timeout" first and the
1099			part specific mode later.
1100
1101						*job-stoponexit*
1102"stoponexit": {signal}	Send {signal} to the job when Vim exits.  See
1103			|job_stop()| for possible values.
1104"stoponexit": ""	Do not stop the job when Vim exits.
1105			The default is "term".
1106
1107						*job-term*
1108"term": "open"		Start a terminal in a new window and connect the job
1109			stdin/stdout/stderr to it.  Similar to using
1110			`:terminal`.
1111			NOTE: Not implemented yet!
1112
1113"channel": {channel}	Use an existing channel instead of creating a new one.
1114			The parts of the channel that get used for the new job
1115			will be disconnected from what they were used before.
1116			If the channel was still used by another job this may
1117			cause I/O errors.
1118			Existing callbacks and other settings remain.
1119
1120"pty": 1		Use a pty (pseudo-tty) instead of a pipe when
1121			possible.  This is most useful in combination with a
1122			terminal window, see |terminal|.
1123			{only on Unix and Unix-like systems}
1124
1125				*job-in_io* *in_top* *in_bot* *in_name* *in_buf*
1126"in_io": "null"		disconnect stdin (read from /dev/null)
1127"in_io": "pipe"		stdin is connected to the channel (default)
1128"in_io": "file"		stdin reads from a file
1129"in_io": "buffer"	stdin reads from a buffer
1130"in_top": number	when using "buffer": first line to send (default: 1)
1131"in_bot": number	when using "buffer": last line to send (default: last)
1132"in_name": "/path/file"	the name of the file or buffer to read from
1133"in_buf": number	the number of the buffer to read from
1134
1135				*job-out_io* *out_name* *out_buf*
1136"out_io": "null"	disconnect stdout (goes to /dev/null)
1137"out_io": "pipe"	stdout is connected to the channel (default)
1138"out_io": "file"	stdout writes to a file
1139"out_io": "buffer"	stdout appends to a buffer (see below)
1140"out_name": "/path/file" the name of the file or buffer to write to
1141"out_buf": number	the number of the buffer to write to
1142"out_modifiable": 0	when writing to a buffer, 'modifiable' will be off
1143			(see below)
1144"out_msg": 0		when writing to a new buffer, the first line will be
1145			set to "Reading from channel output..."
1146
1147				*job-err_io* *err_name* *err_buf*
1148"err_io": "out"		stderr messages to go to stdout
1149"err_io": "null"	disconnect stderr  (goes to /dev/null)
1150"err_io": "pipe"	stderr is connected to the channel (default)
1151"err_io": "file"	stderr writes to a file
1152"err_io": "buffer"	stderr appends to a buffer (see below)
1153"err_name": "/path/file" the name of the file or buffer to write to
1154"err_buf": number	the number of the buffer to write to
1155"err_modifiable": 0	when writing to a buffer, 'modifiable' will be off
1156			(see below)
1157"err_msg": 0		when writing to a new buffer, the first line will be
1158			set to "Reading from channel error..."
1159
1160"block_write": number	only for testing: pretend every other write to stdin
1161			will block
1162
1163"env": dict		environment variables for the new process
1164"cwd": "/path/to/dir"	current working directory for the new process;
1165			if the directory does not exist an error is given
1166
1167
1168Writing to a buffer ~
1169							*out_io-buffer*
1170When the out_io or err_io mode is "buffer" and there is a callback, the text
1171is appended to the buffer before invoking the callback.
1172
1173When a buffer is used both for input and output, the output lines are put
1174above the last line, since the last line is what is written to the channel
1175input.  Otherwise lines are appended below the last line.
1176
1177When using JS or JSON mode with "buffer", only messages with zero or negative
1178ID will be added to the buffer, after decoding + encoding.  Messages with a
1179positive number will be handled by a callback, commands are handled as usual.
1180
1181The name of the buffer from "out_name" or "err_name" is compared the full name
1182of existing buffers, also after expanding the name for the current directory.
1183E.g., when a buffer was created with ":edit somename" and the buffer name is
1184"somename" it will use that buffer.
1185
1186If there is no matching buffer a new buffer is created.  Use an empty name to
1187always create a new buffer.  |ch_getbufnr()| can then be used to get the
1188buffer number.
1189
1190For a new buffer 'buftype' is set to "nofile" and 'bufhidden' to "hide".  If
1191you prefer other settings, create the buffer first and pass the buffer number.
1192					*out_modifiable* *err_modifiable*
1193The "out_modifiable" and "err_modifiable" options can be used to set the
1194'modifiable' option off, or write to a buffer that has 'modifiable' off.  That
1195means that lines will be appended to the buffer, but the user can't easily
1196change the buffer.
1197					*out_msg* *err_msg*
1198The "out_msg" option can be used to specify whether a new buffer will have the
1199first line set to "Reading from channel output...".  The default is to add the
1200message.  "err_msg" does the same for channel error.
1201
1202When an existing buffer is to be written where 'modifiable' is off and the
1203"out_modifiable" or "err_modifiable" options is not zero, an error is given
1204and the buffer will not be written to.
1205
1206When the buffer written to is displayed in a window and the cursor is in the
1207first column of the last line, the cursor will be moved to the newly added
1208line and the window is scrolled up to show the cursor if needed.
1209
1210Undo is synced for every added line.  NUL bytes are accepted (internally Vim
1211stores these as NL bytes).
1212
1213
1214Writing to a file ~
1215							*E920*
1216The file is created with permissions 600 (read-write for the user, not
1217accessible for others).  Use |setfperm()| to change this.
1218
1219If the file already exists it is truncated.
1220
1221==============================================================================
122213. Controlling a job					*job-control*
1223
1224To get the status of a job: >
1225	echo job_status(job)
1226
1227To make a job stop running: >
1228	job_stop(job)
1229
1230This is the normal way to end a job. On Unix it sends a SIGTERM to the job.
1231It is possible to use other ways to stop the job, or even send arbitrary
1232signals.  E.g. to force a job to stop, "kill it": >
1233	job_stop(job, "kill")
1234
1235For more options see |job_stop()|.
1236
1237==============================================================================
123814. Using a prompt buffer				*prompt-buffer*
1239
1240If you want to type input for the job in a Vim window you have a few options:
1241- Use a normal buffer and handle all possible commands yourself.
1242  This will be complicated, since there are so many possible commands.
1243- Use a terminal window.  This works well if what you type goes directly to
1244  the job and the job output is directly displayed in the window.
1245  See |terminal-window|.
1246- Use a window with a prompt buffer. This works well when entering a line for
1247  the job in Vim while displaying (possibly filtered) output from the job.
1248
1249A prompt buffer is created by setting 'buftype' to "prompt". You would
1250normally only do that in a newly created buffer.
1251
1252The user can edit and enter one line of text at the very last line of the
1253buffer.  When pressing Enter in the prompt line the callback set with
1254|prompt_setcallback()| is invoked.  It would normally send the line to a job.
1255Another callback would receive the output from the job and display it in the
1256buffer, below the prompt (and above the next prompt).
1257
1258Only the text in the last line, after the prompt, is editable. The rest of the
1259buffer is not modifiable with Normal mode commands.  It can be modified by
1260calling functions, such as |append()|.  Using other commands may mess up the
1261buffer.
1262
1263After setting 'buftype' to "prompt" Vim does not automatically start Insert
1264mode, use `:startinsert` if you want to enter Insert mode, so that the user
1265can start typing a line.
1266
1267The text of the prompt can be set with the |prompt_setprompt()| function. If
1268no prompt is set with |prompt_setprompt()|, "% " is used. You can get the
1269effective prompt text for a buffer, with |prompt_getprompt()|.
1270
1271The user can go to Normal mode and navigate through the buffer.  This can be
1272useful to see older output or copy text.
1273
1274The CTRL-W key can be used to start a window command, such as CTRL-W w to
1275switch to the next window.  This also works in Insert mode (use Shift-CTRL-W
1276to delete a word). When leaving the window Insert mode will be stopped.  When
1277coming back to the prompt window Insert mode will be restored.
1278
1279Any command that starts Insert mode, such as "a", "i", "A" and "I", will move
1280the cursor to the last line.  "A" will move to the end of the line, "I" to the
1281start of the line.
1282
1283Here is an example for Unix.  It starts a shell in the background and prompts
1284for the next shell command.  Output from the shell is displayed above the
1285prompt. >
1286
1287	" Create a channel log so we can see what happens.
1288	call ch_logfile('logfile', 'w')
1289
1290	" Function handling a line of text has been typed.
1291	func TextEntered(text)
1292	  " Send the text to a shell with Enter appended.
1293	  call ch_sendraw(g:shell_job, a:text .. "\n")
1294	endfunc
1295
1296	" Function handling output from the shell: Added above the prompt.
1297	func GotOutput(channel, msg)
1298	  call append(line("$") - 1, "- " . a:msg)
1299	endfunc
1300
1301	" Function handling the shell exist: close the window.
1302	func JobExit(job, status)
1303	  quit!
1304	endfunc
1305
1306	" Start a shell in the background.
1307	let shell_job = job_start(["/bin/sh"], #{
1308		\ out_cb: function('GotOutput'),
1309		\ err_cb: function('GotOutput'),
1310		\ exit_cb: function('JobExit'),
1311		\ })
1312	let shell_ch = job_getchannel(shell_job)
1313
1314	new
1315	set buftype=prompt
1316	let buf = bufnr('')
1317	call prompt_setcallback(buf, function("TextEntered"))
1318	eval prompt_setprompt(buf, "shell command: ")
1319
1320	" start accepting shell commands
1321	startinsert
1322<
1323
1324
1325 vim:tw=78:ts=8:noet:ft=help:norl:
1326