Mercurial > vim
diff src/getchar.c @ 20237:918245588b50 v8.2.0674
patch 8.2.0674: some source files are too big
Commit: https://github.com/vim/vim/commit/11abd095210fc84e5dcee87b9baed86061caefe4
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri May 1 14:26:37 2020 +0200
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 01 May 2020 14:30:04 +0200 |
parents | dcec86d796bc |
children | 8a694c9447d7 |
line wrap: on
line diff
--- a/src/getchar.c +++ b/src/getchar.c @@ -685,6 +685,46 @@ stuffnumReadbuff(long 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. * The redo buffer is left as it is.