From 11abd095210fc84e5dcee87b9baed86061caefe4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 1 May 2020 14:26:37 +0200 Subject: patch 8.2.0674: some source files are too big Problem: Some source files are too big. Solution: Move text formatting functions to a new file. (Yegappan Lakshmanan, closes #6021) --- src/getchar.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/getchar.c') diff --git a/src/getchar.c b/src/getchar.c index 7bbdf3583..9d8c0d4bf 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -684,6 +684,46 @@ stuffnumReadbuff(long n) add_num_buff(&readbuf1, n); } +/* + * Stuff a string into the typeahead buffer, such that edit() will insert it + * literally ("literally" TRUE) or interpret is as typed characters. + */ + void +stuffescaped(char_u *arg, int literally) +{ + int c; + char_u *start; + + while (*arg != NUL) + { + // Stuff a sequence of normal ASCII characters, that's fast. Also + // stuff K_SPECIAL to get the effect of a special key when "literally" + // is TRUE. + start = arg; + while ((*arg >= ' ' +#ifndef EBCDIC + && *arg < DEL // EBCDIC: chars above space are normal +#endif + ) + || (*arg == K_SPECIAL && !literally)) + ++arg; + if (arg > start) + stuffReadbuffLen(start, (long)(arg - start)); + + // stuff a single special character + if (*arg != NUL) + { + if (has_mbyte) + c = mb_cptr2char_adv(&arg); + else + c = *arg++; + if (literally && ((c < ' ' && c != TAB) || c == DEL)) + stuffcharReadbuff(Ctrl_V); + stuffcharReadbuff(c); + } + } +} + /* * Read a character from the redo buffer. Translates K_SPECIAL, CSI and * multibyte characters. -- cgit v1.2.1