aboutsummaryrefslogtreecommitdiff
path: root/editors/vi.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* win32: add support for virtual terminal inputRon Yorston2023-03-051-7/+0
| | | | | | | | | | | | | | | | Alter certain applets to support virtual terminal input, if enabled. In many places this is achieved by building previously excluded upstream terminal-handling code. The busybox-w32 implementation of termios(3) functions does nothing if virtual terminal input is disabled, so it can be invoked regardless. Some applet-specific terminal-handling code is also required. This affects less, more, vi and command line editing in the shell. (The `more` applet isn't enabled in the default configuration.) This series of patches adds about 1.7KB to the binaries.
* vi: introduce 'binary' option and '-b' flagRon Yorston2023-02-061-11/+35
| | | | | | | | | | | | | | vim has the 'binary' option and corresponding '-b' command line flag. These allow files to be opened in binary mode, ignoring the 'fileformats' setting and treating all files as of type 'unix'. Add these to busybox-w32 vi so it's possible to edit files which have a mixture of different line endings. Costs 80-112 bytes. (GitHub issue #285)
* vi: allow change of 'fileformat' optionRon Yorston2023-02-061-12/+23
| | | | | | | | | For some reason the 'fileformat' option was made read-only when it was introduced in commit 420afde92e (vi: add fileformats option). I think I'd read some vim documentation that made it seem more complicated than it really is. Costs 48 bytes.
* Merge branch 'busybox' into mergeRon Yorston2022-10-121-1/+7
|\
| * *: style fixDenys Vlasenko2022-08-301-1/+1
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: add 'ZQ' quitting commandGrob Grobmann2022-08-021-1/+7
| | | | | | | | | | | | | | | | | | | | | | Busybox vi provides the 'ZZ' command to save and close the similar 'ZQ' command just exits without saving. function old new delta do_cmd 4222 4244 +22 Signed-off-by: Grob Grobmann <grobgrobmann@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2022-06-271-23/+52
|\|
| * vi: handle autoindent in 'cc' commandRon Yorston2022-06-261-24/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the 'cc' command is invoked with autoindent enabled it should use the indent of the first line being changed. The size of the indent has to be established before char_insert() is called as the lines being changed are deleted. Introduce a new global variable, newindent, to handle this. The indentcol global is now effectively a static variable in char_insert(). function old new delta do_cmd 4247 4308 +61 vi_main 416 422 +6 char_insert 891 875 -16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 67/-16) Total: 51 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: fix regression in autoindent handlingRon Yorston2022-06-261-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suppose autoindent is enabled and we have a line with an initial tab where we want to split the words onto separate lines: split the words One way to do this is with the sequence 'f r<CR>;r<CR>', but in BusyBox vi the result is: split he words This is a regression introduced by commit 9659a8db1 (vi: remove autoindent from otherwise empty lines). The amount of indentation is being recorded when the 'r' command inserts a newline but isn't subsequently reset. A fix is to only record the indent when in insert or replace mode. Proper handling of the 'o' and 'O' commands then requires them to switch to insert mode before calling char_insert() to insert a newline. function old new delta char_insert 884 891 +7 do_cmd 4243 4247 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 11/0) Total: 11 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2022-05-121-1/+2
|\|
| * vi: fix backspace over tab in commandsRon Yorston2022-04-201-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Colon and search commands are entered on the status line. Since the cursor position wasn't being tracked backspacing over a tab resulted in a mismatch between the actual and apparent content of the command. function old new delta get_input_line 178 180 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 2/0) Total: 2 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
* | Merge branch 'busybox'Ron Yorston2022-04-071-13/+21
|\|
| * vi: improved handling of backspace in replace modeRon Yorston2022-03-041-6/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In replace mode ('R' command) the backspace character should get special treatment: - backspace only goes back to the start of the replacement; - backspacing over replaced characters restores the original text. Prior to this commit BusyBox vi deleted the characters both before and after the cursor in replace mode. function old new delta undo_pop - 235 +235 char_insert 858 884 +26 indicate_error 81 84 +3 find_range 654 657 +3 static.text_yank 77 79 +2 do_cmd 4486 4243 -243 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/1 up/down: 269/-243) Total: 26 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge busybox into mergeRon Yorston2022-02-091-2/+2
|\| | | | | | | | | | | | | | | Fix conflicts in reset and ash. Redefine the new safe_read_key() as a reference to read_key(). Disable SHA256_HWACCEL.
| * ash,hush: fix handling of SIGINT while waiting for interactive inputDenys Vlasenko2022-01-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta lineedit_read_key 160 237 +77 __pgetc 522 589 +67 fgetc_interactive 244 309 +65 safe_read_key - 39 +39 read_key 588 607 +19 record_pending_signo 23 32 +9 signal_handler 75 81 +6 .rodata 104312 104309 -3 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 6/1 up/down: 282/-3) Total: 279 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | vi: add fileformats optionRon Yorston2021-08-301-3/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a limited version of the 'fileformats' option. Only the 'dos,unix' and 'unix,dos' settings are allowed with the former as default. When a file is read for editing its format is detected. If it only has LF line endings it's treated as being of type 'unix' otherwise its type is 'dos'. When an empty edit buffer is created it's given the first file type listed in 'fileformats'. The file type is stored in the read-only option 'fileformat' and is used to select the appropriate line endings when the file is written. See GitHub issue #220. Adds 168 bytes to the binary.
* | Merge branch 'busybox' into mergeRon Yorston2021-08-301-49/+83
|\|
| * vi: further changes to colon addressesRon Yorston2021-08-291-49/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Improved error messages: - specify when a search fails or a mark isn't set; - warn when line addresses are out of range or when a range of lines is reversed. Addresses are limited to the number of lines in the file so a command like ':2000000000' (go to the two billionth line) no longer causes a long pause. Improved vi compatibility of '+' and '-' operators that aren't followed immediately by a number: :4+++= 7 :3-2= 1 :3 - 2= 4 (yes, really!) In a command like ':,$' the empty address before the separator now correctly refers to the current line. (The similar case ':1,' was already being handled.) And all with a tidy reduction in bloat (32-bit build): function old new delta colon 4029 4069 +40 .rodata 99348 99253 -95 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 40/-95) Total: -55 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | vi: skip permission check on .exrcRon Yorston2021-08-221-0/+4
| | | | | | | | | | POSIX requires that the .exrc file is only writable by its owner. Our bogus permissions can't confirm this so just skip the test.
* | Merge branch 'busybox' into mergeRon Yorston2021-08-221-85/+107
|\|
| * vi: code shrink print_literal()Ron Yorston2021-08-221-17/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Simplify the function print_literal() which is used to format a string that may contain unprintable characters or control characters. - Unprintable characters were being displayed in normal text rather than the bold used for the rest of the message. This doesn't seem particularly helpful and it upsets the calculation of the width of the message in show_status_line(). Use '?' rather than '.' for unprintable characters. - Newlines in the string were displayed as both '^J' and '$', which is somewhat redundant. function old new delta not_implemented 199 108 -91 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-91) Total: -91 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: searches in colon commands should wrapRon Yorston2021-08-221-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The '/' and '?' search commands wrap to the other end of the buffer if the search target isn't found. When searches are used to specify addresses in colon commands they should do the same. (In traditional vi and vim this behaviour is controlled by the 'wrapscan' option. BusyBox vi doesn't have this option and always uses the default behaviour.) function old new delta colon 4033 4077 +44 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 44/0) Total: 44 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: don't right shift empty linesRon Yorston2021-08-201-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | The right shift command ('>') shouldn't affect empty lines. function old new delta do_cmd 4860 4894 +34 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 34/0) Total: 34 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: support ~/.exrcRon Yorston2021-08-201-8/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Run initialisation commands from ~/.exrc. As with EXINIT these commands are processed before the first file is loaded. Commands starting with double quotes are ignored. This is how comments are often included in .exrc. function old new delta vi_main 268 406 +138 colon 4033 4071 +38 .rodata 108411 108442 +31 packed_usage 34128 34118 -10 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 207/-10) Total: 197 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: changes to handling of -c and EXINITRon Yorston2021-08-201-58/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite handling of command line arguments so any number of -c commands will be processed. Previously only two -c commands were allowed (or one if EXINIT was set). Process commands from EXINIT before the first file is read into memory, as specified by POSIX. function old new delta run_cmds - 77 +77 .rodata 108410 108411 +1 vi_main 305 268 -37 edit_file 816 764 -52 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/2 up/down: 78/-89) Total: -11 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2021-08-171-0/+1
|\|
| * vi: fix compile-time error if !ENABLE_FEATURE_VI_SETOPTSDenys Vlasenko2021-08-161-0/+1
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2021-07-171-20/+139
|\|
| * vi: remove redundant assignmentDenys Vlasenko2021-07-141-1/+0
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: fix regex search compilation errorRon Yorston2021-07-131-1/+1
| | | | | | | | | | | | | | Building with FEATURE_VI_REGEX_SEARCH enabled fails. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
| * vi: somewhat more readable code, no logic changesDenys Vlasenko2021-07-131-8/+9
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: allow delimiter in ':s' to be escapedRon Yorston2021-07-131-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When regular expressions are allowed in search commands it becomes possible to escape the delimiter in search/replace commands. For example, this command will replace '/abc' with '/abc/': :s/\/abc/\/abc\//g The code to split the command into 'find' and 'replace' strings should allow for this possibility. VI_REGEX_SEARCH isn't enabled by default. When it is: function old new delta strchr_backslash - 38 +38 colon 4378 4373 -5 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 38/-5) Total: 33 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: allow regular expressions in ':s' commandsDenys Vlasenko2021-07-131-15/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | BusyBox vi has never supported the use of regular expressions in search/replace (':s') commands. Implement this using GNU regex when VI_REGEX_SEARCH is enabled. The implementation: - uses basic regular expressions, to match those used in the search command; - only supports substitution of back references ('\0' - '\9') in the replacement string. Any other character following a backslash is treated as that literal character. VI_REGEX_SEARCH isn't enabled in the default build. In that case: function old new delta colon 4036 4033 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-3) Total: -3 bytes When VI_REGEX_SEARCH is enabled: function old new delta colon 4036 4378 +342 .rodata 108207 108229 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 364/0) Total: 364 bytes v2: Rebase. Code shrink. Ensure empty replacement string is null terminated. Signed-off-by: Andrey Dobrovolsky <andrey.dobrovolsky.odessa@gmail.com> Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: improve handling of anchored searchesRon Yorston2021-07-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suppose we search for a git conflict marker '<<<<<<< HEAD' using the command '/^<<<'. Using 'n' to go to the next match finds '<<<' on the current line, apparently ignoring the '^' anchor. Set a flag in the compiled regular expression to indicate that the start of the string should not be considered a beginning-of-line anchor. An exception has to be made when the search starts from the beginning of the file. Make a similar change for end-of-line anchors. This doesn't affect a default build with VI_REGEX_SEARCH disabled. When it's enabled: function old new delta char_search 247 285 +38 Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: use basic regular expressions for searchRon Yorston2021-07-131-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Both traditional vi and vim use basic regular expressions for search. Also, they don't allow matches to extend across line endings. Thus with the file: 123 234 the search '/2.*4$' should find the second '2', not the first. Make BusyBox vi do the same. Whether or not VI_REGEX_SEARCH is enabled: function old new delta ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0) Total: 0 bytes Signed-off-by: Andrey Dobrovolsky <andrey.dobrovolsky.odessa@gmail.com> Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: allow 'gg' to specify a rangeRon Yorston2021-07-131-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 7b93e317c (vi: enable 'dG' command. Closes 11801) allowed 'G' to be used as a range specifier for change/yank/delete operations. Add similar support for 'gg'. This requires setting the 'cmd_error' flag if 'g' is followed by any character other than another 'g'. function old new delta do_cmd 4852 4860 +8 .rodata 108179 108180 +1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 9/0) Total: 9 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2021-06-281-56/+88
|\|
| * vi: stored search pattern applies to ':s'Ron Yorston2021-06-271-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The same stored search pattern applies to both search ('/') and search/replace (':s') operations. A search/replace operation with an empty "find" string (':s//abc/') should use the last stored search pattern, if available, and issue an error message if there is none. If the "find" string is not empty it should replace the stored search pattern. function old new delta colon 3952 4024 +72 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 72/0) Total: 72 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: fix read outside of text buffer during insertS Harris2021-06-231-1/+1
| | | | | | | | | | Signed-off-by: S Harris <S.E.Harris@kent.ac.uk> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: fix backward search with GNU regexRon Yorston2021-06-211-20/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With FEATURE_VI_REGEX_SEARCH enabled backward searches don't work. This is problematic on distros that enable regexes, such as Tiny Core Linux and Fedora. When calling GNU re_search() with a negative range parameter (indicating a backward search) the start offset must be set to the end of the area being searched. The return value of re_search() is the offset of the matched pattern from the start of the area being searched. For a successful search (positive return value) char_search() can return the pointer to the start of the area plus the offset. FEATURE_VI_REGEX_SEARCH isn't enabled by default but when it is: function old new delta char_search 256 247 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-9) Total: -9 bytes Signed-off-by: Andrey Dobrovolsky <andrey.dobrovolsky.odessa@gmail.com> Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: reject change command when motion failsRon Yorston2021-06-161-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the motion command used to define the range of a change, yank or delete fails the whole command should be rejected. BusyBox vi already handled failed searches in these circumstances. Add some more cases: - non-existent mark: d'x - movement beyond end of file: c99999+ or 99999<< This is implemented using a global variable which is set when a command error is detected. Unlike the case of motion within a line it's insufficient to check that the motion command doesn't move the cursor: this fails to process 'LyL' correctly, for example, as the second 'L' doesn't move the cursor. function old new delta indicate_error 75 82 +7 find_range 686 692 +6 do_cmd 4851 4852 +1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 14/0) Total: 14 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: up/down motion beyond end of file should failRon Yorston2021-06-161-25/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In traditional vi and vim line motion commands ('+'/'-'/'j'/'k') fail if the movement would exceed the bounds of the file. BusyBox vi allowed such commands to succeed, leaving the cursor on the first or last character of the file. Make BusyBox vi work like vi/vim. For the 'G'/'H'/'L' commands traditional vi treats an out of bounds result as an error, vim doesn't. BusyBox vi behaves like vim, both before and after this patch. function old new delta do_cmd 4785 4851 +66 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 66/0) Total: 66 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: keep autoindent if line isn't emptyRon Yorston2021-06-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When ESC is entered to leave insert mode any autoindent should only be removed if there's no content beyond the indent. This may be the case if a line has been split by entering insert mode and then entering a CR. Add a check to ensure there's only a newline after the indent. function old new delta char_insert 912 929 +17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 17/0) Total: 17 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: initialise tabstop once not for each fileRon Yorston2021-06-141-1/+1
| | | | | | | | | | | | | | | | The default tabstop value should be set during early start up, not reset for each new file. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: ':r' should insert text after current lineRon Yorston2021-06-141-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When no line number is specified ':read' should place the inserted text after the current line, not before. This used to be correct but was broken when commit 0c42a6b07 (vi: fix empty line range regression) revealed a bug in commit 7a8ceb4eb (vi: changes to line addresses for colon commands). function old new delta colon 3960 3952 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-8) Total: -8 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * *: --help tweaksDenys Vlasenko2021-06-131-2/+7
| | | | | | | | | | | | | | | | | | | | function old new delta .rodata 103190 103189 -1 packed_usage 33590 33566 -24 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-25) Total: -25 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | Merge branch 'busybox' into mergeRon Yorston2021-06-071-34/+77
|\|
| * vi: remove autoindent from otherwise empty linesRon Yorston2021-06-021-26/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lines that have no content apart from automatic indentation should be treated as empty when the user hits return or ESC. The implementation uses the global variable 'indentcol'. Usually this is zero. It can also be -1 to indicate an 'O' (open above) command, replacing the overloading of the tabstop option bit. A value greater than zero indicates that the current line has been autoindented to the given column (or that the autoindent has been adjusted with ctrl-D). Any other change to the line resets 'indentcol' to zero. Replace strspn() with ident_len(). The latter handles the unlikely case that it's called on the last line of a file which doesn't have a terminating newline. function old new delta char_insert 741 912 +171 indent_len - 42 +42 do_cmd 4781 4785 +4 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 217/0) Total: 217 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: make autoindent respect expandtab settingRon Yorston2021-06-021-13/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Autoindent took a copy of the indent from a neighbouring line, which may not have respected the expandtab setting. Determine the target column and construct a suitable indent. This will consist entirely of spaces if expandtab is enabled or an efficient combination of tabs and spaces otherwise. function old new delta char_insert 719 741 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: make cursor positioning more vi compatibleRon Yorston2021-06-021-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 24effc7a3 (vi: cursor positioning after whole-line 'y') tried to save a few bytes by treating whole-line deletion the same as whole-line yank. If the deletion removed the last lines of the file the cursor was left beyond the end of the file. Revert the part of the commit related to whole-line deletion. Position the cursor on the first non-whitespace character of the line when whole lines are 'put'. function old new delta do_cmd 4759 4781 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>