blob: bffb3e2833509c8ac5a01e7a2b64843b2fbd3f55 [file] [log] [blame]
Bram Moolenaarb1c91982018-05-17 17:04:55 +02001*channel.txt* For Vim version 8.1. Last change: 2018 Apr 18
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7 Inter-process communication *channel*
8
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01009Vim uses channels to communicate with other processes.
Bram Moolenaar269f5952016-07-15 22:54:41 +020010A channel uses a socket or pipes. *socket-interface*
Bram Moolenaar38a55632016-02-15 22:07:32 +010011Jobs can be used to start processes and communicate with them.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010012The Netbeans interface also uses a channel. |netbeans|
13
Bram Moolenaar38a55632016-02-15 22:07:32 +0100141. 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. Starting a job with a channel |job-start|
229. Starting a job without a channel |job-start-nochannel|
2310. Job options |job-options|
2411. Controlling a job |job-control|
Bram Moolenaarf2732452018-06-03 14:47:35 +02002512. Using a prompt buffer |prompt-buffer|
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010026
27{Vi does not have any of these features}
Bram Moolenaar38a55632016-02-15 22:07:32 +010028{only when compiled with the |+channel| feature for channel stuff}
Bram Moolenaarf37506f2016-08-31 22:22:10 +020029 You can check this with: `has('channel')`
Bram Moolenaar38a55632016-02-15 22:07:32 +010030{only when compiled with the |+job| feature for job stuff}
Bram Moolenaarf37506f2016-08-31 22:22:10 +020031 You can check this with: `has('job')`
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010032
33==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +0100341. Overview *job-channel-overview*
35
36There are four main types of jobs:
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200371. A daemon, serving several Vim instances.
Bram Moolenaar38a55632016-02-15 22:07:32 +010038 Vim connects to it with a socket.
392. One job working with one Vim instance, asynchronously.
40 Uses a socket or pipes.
413. A job performing some work for a short time, asynchronously.
42 Uses a socket or pipes.
434. Running a filter, synchronously.
44 Uses pipes.
45
Bram Moolenaar77cdfd12016-03-12 12:57:59 +010046For when using sockets See |job-start|, |job-start-nochannel| and
47|channel-open|. For 2 and 3, one or more jobs using pipes, see |job-start|.
Bram Moolenaar38a55632016-02-15 22:07:32 +010048For 4 use the ":{range}!cmd" command, see |filter|.
49
50Over the socket and pipes these protocols are available:
51RAW nothing known, Vim cannot tell where a message ends
52NL every message ends in a NL (newline) character
53JSON JSON encoding |json_encode()|
54JS JavaScript style JSON-like encoding |js_encode()|
55
56Common combination are:
57- Using a job connected through pipes in NL mode. E.g., to run a style
58 checker and receive errors and warnings.
Bram Moolenaar7dda86f2018-04-20 22:36:41 +020059- Using a daemon, connecting over a socket in JSON mode. E.g. to lookup
Bram Moolenaar09521312016-08-12 22:54:35 +020060 cross-references in a database.
Bram Moolenaar38a55632016-02-15 22:07:32 +010061
62==============================================================================
Bram Moolenaar26852122016-05-24 20:02:38 +0200632. Channel demo *channel-demo* *demoserver.py*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010064
65This requires Python. The demo program can be found in
66$VIMRUNTIME/tools/demoserver.py
67Run it in one terminal. We will call this T1.
68
69Run Vim in another terminal. Connect to the demo server with: >
Bram Moolenaar38a55632016-02-15 22:07:32 +010070 let channel = ch_open('localhost:8765')
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010071
72In T1 you should see:
73 === socket opened === ~
74
75You can now send a message to the server: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +010076 echo ch_evalexpr(channel, 'hello!')
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010077
78The message is received in T1 and a response is sent back to Vim.
79You can see the raw messages in T1. What Vim sends is:
80 [1,"hello!"] ~
81And the response is:
82 [1,"got it"] ~
83The number will increase every time you send a message.
84
85The server can send a command to Vim. Type this on T1 (literally, including
Bram Moolenaarfb1f6262016-01-31 20:24:32 +010086the quotes):
87 ["ex","echo 'hi there'"] ~
88And you should see the message in Vim. You can move the cursor a word forward:
89 ["normal","w"] ~
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010090
91To handle asynchronous communication a callback needs to be used: >
Bram Moolenaar38a55632016-02-15 22:07:32 +010092 func MyHandler(channel, msg)
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010093 echo "from the handler: " . a:msg
94 endfunc
Bram Moolenaar02e83b42016-02-21 20:10:26 +010095 call ch_sendexpr(channel, 'hello!', {'callback': "MyHandler"})
Bram Moolenaar38a55632016-02-15 22:07:32 +010096Vim will not wait for a response. Now the server can send the response later
97and MyHandler will be invoked.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +010098
99Instead of giving a callback with every send call, it can also be specified
100when opening the channel: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100101 call ch_close(channel)
102 let channel = ch_open('localhost:8765', {'callback': "MyHandler"})
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100103 call ch_sendexpr(channel, 'hello!')
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100104
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100105When trying out channels it's useful to see what is going on. You can tell
106Vim to write lines in log file: >
107 call ch_logfile('channellog', 'w')
108See |ch_logfile()|.
109
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100110==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +01001113. Opening a channel *channel-open*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100112
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100113To open a channel: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100114 let channel = ch_open({address} [, {options}])
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100115 if ch_status(channel) == "open"
116 " use the channel
Bram Moolenaar38a55632016-02-15 22:07:32 +0100117
118Use |ch_status()| to see if the channel could be opened.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100119
120{address} has the form "hostname:port". E.g., "localhost:8765".
121
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100122{options} is a dictionary with optional entries: *channel-open-options*
Bram Moolenaar4d919d72016-02-05 22:36:41 +0100123
124"mode" can be: *channel-mode*
125 "json" - Use JSON, see below; most convenient way. Default.
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100126 "js" - Use JS (JavaScript) encoding, more efficient than JSON.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100127 "nl" - Use messages that end in a NL character
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100128 "raw" - Use raw messages
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100129 *channel-callback* *E921*
Bram Moolenaar38a55632016-02-15 22:07:32 +0100130"callback" A function that is called when a message is received that is
131 not handled otherwise. It gets two arguments: the channel
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100132 and the received message. Example: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100133 func Handle(channel, msg)
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100134 echo 'Received: ' . a:msg
135 endfunc
Bram Moolenaar38a55632016-02-15 22:07:32 +0100136 let channel = ch_open("localhost:8765", {"callback": "Handle"})
137<
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100138 When "mode" is "json" or "js" the "msg" argument is the body
139 of the received message, converted to Vim types.
140 When "mode" is "nl" the "msg" argument is one message,
141 excluding the NL.
142 When "mode" is "raw" the "msg" argument is the whole message
143 as a string.
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100144
145 For all callbacks: Use |function()| to bind it to arguments
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100146 and/or a Dictionary. Or use the form "dict.function" to bind
147 the Dictionary.
Bram Moolenaar06d2d382016-05-20 17:24:11 +0200148
149 Callbacks are only called at a "safe" moment, usually when Vim
150 is waiting for the user to type a character. Vim does not use
151 multi-threading.
152
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100153 *close_cb*
154"close_cb" A function that is called when the channel gets closed, other
Bram Moolenaar38a55632016-02-15 22:07:32 +0100155 than by calling ch_close(). It should be defined like this: >
156 func MyCloseHandler(channel)
Bram Moolenaar06d2d382016-05-20 17:24:11 +0200157< Vim will invoke callbacks that handle data before invoking
158 close_cb, thus when this function is called no more data will
Bram Moolenaar958dc692016-12-01 15:34:12 +0100159 be passed to the callbacks.
160 *channel-drop*
161"drop" Specifies when to drop messages:
162 "auto" When there is no callback to handle a message.
163 The "close_cb" is also considered for this.
164 "never" All messages will be kept.
165
Bram Moolenaar06d2d382016-05-20 17:24:11 +0200166 *waittime*
Bram Moolenaar38a55632016-02-15 22:07:32 +0100167"waittime" The time to wait for the connection to be made in
Bram Moolenaarf3913272016-02-25 00:00:01 +0100168 milliseconds. A negative number waits forever.
169
170 The default is zero, don't wait, which is useful if a local
171 server is supposed to be running already. On Unix Vim
172 actually uses a 1 msec timeout, that is required on many
173 systems. Use a larger value for a remote server, e.g. 10
174 msec at least.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100175 *channel-timeout*
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100176"timeout" The time to wait for a request when blocking, E.g. when using
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100177 ch_evalexpr(). In milliseconds. The default is 2000 (2
Bram Moolenaar38a55632016-02-15 22:07:32 +0100178 seconds).
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100179
Bram Moolenaar595e64e2016-02-07 19:19:53 +0100180When "mode" is "json" or "js" the "callback" is optional. When omitted it is
181only possible to receive a message after sending one.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100182
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100183To change the channel options after opening it use |ch_setoptions()|. The
184arguments are similar to what is passed to |ch_open()|, but "waittime" cannot
185be given, since that only applies to opening the channel.
Bram Moolenaar4d919d72016-02-05 22:36:41 +0100186
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100187For example, the handler can be added or changed: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100188 call ch_setoptions(channel, {'callback': callback})
189When "callback" is empty (zero or an empty string) the handler is removed.
190
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100191After a callback has been invoked Vim will update the screen and put the
192cursor back where it belongs. Thus the callback should not need to do
193`:redraw`.
194
Bram Moolenaar38a55632016-02-15 22:07:32 +0100195The timeout can be changed: >
196 call ch_setoptions(channel, {'timeout': msec})
197<
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100198 *channel-close* *E906*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100199Once done with the channel, disconnect it like this: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100200 call ch_close(channel)
201When a socket is used this will close the socket for both directions. When
202pipes are used (stdin/stdout/stderr) they are all closed. This might not be
203what you want! Stopping the job with job_stop() might be better.
Bram Moolenaar187db502016-02-27 14:44:26 +0100204All readahead is discarded, callbacks will no longer be invoked.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100205
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100206Note that a channel is closed in three stages:
207 - The I/O ends, log message: "Closing channel". There can still be queued
208 messages to read or callbacks to invoke.
209 - The readahead is cleared, log message: "Clearing channel". Some variables
210 may still reference the channel.
211 - The channel is freed, log message: "Freeing channel".
212
Bram Moolenaarcbebd482016-02-07 23:02:56 +0100213When the channel can't be opened you will get an error message. There is a
214difference between MS-Windows and Unix: On Unix when the port doesn't exist
215ch_open() fails quickly. On MS-Windows "waittime" applies.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200216*E898* *E901* *E902*
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100217
218If there is an error reading or writing a channel it will be closed.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200219*E630* *E631*
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100220
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100221==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +01002224. Using a JSON or JS channel *channel-use*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100223
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100224If mode is JSON then a message can be sent synchronously like this: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100225 let response = ch_evalexpr(channel, {expr})
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100226This awaits a response from the other side.
227
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100228When mode is JS this works the same, except that the messages use
Bram Moolenaar38a55632016-02-15 22:07:32 +0100229JavaScript encoding. See |js_encode()| for the difference.
Bram Moolenaar595e64e2016-02-07 19:19:53 +0100230
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100231To send a message, without handling a response or letting the channel callback
232handle the response: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100233 call ch_sendexpr(channel, {expr})
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100234
235To send a message and letting the response handled by a specific function,
236asynchronously: >
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100237 call ch_sendexpr(channel, {expr}, {'callback': Handler})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100238
239Vim will match the response with the request using the message ID. Once the
240response is received the callback will be invoked. Further responses with the
241same ID will be ignored. If your server sends back multiple responses you
242need to send them with ID zero, they will be passed to the channel callback.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100243
244The {expr} is converted to JSON and wrapped in an array. An example of the
245message that the receiver will get when {expr} is the string "hello":
246 [12,"hello"] ~
247
248The format of the JSON sent is:
249 [{number},{expr}]
250
251In which {number} is different every time. It must be used in the response
252(if any):
253
254 [{number},{response}]
255
256This way Vim knows which sent message matches with which received message and
257can call the right handler. Also when the messages arrive out of order.
258
Bram Moolenaarf1f07922016-08-26 17:58:53 +0200259A newline character is terminating the JSON text. This can be used to
260separate the read text. For example, in Python:
261 splitidx = read_text.find('\n')
262 message = read_text[:splitidx]
263 rest = read_text[splitidx + 1:]
264
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100265The sender must always send valid JSON to Vim. Vim can check for the end of
266the message by parsing the JSON. It will only accept the message if the end
Bram Moolenaarf1f07922016-08-26 17:58:53 +0200267was received. A newline after the message is optional.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100268
269When the process wants to send a message to Vim without first receiving a
270message, it must use the number zero:
271 [0,{response}]
272
273Then channel handler will then get {response} converted to Vim types. If the
274channel does not have a handler the message is dropped.
275
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100276It is also possible to use ch_sendraw() and ch_evalraw() on a JSON or JS
277channel. The caller is then completely responsible for correct encoding and
278decoding.
Bram Moolenaarcbebd482016-02-07 23:02:56 +0100279
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100280==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +01002815. Channel commands *channel-commands*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100282
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100283With a JSON channel the process can send commands to Vim that will be
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100284handled by Vim internally, it does not require a handler for the channel.
285
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100286Possible commands are: *E903* *E904* *E905*
Bram Moolenaar220adb12016-09-12 12:17:26 +0200287 ["redraw", {forced}]
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100288 ["ex", {Ex command}]
289 ["normal", {Normal mode command}]
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100290 ["expr", {expression}, {number}]
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100291 ["expr", {expression}]
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100292 ["call", {func name}, {argument list}, {number}]
293 ["call", {func name}, {argument list}]
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100294
295With all of these: Be careful what these commands do! You can easily
296interfere with what the user is doing. To avoid trouble use |mode()| to check
297that the editor is in the expected state. E.g., to send keys that must be
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100298inserted as text, not executed as a command:
299 ["ex","if mode() == 'i' | call feedkeys('ClassName') | endif"] ~
300
301Errors in these commands are normally not reported to avoid them messing up
302the display. If you do want to see them, set the 'verbose' option to 3 or
303higher.
304
305
306Command "redraw" ~
307
308The other commands do not update the screen, so that you can send a sequence
309of commands without the cursor moving around. You must end with the "redraw"
310command to show any changed text and show the cursor where it belongs.
311
312The argument is normally an empty string:
313 ["redraw", ""] ~
314To first clear the screen pass "force":
315 ["redraw", "force"] ~
316
317
318Command "ex" ~
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100319
320The "ex" command is executed as any Ex command. There is no response for
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100321completion or error. You could use functions in an |autoload| script:
322 ["ex","call myscript#MyFunc(arg)"]
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100323
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100324You can also use "call |feedkeys()|" to insert any key sequence.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100325
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100326When there is an error a message is written to the channel log, if it exists,
327and v:errmsg is set to the error.
328
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100329
330Command "normal" ~
331
Bram Moolenaar681baaf2016-02-04 20:57:07 +0100332The "normal" command is executed like with ":normal!", commands are not
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100333mapped. Example to open the folds under the cursor:
334 ["normal" "zO"]
335
336
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100337Command "expr" with response ~
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100338
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100339The "expr" command can be used to get the result of an expression. For
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100340example, to get the number of lines in the current buffer:
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100341 ["expr","line('$')", -2] ~
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100342
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100343It will send back the result of the expression:
Bram Moolenaare0fa3742016-02-20 15:47:01 +0100344 [-2, "last line"] ~
345The format is:
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100346 [{number}, {result}]
Bram Moolenaar187db502016-02-27 14:44:26 +0100347
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100348Here {number} is the same as what was in the request. Use a negative number
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100349to avoid confusion with message that Vim sends. Use a different number on
350every request to be able to match the request with the response.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100351
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100352{result} is the result of the evaluation and is JSON encoded. If the
Bram Moolenaar595e64e2016-02-07 19:19:53 +0100353evaluation fails or the result can't be encoded in JSON it is the string
354"ERROR".
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100355
356
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100357Command "expr" without a response ~
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100358
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100359This command is similar to "expr" above, but does not send back any response.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100360Example:
Bram Moolenaarfb1f6262016-01-31 20:24:32 +0100361 ["expr","setline('$', ['one', 'two', 'three'])"] ~
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100362There is no third argument in the request.
363
364
365Command "call" ~
366
367This is similar to "expr", but instead of passing the whole expression as a
368string this passes the name of a function and a list of arguments. This
369avoids the conversion of the arguments to a string and escaping and
370concatenating them. Example:
371 ["call", "line", ["$"], -2] ~
372
373Leave out the fourth argument if no response is to be sent:
374 ["call", "setline", ["$", ["one", "two", "three"]]] ~
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100375
376==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +01003776. Using a RAW or NL channel *channel-raw*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100378
Bram Moolenaarc0514bf2016-11-17 14:50:09 +0100379If mode is RAW or NL then a message can be sent like this: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100380 let response = ch_evalraw(channel, {string})
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100381
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100382The {string} is sent as-is. The response will be what can be read from the
383channel right away. Since Vim doesn't know how to recognize the end of the
Bram Moolenaar38a55632016-02-15 22:07:32 +0100384message you need to take care of it yourself. The timeout applies for reading
385the first byte, after that it will not wait for anything more.
386
Bram Moolenaar910b8aa2016-02-16 21:03:07 +0100387If mode is "nl" you can send a message in a similar way. You are expected
Bram Moolenaar38a55632016-02-15 22:07:32 +0100388to put in the NL after each message. Thus you can also send several messages
389ending in a NL at once. The response will be the text up to and including the
390first NL. This can also be just the NL for an empty response.
391If no NL was read before the channel timeout an empty string is returned.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100392
393To send a message, without expecting a response: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100394 call ch_sendraw(channel, {string})
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100395The process can send back a response, the channel handler will be called with
396it.
397
398To send a message and letting the response handled by a specific function,
399asynchronously: >
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100400 call ch_sendraw(channel, {string}, {'callback': 'MyHandler'})
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100401
Bram Moolenaar38a55632016-02-15 22:07:32 +0100402This {string} can also be JSON, use |json_encode()| to create it and
403|json_decode()| to handle a received JSON message.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100404
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100405It is not possible to use |ch_evalexpr()| or |ch_sendexpr()| on a raw channel.
Bram Moolenaarcbebd482016-02-07 23:02:56 +0100406
Bram Moolenaar818078d2016-08-27 21:58:42 +0200407A String in Vim cannot contain NUL bytes. To send or receive NUL bytes read
408or write from a buffer. See |in_io-buffer| and |out_io-buffer|.
409
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100410==============================================================================
Bram Moolenaar38a55632016-02-15 22:07:32 +01004117. More channel functions *channel-more*
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100412
Bram Moolenaar38a55632016-02-15 22:07:32 +0100413To obtain the status of a channel: ch_status(channel). The possible results
414are:
415 "fail" Failed to open the channel.
416 "open" The channel can be used.
Bram Moolenaar06481422016-04-30 15:13:38 +0200417 "buffered" The channel was closed but there is data to read.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100418 "closed" The channel was closed.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100419
Bram Moolenaar187db502016-02-27 14:44:26 +0100420To obtain the job associated with a channel: ch_getjob(channel)
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100421
Bram Moolenaar38a55632016-02-15 22:07:32 +0100422To read one message from a channel: >
423 let output = ch_read(channel)
424This uses the channel timeout. To read without a timeout, just get any
425message that is available: >
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100426 let output = ch_read(channel, {'timeout': 0})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100427When no message was available then the result is v:none for a JSON or JS mode
Bram Moolenaar4b785f62016-11-29 21:54:44 +0100428channels, an empty string for a RAW or NL channel. You can use |ch_canread()|
429to check if there is something to read.
430
Bram Moolenaar05aafed2017-08-11 19:12:11 +0200431Note that when there is no callback, messages are dropped. To avoid that add
432a close callback to the channel.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100433
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100434To read all output from a RAW channel that is available: >
435 let output = ch_readraw(channel)
Bram Moolenaar38a55632016-02-15 22:07:32 +0100436To read the error output: >
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100437 let output = ch_readraw(channel, {"part": "err"})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100438
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100439ch_read() and ch_readraw() use the channel timeout. When there is nothing to
440read within that time an empty string is returned. To specify a different
441timeout in msec use the "timeout" option:
442 {"timeout": 123} ~
443To read from the error output use the "part" option:
444 {"part": "err"} ~
445To read a message with a specific ID, on a JS or JSON channel:
446 {"id": 99} ~
447When no ID is specified or the ID is -1, the first message is returned. This
448overrules any callback waiting for this message.
449
450For a RAW channel this returns whatever is available, since Vim does not know
451where a message ends.
452For a NL channel this returns one message.
453For a JS or JSON channel this returns one decoded message.
454This includes any sequence number.
455
Bram Moolenaar38a55632016-02-15 22:07:32 +0100456==============================================================================
4578. Starting a job with a channel *job-start* *job*
458
459To start a job and open a channel for stdin/stdout/stderr: >
460 let job = job_start(command, {options})
461
462You can get the channel with: >
463 let channel = job_getchannel(job)
464
465The channel will use NL mode. If you want another mode it's best to specify
466this in {options}. When changing the mode later some text may have already
467been received and not parsed correctly.
468
469If the command produces a line of output that you want to deal with, specify
470a handler for stdout: >
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100471 let job = job_start(command, {"out_cb": "MyHandler"})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100472The function will be called with the channel and a message. You would define
473it like this: >
474 func MyHandler(channel, msg)
475
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100476Without the handler you need to read the output with |ch_read()| or
Bram Moolenaar06481422016-04-30 15:13:38 +0200477|ch_readraw()|. You can do this in the close callback, see |read-in-close-cb|.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100478
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200479Note that if the job exits before you read the output, the output may be lost.
480This depends on the system (on Unix this happens because closing the write end
481of a pipe causes the read end to get EOF). To avoid this make the job sleep
482for a short while before it exits.
483
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100484The handler defined for "out_cb" will not receive stderr. If you want to
485handle that separately, add an "err_cb" handler: >
486 let job = job_start(command, {"out_cb": "MyHandler",
487 \ "err_cb": "ErrHandler"})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100488
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100489If you want to handle both stderr and stdout with one handler use the
490"callback" option: >
491 let job = job_start(command, {"callback": "MyHandler"})
492
Bram Moolenaar3ec574f2017-06-13 18:12:01 +0200493Depending on the system, starting a job can put Vim in the background, the
494started job gets the focus. To avoid that, use the `foreground()` function.
495This might not always work when called early, put in the callback handler or
496use a timer to call it after the job has started.
497
Bram Moolenaar8b1862a2016-02-27 19:21:24 +0100498You can send a message to the command with ch_evalraw(). If the channel is in
499JSON or JS mode you can use ch_evalexpr().
Bram Moolenaar38a55632016-02-15 22:07:32 +0100500
501There are several options you can use, see |job-options|.
Bram Moolenaar187db502016-02-27 14:44:26 +0100502For example, to start a job and write its output in buffer "dummy": >
503 let logjob = job_start("tail -f /tmp/log",
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100504 \ {'out_io': 'buffer', 'out_name': 'dummy'})
Bram Moolenaar187db502016-02-27 14:44:26 +0100505 sbuf dummy
Bram Moolenaar38a55632016-02-15 22:07:32 +0100506
Bram Moolenaar5f148ec2016-03-07 22:59:26 +0100507
508Job input from a buffer ~
Bram Moolenaar818078d2016-08-27 21:58:42 +0200509 *in_io-buffer*
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100510To run a job that reads from a buffer: >
511 let job = job_start({command},
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100512 \ {'in_io': 'buffer', 'in_name': 'mybuffer'})
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100513<
514 *E915* *E918*
515The buffer is found by name, similar to |bufnr()|. The buffer must exist and
516be loaded when job_start() is called.
517
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100518By default this reads the whole buffer. This can be changed with the "in_top"
519and "in_bot" options.
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100520
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100521A special mode is when "in_top" is set to zero and "in_bot" is not set: Every
Bram Moolenaar74675a62017-07-15 13:53:23 +0200522time a line is added to the buffer, the last-but-one line will be sent to the
Bram Moolenaar5f148ec2016-03-07 22:59:26 +0100523job stdin. This allows for editing the last line and sending it when pressing
524Enter.
Bram Moolenaar0874a832016-09-01 15:11:51 +0200525 *channel-close-in*
526When not using the special mode the pipe or socket will be closed after the
527last line has been written. This signals the reading end that the input
528finished. You can also use |ch_close_in()| to close it sooner.
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100529
Bram Moolenaar063b9d12016-07-09 20:21:48 +0200530NUL bytes in the text will be passed to the job (internally Vim stores these
531as NL bytes).
532
Bram Moolenaar06481422016-04-30 15:13:38 +0200533
534Reading job output in the close callback ~
535 *read-in-close-cb*
536If the job can take some time and you don't need intermediate results, you can
537add a close callback and read the output there: >
538
539 func! CloseHandler(channel)
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200540 while ch_status(a:channel, {'part': 'out'}) == 'buffered'
Bram Moolenaar06481422016-04-30 15:13:38 +0200541 echomsg ch_read(a:channel)
542 endwhile
543 endfunc
544 let job = job_start(command, {'close_cb': 'CloseHandler'})
545
546You will want to do something more useful than "echomsg".
547
Bram Moolenaar38a55632016-02-15 22:07:32 +0100548==============================================================================
5499. Starting a job without a channel *job-start-nochannel*
550
551To start another process without creating a channel: >
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100552 let job = job_start(command,
Bram Moolenaar51628222016-12-01 23:03:28 +0100553 \ {"in_io": "null", "out_io": "null", "err_io": "null"})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100554
555This starts {command} in the background, Vim does not wait for it to finish.
556
Bram Moolenaar38a55632016-02-15 22:07:32 +0100557When Vim sees that neither stdin, stdout or stderr are connected, no channel
558will be created. Often you will want to include redirection in the command to
559avoid it getting stuck.
560
561There are several options you can use, see |job-options|.
562
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100563 *job-start-if-needed*
564To start a job only when connecting to an address does not work, do something
565like this: >
Bram Moolenaar38a55632016-02-15 22:07:32 +0100566 let channel = ch_open(address, {"waittime": 0})
567 if ch_status(channel) == "fail"
568 let job = job_start(command)
569 let channel = ch_open(address, {"waittime": 1000})
Bram Moolenaar38a55632016-02-15 22:07:32 +0100570 endif
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100571
572Note that the waittime for ch_open() gives the job one second to make the port
573available.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100574
575==============================================================================
57610. Job options *job-options*
577
578The {options} argument in job_start() is a dictionary. All entries are
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100579optional. Some options can be used after the job has started, using
580job_setoptions(job, {options}). Many options can be used with the channel
581related to the job, using ch_setoptions(channel, {options}).
582See |job_setoptions()| and |ch_setoptions()|.
Bram Moolenaar38a55632016-02-15 22:07:32 +0100583
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100584 *in_mode* *out_mode* *err_mode*
585"in_mode" mode specifically for stdin, only when using pipes
586"out_mode" mode specifically for stdout, only when using pipes
587"err_mode" mode specifically for stderr, only when using pipes
588 See |channel-mode| for the values.
589
590 Note: when setting "mode" the part specific mode is
591 overwritten. Therefore set "mode" first and the part
592 specific mode later.
593
594 Note: when writing to a file or buffer and when
595 reading from a buffer NL mode is used by default.
596
Bram Moolenaardecb14d2016-02-20 23:32:02 +0100597 *job-callback*
598"callback": handler Callback for something to read on any part of the
599 channel.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100600 *job-out_cb* *out_cb*
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100601"out_cb": handler Callback for when there is something to read on
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100602 stdout. Only for when the channel uses pipes. When
603 "out_cb" wasn't set the channel callback is used.
Bram Moolenaar269f5952016-07-15 22:54:41 +0200604 The two arguments are the channel and the message.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100605
606 *job-err_cb* *err_cb*
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100607"err_cb": handler Callback for when there is something to read on
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100608 stderr. Only for when the channel uses pipes. When
609 "err_cb" wasn't set the channel callback is used.
Bram Moolenaar269f5952016-07-15 22:54:41 +0200610 The two arguments are the channel and the message.
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100611 *job-close_cb*
612"close_cb": handler Callback for when the channel is closed. Same as
Bram Moolenaar82af8712016-06-04 20:20:29 +0200613 "close_cb" on |ch_open()|, see |close_cb|.
Bram Moolenaarbc2eada2017-01-02 21:27:47 +0100614 *job-drop*
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200615"drop": when Specifies when to drop messages. Same as "drop" on
Bram Moolenaar51628222016-12-01 23:03:28 +0100616 |ch_open()|, see |channel-drop|. For "auto" the
617 exit_cb is not considered.
Bram Moolenaarbc2eada2017-01-02 21:27:47 +0100618 *job-exit_cb*
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100619"exit_cb": handler Callback for when the job ends. The arguments are the
Bram Moolenaar38a55632016-02-15 22:07:32 +0100620 job and the exit status.
Bram Moolenaarb4ada792016-10-30 21:55:26 +0100621 Vim checks up to 10 times per second for jobs that
622 ended. The check can also be triggered by calling
623 |job_status()|, which may then invoke the exit_cb
624 handler.
Bram Moolenaar06d2d382016-05-20 17:24:11 +0200625 Note that data can be buffered, callbacks may still be
626 called after the process ends.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100627 *job-timeout*
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200628"timeout": time The time to wait for a request when blocking, E.g.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100629 when using ch_evalexpr(). In milliseconds. The
630 default is 2000 (2 seconds).
631 *out_timeout* *err_timeout*
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200632"out_timeout": time Timeout for stdout. Only when using pipes.
633"err_timeout": time Timeout for stderr. Only when using pipes.
Bram Moolenaar4f3f6682016-03-26 23:01:59 +0100634 Note: when setting "timeout" the part specific mode is
635 overwritten. Therefore set "timeout" first and the
636 part specific mode later.
637
Bram Moolenaar02e83b42016-02-21 20:10:26 +0100638 *job-stoponexit*
639"stoponexit": {signal} Send {signal} to the job when Vim exits. See
640 |job_stop()| for possible values.
641"stoponexit": "" Do not stop the job when Vim exits.
642 The default is "term".
643
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100644 *job-term*
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200645"term": "open" Start a terminal in a new window and connect the job
646 stdin/stdout/stderr to it. Similar to using
647 `:terminal`.
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100648 NOTE: Not implemented yet!
Bram Moolenaar38a55632016-02-15 22:07:32 +0100649
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100650"channel": {channel} Use an existing channel instead of creating a new one.
651 The parts of the channel that get used for the new job
652 will be disconnected from what they were used before.
Bram Moolenaar51628222016-12-01 23:03:28 +0100653 If the channel was still used by another job this may
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100654 cause I/O errors.
655 Existing callbacks and other settings remain.
656
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +0200657"pty": 1 Use a pty (pseudo-tty) instead of a pipe when
658 possible. This is most useful in combination with a
659 terminal window, see |terminal|.
660 {only on Unix and Unix-like systems}
661
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100662 *job-in_io* *in_top* *in_bot* *in_name* *in_buf*
663"in_io": "null" disconnect stdin (read from /dev/null)
664"in_io": "pipe" stdin is connected to the channel (default)
665"in_io": "file" stdin reads from a file
666"in_io": "buffer" stdin reads from a buffer
667"in_top": number when using "buffer": first line to send (default: 1)
668"in_bot": number when using "buffer": last line to send (default: last)
669"in_name": "/path/file" the name of the file or buffer to read from
670"in_buf": number the number of the buffer to read from
Bram Moolenaar38a55632016-02-15 22:07:32 +0100671
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100672 *job-out_io* *out_name* *out_buf*
673"out_io": "null" disconnect stdout (goes to /dev/null)
674"out_io": "pipe" stdout is connected to the channel (default)
675"out_io": "file" stdout writes to a file
Bram Moolenaar51628222016-12-01 23:03:28 +0100676"out_io": "buffer" stdout appends to a buffer (see below)
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100677"out_name": "/path/file" the name of the file or buffer to write to
678"out_buf": number the number of the buffer to write to
Bram Moolenaar9f5842e2016-05-29 16:17:08 +0200679"out_modifiable": 0 when writing to a buffer, 'modifiable' will be off
680 (see below)
Bram Moolenaar169ebb02016-09-07 23:32:23 +0200681"out_msg": 0 when writing to a new buffer, the first line will be
682 set to "Reading from channel output..."
Bram Moolenaar38a55632016-02-15 22:07:32 +0100683
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100684 *job-err_io* *err_name* *err_buf*
685"err_io": "out" stderr messages to go to stdout
686"err_io": "null" disconnect stderr (goes to /dev/null)
687"err_io": "pipe" stderr is connected to the channel (default)
688"err_io": "file" stderr writes to a file
Bram Moolenaar51628222016-12-01 23:03:28 +0100689"err_io": "buffer" stderr appends to a buffer (see below)
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100690"err_name": "/path/file" the name of the file or buffer to write to
691"err_buf": number the number of the buffer to write to
Bram Moolenaar9f5842e2016-05-29 16:17:08 +0200692"err_modifiable": 0 when writing to a buffer, 'modifiable' will be off
693 (see below)
Bram Moolenaar169ebb02016-09-07 23:32:23 +0200694"err_msg": 0 when writing to a new buffer, the first line will be
695 set to "Reading from channel error..."
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100696
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200697"block_write": number only for testing: pretend every other write to stdin
698 will block
699
Bram Moolenaar05aafed2017-08-11 19:12:11 +0200700"env": dict environment variables for the new process
701"cwd": "/path/to/dir" current working directory for the new process;
702 if the directory does not exist an error is given
703
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100704
705Writing to a buffer ~
Bram Moolenaar818078d2016-08-27 21:58:42 +0200706 *out_io-buffer*
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100707When the out_io or err_io mode is "buffer" and there is a callback, the text
Bram Moolenaar5f148ec2016-03-07 22:59:26 +0100708is appended to the buffer before invoking the callback.
709
710When a buffer is used both for input and output, the output lines are put
711above the last line, since the last line is what is written to the channel
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100712input. Otherwise lines are appended below the last line.
Bram Moolenaarc7f0ebc2016-02-27 21:10:09 +0100713
Bram Moolenaar328da0d2016-03-04 22:22:32 +0100714When using JS or JSON mode with "buffer", only messages with zero or negative
715ID will be added to the buffer, after decoding + encoding. Messages with a
716positive number will be handled by a callback, commands are handled as usual.
717
Bram Moolenaar82af8712016-06-04 20:20:29 +0200718The name of the buffer from "out_name" or "err_name" is compared the full name
719of existing buffers, also after expanding the name for the current directory.
720E.g., when a buffer was created with ":edit somename" and the buffer name is
721"somename" it will use that buffer.
722
723If there is no matching buffer a new buffer is created. Use an empty name to
724always create a new buffer. |ch_getbufnr()| can then be used to get the
725buffer number.
Bram Moolenaarc7f0ebc2016-02-27 21:10:09 +0100726
727For a new buffer 'buftype' is set to "nofile" and 'bufhidden' to "hide". If
728you prefer other settings, create the buffer first and pass the buffer number.
Bram Moolenaar169ebb02016-09-07 23:32:23 +0200729 *out_modifiable* *err_modifiable*
Bram Moolenaar9f5842e2016-05-29 16:17:08 +0200730The "out_modifiable" and "err_modifiable" options can be used to set the
731'modifiable' option off, or write to a buffer that has 'modifiable' off. That
732means that lines will be appended to the buffer, but the user can't easily
733change the buffer.
Bram Moolenaar169ebb02016-09-07 23:32:23 +0200734 *out_msg* *err_msg*
735The "out_msg" option can be used to specify whether a new buffer will have the
736first line set to "Reading from channel output...". The default is to add the
737message. "err_msg" does the same for channel error.
738
Bram Moolenaar9f5842e2016-05-29 16:17:08 +0200739When an existing buffer is to be written where 'modifiable' is off and the
740"out_modifiable" or "err_modifiable" options is not zero, an error is given
741and the buffer will not be written to.
742
Bram Moolenaar187db502016-02-27 14:44:26 +0100743When the buffer written to is displayed in a window and the cursor is in the
744first column of the last line, the cursor will be moved to the newly added
745line and the window is scrolled up to show the cursor if needed.
746
Bram Moolenaar063b9d12016-07-09 20:21:48 +0200747Undo is synced for every added line. NUL bytes are accepted (internally Vim
748stores these as NL bytes).
Bram Moolenaar38a55632016-02-15 22:07:32 +0100749
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100750
751Writing to a file ~
Bram Moolenaard6c2f052016-03-14 23:22:59 +0100752 *E920*
Bram Moolenaar77cdfd12016-03-12 12:57:59 +0100753The file is created with permissions 600 (read-write for the user, not
754accessible for others). Use |setfperm()| to change this.
755
756If the file already exists it is truncated.
757
Bram Moolenaar38a55632016-02-15 22:07:32 +0100758==============================================================================
75911. Controlling a job *job-control*
760
761To get the status of a job: >
762 echo job_status(job)
763
764To make a job stop running: >
765 job_stop(job)
766
767This is the normal way to end a job. On Unix it sends a SIGTERM to the job.
768It is possible to use other ways to stop the job, or even send arbitrary
769signals. E.g. to force a job to stop, "kill it": >
770 job_stop(job, "kill")
771
772For more options see |job_stop()|.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100773
Bram Moolenaarf2732452018-06-03 14:47:35 +0200774==============================================================================
77512. Using a prompt buffer *prompt-buffer*
776
777If you want to type input for the job in a Vim window you have a few options:
778- Use a normal buffer and handle all possible commands yourself.
779 This will be complicated, since there are so many possible commands.
780- Use a terminal window. This works well if what you type goes directly to
781 the job and the job output is directly displayed in the window.
782 See |terminal-window|.
783- Use a prompt window. This works well when entering a line for the job in Vim
784 while displaying (possibly filtered) output from the job.
785
786A prompt buffer is created by setting 'buftype' to "prompt". You would
787normally only do that in a newly created buffer.
788
789The user can edit and enter one line of text at the very last line of the
790buffer. When pressing Enter in the prompt line the callback set with
791|prompt_setcallback()| is invoked. It would normally send the line to a job.
792Another callback would receive the output from the job and display it in the
793buffer, below the prompt (and above the next prompt).
794
795Only the text in the last line, after the prompt, is editable. The rest of the
796buffer is not modifiable with Normal mode commands. It can be modified by
797calling functions, such as |append()|. Using other commands may mess up the
798buffer.
799
800After setting 'buftype' to "prompt" Vim does not automatically start Insert
801mode, use `:startinsert` if you want to enter Insert mode, so that the user
802can start typing a line.
803
804The text of the prompt can be set with the |prompt_setprompt()| function.
805
806The user can go to Normal mode and navigate through the buffer. This can be
807useful see older output or copy text.
808
809Any command that starts Insert mode, such as "a", "i", "A" and "I", will move
810the cursor to the last line, after the prompt.
811
Bram Moolenaar3b5f9292016-01-28 22:37:01 +0100812
813 vim:tw=78:ts=8:ft=help:norl: