Skip to content

Commit 74c0afe

Browse files
committed
fix: repair neovim job callbacks and vimscript regressions
Fix Neovim signal sending and job output routing, and restore valid Vimscript assignments/escaping that were breaking plumbing and register pastes.
1 parent 932487f commit 74c0afe

1 file changed

Lines changed: 19 additions & 14 deletions

File tree

plugin/acme.vim

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ function s:JobKill(job, sig)
205205
let map = {'int': 2, 'hup': 1, 'term': 15, 'kill': 9}
206206
let sig = get(map, sig, 15)
207207
endif
208-
silent! call luaeval("vim.loop.kill(vim.fn.jobpid(_A), _B)", [a:job, sig])
208+
silent! call luaeval('vim.loop.kill(vim.fn.jobpid(_A[1]), _A[2])', [a:job, sig])
209209
else
210210
call job_stop(a:job, a:sig)
211211
endif
@@ -258,9 +258,10 @@ function s:GetJobBufNr(job)
258258
endif
259259
endfunc
260260

261-
function s:NvimOut(id, data, event) dict
262-
if empty(a:data) | return | endif
263-
let b = self.buf
261+
function s:NvimOut(id, data, event)
262+
if empty(a:data) || a:data == [''] | return | endif
263+
let job = get(s:nvim_jobs, a:id, {})
264+
let b = get(job, 'buf', -1)
264265
if bufexists(b)
265266
let mod = getbufvar(b, '&modifiable')
266267
call setbufvar(b, '&modifiable', 1)
@@ -273,12 +274,12 @@ function s:NvimOut(id, data, event) dict
273274
endif
274275
call setbufvar(b, '&modifiable', mod)
275276
endif
276-
if has_key(self, 'callback') && !empty(self.callback)
277-
call call(self.callback, [a:id, ''])
277+
if has_key(job, 'callback') && !empty(job.callback)
278+
call call(job.callback, [a:id, ''])
278279
endif
279280
endfunc
280281

281-
function s:NvimExit(id, status, event) dict
282+
function s:NvimExit(id, status, event)
282283
if has_key(s:nvim_jobs, a:id)
283284
call remove(s:nvim_jobs, a:id)
284285
endif
@@ -290,9 +291,10 @@ function s:JobStartNvim(cmd, outb, ctxb, opts, inp)
290291
\ 'on_exit': function('s:NvimExit'),
291292
\ 'on_stdout': function('s:NvimOut'),
292293
\ 'on_stderr': function('s:NvimOut'),
293-
\ 'buf': a:outb,
294-
\ 'callback': get(a:opts, 'callback', ''),
295294
\ }
295+
if a:inp != ''
296+
let job_opts.stdin = 'pipe'
297+
endif
296298
if has_key(a:opts, 'cwd')
297299
let job_opts.cwd = a:opts.cwd
298300
endif
@@ -302,7 +304,10 @@ function s:JobStartNvim(cmd, outb, ctxb, opts, inp)
302304
if job <= 0
303305
return
304306
endif
305-
let s:nvim_jobs[job] = job_opts
307+
let s:nvim_jobs[job] = {
308+
\ 'buf': a:outb,
309+
\ 'callback': get(a:opts, 'callback', ''),
310+
\ }
306311
call s:Started(job, s:BufWin(a:outb) != 0 ? a:outb : a:ctxb, a:cmd)
307312
if a:inp != ''
308313
call chansend(job, a:inp)
@@ -877,7 +882,7 @@ endfunc
877882

878883
function s:Scroll(topline)
879884
let v = winsaveview()
880-
v.topline = a:topline
885+
let v.topline = a:topline
881886
call winrestview(v)
882887
endfunc
883888

@@ -924,8 +929,8 @@ function s:Layout(col)
924929
let s = float2nr(h / (n * (n > s:tops ? 1.75 : 1)))
925930
endif
926931
call win_move_statusline(win_id2win(w) - 1, winheight(w) - s)
927-
h -= s
928-
n -= 1
932+
let h -= s
933+
let n -= 1
929934
endfor
930935
call timer_start(0, {_ -> s:Fit(a:col)})
931936
endfunc
@@ -1402,4 +1407,4 @@ if s:ctrlexe != ''
14021407
\ })
14031408
endif
14041409
let $EDITOR = s:ctrlexe
1405-
endif
1410+
endif

0 commit comments

Comments
 (0)