> In §9 of channel help is mentionned the legacy vimscript out_cb handler. 
> 
> 
> " let job = job_start(command, {"out_cb": "MyHandler"})
> The function will be called with the channel and a message. You would define
> it like this: >
>     func MyHandler(channel, msg)  
>     "
> 
> 
> I tried this def OutCb function but got the following  message error :
> 
> " def OutCb(l: list<any>)
>     # echomsg 'OutCb' .. string(l)
>     # eval [][0]
>   enddef
> 
>   def ExitCb(l: list<any>)
>     # echomsg 'ExitCb' .. string(l)
>     # sleep 1m
>     # source += l
>     # echomsg 'Exiting ' .. string(l) .. ' ' .. string(@z)
>   enddef
> 
>   jobid = job_start(zip_cmd, { out_cb: OutCb, exit_cb:  ExitCb, mode: 
> 'raw', timeout: 1200000 } ) "
> 
> Error message:
> " This is a valid directory .
>   Jobid: process 14328 run
>   Press ENTER or type command to continue
>   E118: Too many arguments for function: <lambda>4 "
> 
> 
> How to port and deal with this in vim9 script that seems to have only one
> argue ?
In Vim9 script the type of the arguments is checked.  That helps you
writing correct functions, and once written it is easier to read back.
It does require a bit of extra text.
Here is an exmple that will help you:
	vim9script
	# Create a channel log so we can see what happens.
	ch_logfile('logfile', 'w')
	var shell_job: job
	# Function handling a line of text that has been typed.
	def TextEntered(text: string)
	  # Send the text to a shell with Enter appended.
	  ch_sendraw(shell_job, text .. "\n")
	enddef
	# Function handling output from the shell: Add it above the prompt.
	def GotOutput(channel: channel, msg: string)
	  append(line("$") - 1, "- " .. msg)
	enddef
	# Function handling the shell exits: close the window.
	def JobExit(job: job, status: number)
	  quit!
	enddef
	# Start a shell in the background.
	shell_job = job_start(["/bin/sh"], {
				 out_cb: GotOutput,
				 err_cb: GotOutput,
				 exit_cb: JobExit,
				 })
	new
	set buftype=prompt
	var buf = bufnr('')
	prompt_setcallback(buf, TextEntered)
	prompt_setprompt(buf, "shell command: ")
	# start accepting shell commands
	startinsert
-- 
hundred-and-one symptoms of being an internet addict:
115. You are late picking up your kid from school and try to explain
     to the teacher you were stuck in Web traffic.
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
--- 
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/20220227132532.984DD1C14BE%40moolenaar.net.
Sunday, February 27, 2022
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment