@@ -93,7 +93,12 @@ function! s:exit_callback(msg) abort
93
93
if len (s: results )
94
94
let view = winsaveview ()
95
95
silent execute ' % delete'
96
- call setline (1 , s: results )
96
+ if has (' nvim' )
97
+ " the -2 slicing is required to remove an extra new line
98
+ call setline (1 , s: results [0 ][:-2 ])
99
+ else
100
+ call setline (1 , s: results )
101
+ endif
97
102
call winrestview (view )
98
103
endif
99
104
@@ -106,20 +111,35 @@ function! s:exit_callback(msg) abort
106
111
endfunction
107
112
108
113
function ! s: vim .execute (cmd, lines , start_lineno, is_method, cb , ex_cb) dict
109
- if exists (' s:job' ) && job_status (s: job ) != ' stop'
110
- call job_stop (s: job )
111
- endif
114
+ if has (' nvim' )
115
+ if exists (' s:job' ) && jobwait ([s: job ], 0 )[0 ] == -1
116
+ call jobstop (s: job )
117
+ endif
112
118
113
- let s: job = job_start (a: cmd , {
114
- \ ' callback' : {_, m - > a: cb (m , a: start_lineno , a: is_method )},
115
- \ ' exit_cb' : {_, m - > a: ex_cb (m )},
116
- \ ' in_mode' : ' nl' ,
117
- \ })
119
+ let s: job = jobstart (a: cmd , {
120
+ \ ' on_stdout' : {_, m - > a: cb (m , a: start_lineno , a: is_method )},
121
+ \ ' on_exit' : {_, m - > a: ex_cb (m )},
122
+ \ ' stdout_buffered' : 1 ,
123
+ \ })
124
+
125
+ call chansend (s: job , a: lines )
126
+ call chanclose (s: job , ' stdin' )
127
+ elseif v: version >= 800 && ! has (' nvim' )
128
+ if exists (' s:job' ) && job_status (s: job ) != ' dead'
129
+ call job_stop (s: job )
130
+ endif
131
+
132
+ let s: job = job_start (a: cmd , {
133
+ \ ' callback' : {_, m - > a: cb (m , a: start_lineno , a: is_method )},
134
+ \ ' exit_cb' : {_, m - > a: ex_cb (m )},
135
+ \ ' in_mode' : ' nl' ,
136
+ \ })
118
137
119
- let channel = job_getchannel (s: job )
120
- if ch_status (channel) == # ' open'
121
- call ch_sendraw (channel, a: lines )
122
- call ch_close_in (channel)
138
+ let channel = job_getchannel (s: job )
139
+ if ch_status (channel) == # ' open'
140
+ call ch_sendraw (channel, a: lines )
141
+ call ch_close_in (channel)
142
+ endif
123
143
endif
124
144
endfunction
125
145
0 commit comments