Hallo,
ich versuche mich gerade in vim und async.
Ich habe eine makefile, welche über einer batch aufgerufen wird.
Normalerweise rufen wir die Batch mit parametern auf, welche dann
wiederum die Makefile aufruft.
Das funktioniert auch bisher ganz gut.
in g:pr3 ist der Pfad zur .bat hinterlegt
1 | function! DoRebuildBatchFile(...)
|
2 |
|
3 | echo "build " g:projectName
|
4 |
|
5 | "save the current working directory so we can come back
|
6 | let l:starting_directory = getcwd()
|
7 |
|
8 | execute("cd " . g:pr3)
|
9 |
|
10 | set makeprg=build.bat
|
11 |
|
12 | cclose
|
13 |
|
14 | " set build parameter
|
15 | if a:1 >= 1
|
16 | if("debug" == a:1)
|
17 | set makeprg+=\ debug
|
18 | endif
|
19 | endif
|
20 |
|
21 | "" Make sure the output doesnt interfere with anything
|
22 | "'!' verhindert das automatische oeffnen der Datei mit der ersten Compilerwarnung
|
23 | "silent make!
|
24 | make!
|
25 |
|
26 | "" Open the output buffer
|
27 | copen
|
28 | echo 'Build Complete'
|
29 |
|
30 | "reset directory
|
31 | execute "cd " . l:starting_directory
|
32 | endfunction
|
Das Problem ist, dass in dieser zeit alles eingefroren ist und ich
warten muss.
Jetzt wollte ich das ganze mit async versuchen, habe da aber Probleme
das irgendwie zum laufen zu bekommen
1 | function! s:onEvent(id, data, event) dict
|
2 | "if((event == "stdout") || (event == "stderr"))
|
3 | "endif
|
4 | "
|
5 | "if (event == "exit")
|
6 | "endif
|
7 |
|
8 | echo "callback onEvent"
|
9 | "echo id
|
10 | "echo data
|
11 | "echo event
|
12 | endfunction
|
13 |
|
14 | function! Test2(...)
|
15 |
|
16 | "save the current working directory so we can come back
|
17 | let l:starting_directory = getcwd()
|
18 |
|
19 | execute("cd " . g:pr3)
|
20 |
|
21 | let l:winnr = win_getid()
|
22 | let l:bufnr = nvim_win_get_buf(winnr)
|
23 | echo getcwd()
|
24 |
|
25 | set makeprg=rebuild.bat
|
26 |
|
27 | if a:0 >= 1
|
28 | if("debug" == a:1)
|
29 | set makeprg+=\ debugg
|
30 | endif
|
31 | endif
|
32 |
|
33 | let l:makeprg = nvim_buf_get_option(bufnr, "makeprg")
|
34 |
|
35 | "let l:cmd = expandcmd(makeprg)
|
36 | let l:cmd = "build.bat"
|
37 |
|
38 | let s:opts = {
|
39 | \ 'on_stderr':function('s:onEvent'),
|
40 | \ 'on_stdout':function('s:onEvent'),
|
41 | \ 'on_exit':function('s:onEvent'),
|
42 | \ 'stdout_buffered':v:true,
|
43 | \ 'stderr_buffered':v:true,
|
44 | \ }
|
45 |
|
46 | let l:job_id = jobstart(cmd, s:opts)
|
47 |
|
48 | "reset directory
|
49 | execute "cd " . l:starting_directory
|
50 |
|
51 | endfunction
|
Es wird zwar gebaut und der allback wird auch aufgerufen,
allerdings wird der parameter "debug" nicht mit übergeben und ich habe
keine Daten im callback.
Wenn ich dort echo id/data/event einkommentiere, bekomme ich fehler,
dass diese nicht bekannt sind.