Mercurial > vim
view src/vimrun.c @ 30535:04df44c52d65 v9.0.0603
patch 9.0.0603: with 'nosplitscroll' folds are not handled correctly
Commit: https://github.com/vim/vim/commit/7c1cbb6cd437c6e0c3ccc05840cc931108b4a60a
Author: Luuk van Baal <luukvbaal@gmail.com>
Date: Tue Sep 27 12:31:15 2022 +0100
patch 9.0.0603: with 'nosplitscroll' folds are not handled correctly
Problem: With 'nosplitscroll' folds are not handled correctly.
Solution: Take care of closed folds when moving the cursor. (Luuk van Baal,
closes #11234)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 27 Sep 2022 13:45:04 +0200 |
parents | 2559dc02bd64 |
children |
line wrap: on
line source
/* vi:set ts=8 sts=4 sw=4 noet: * * VIM - Vi IMproved by Bram Moolenaar * this file by Vince Negri * * Do ":help uganda" in Vim to read copying and usage conditions. * Do ":help credits" in Vim to see a list of people who contributed. * See README.txt for an overview of the Vim source code. */ /* * vimrun.c - Tiny Win32 program to safely run an external command in a * DOS console. * This program is required to avoid that typing CTRL-C in the DOS * console kills Vim. Now it only kills vimrun. */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN #endif #include <windows.h> int main(void) { const wchar_t *p; wchar_t *cmd; size_t cmdlen; int retval; int inquote = 0; int silent = 0; HANDLE hstdout; DWORD written; p = (const wchar_t *)GetCommandLineW(); /* * Skip the executable name, which might be in "". */ while (*p) { if (*p == L'"') inquote = !inquote; else if (!inquote && *p == L' ') { ++p; break; } ++p; } while (*p == L' ') ++p; /* * "-s" argument: don't wait for a key hit. */ if (p[0] == L'-' && p[1] == L's' && p[2] == L' ') { silent = 1; p += 3; while (*p == L' ') ++p; } // Print the command, including quotes and redirection. hstdout = GetStdHandle(STD_OUTPUT_HANDLE); WriteConsoleW(hstdout, p, wcslen(p), &written, NULL); WriteConsoleW(hstdout, L"\r\n", 2, &written, NULL); // If the command starts and ends with double quotes, // Enclose the command in parentheses. cmd = NULL; cmdlen = wcslen(p); if (cmdlen >= 2 && p[0] == L'"' && p[cmdlen - 1] == L'"') { cmdlen += 3; cmd = malloc(cmdlen * sizeof(wchar_t)); if (cmd == NULL) { perror("vimrun malloc(): "); return -1; } _snwprintf(cmd, cmdlen, L"(%s)", p); p = cmd; } /* * Do it! */ retval = _wsystem(p); if (cmd) free(cmd); if (retval == -1) perror("vimrun system(): "); else if (retval != 0) printf("shell returned %d\n", retval); if (!silent) { puts("Hit any key to close this window..."); while (_kbhit()) (void)_getch(); (void)_getch(); } return retval; }