mirror of
https://github.com/vim/vim.git
synced 2025-11-15 23:14:06 -05:00
patch 8.1.0027: difficult to make a plugin that feeds a line to a job
Problem: Difficult to make a plugin that feeds a line to a job. Solution: Add the nitial code for the "prompt" buftype.
This commit is contained in:
@@ -5836,4 +5836,38 @@ job_stop(job_T *job, typval_T *argvars, char *type)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
invoke_prompt_callback(void)
|
||||
{
|
||||
typval_T rettv;
|
||||
int dummy;
|
||||
typval_T argv[2];
|
||||
char_u *text;
|
||||
char_u *prompt;
|
||||
linenr_T lnum = curbuf->b_ml.ml_line_count;
|
||||
|
||||
// Add a new line for the prompt before invoking the callback, so that
|
||||
// text can always be inserted above the last line.
|
||||
ml_append(lnum, (char_u *)"", 0, FALSE);
|
||||
curwin->w_cursor.lnum = lnum + 1;
|
||||
curwin->w_cursor.col = 0;
|
||||
|
||||
if (curbuf->b_prompt_callback == NULL)
|
||||
return;
|
||||
text = ml_get(lnum);
|
||||
prompt = prompt_text();
|
||||
if (STRLEN(text) >= STRLEN(prompt))
|
||||
text += STRLEN(prompt);
|
||||
argv[0].v_type = VAR_STRING;
|
||||
argv[0].vval.v_string = vim_strsave(text);
|
||||
argv[1].v_type = VAR_UNKNOWN;
|
||||
|
||||
call_func(curbuf->b_prompt_callback,
|
||||
(int)STRLEN(curbuf->b_prompt_callback),
|
||||
&rettv, 1, argv, NULL, 0L, 0L, &dummy, TRUE,
|
||||
curbuf->b_prompt_partial, NULL);
|
||||
clear_tv(&argv[0]);
|
||||
clear_tv(&rettv);
|
||||
}
|
||||
|
||||
#endif /* FEAT_JOB_CHANNEL */
|
||||
|
||||
Reference in New Issue
Block a user