Forum: PC-Programmierung vim build project async


von Chandler B. (chandler)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.