Problem: Giving error messages is not flexible.
Solution: Add semsg(). Change argument from "char_u *" to "char *", also
for msg() and get rid of most MSG macros. (Ozaki Kiichi, closes
vim/vim#3302) Also make emsg() accept a "char *" argument. Get rid of
an enormous number of type casts.
f9e3e09fdc
Problem: Cannot interrupt shell used for filename expansion. (Dominique
Pellé)
Solution: Do set tmode in mch_delay(). (closesvim/vim#6770)
0981c8729e
Neovim does not run settmode() in os_delay() so this patch is mostly N/A.
Do not port Vim's flags (ie. MCH_DELAY_SETTMODE) for mch_delay().
The following code..
au VimEnter,DirChanged * if filereadable('.git/cscope.out') |
\ exe 'cs add .git/cscope.out' | endif
..would lead to this issue:
Error detected while processing VimEnter Auto commands for "*":
cs_read_prompt EOF: Interrupted system call
Error detected while processing VimEnter Auto commands for "*":
E262: error reading cscope connection 0
A signal, in this case SIGCHLD, during a system call leads to errno being set
to EINTR. Ignore it.
This is merely a workaround for the time being. We don't block SIGCHLD signals,
since they're needed by libuv. The proper fix would be to rewrite if_cscope.c to
use libuv for handling processes.
Problem: If cscope fails a search Vim may hang.
Solution: Bail out when a search error is encountered. (Safouane Baroudi,
closesvim/vim#2598)
1274d33493
Problem: When running :make the output may be in the system encoding,
different from 'encoding'.
Solution: Add the 'makeencoding' option. (Ken Takata)
2c7292dc5b
The calls to `fgets` in `src/nvim/if_cscope.c` (and elsewhere) can show
communication errors to the user if a signal is delivered during its
system calls. For plugins that proxy subprocess output into cscope
requests, a `SIGCHLD` might *always* interfere with calls into `fgets`.
To see this in a debugger, put a breakpoint on `cs_reading_emsg` and
watch signals come in (with lldb, using `process handle --notify true
--pass true`). Next, run a subcommand from neovim that calls through
cscope when it returns. A tag picker plugin, like vim-picker and fzy,
with `cscopetag` and `cscopetagorder=0` set, reproduced this reliably.
The breakpoint will hit after a `SIGCHLD` is delivered, and `errno` will
be set to 4, `EINTR`.
The caller of `fgets` should retry when `NULL` is returned with `errno`
set to `EINTR`.
Problem: Checking did_throw after executing autocommands is wrong. (Daniel
Hahler)
Solution: Call aborting() instead, and only when autocommands were executed.
21662be221
../src/nvim/if_cscope.c: In function 'cs_read_prompt':
../src/nvim/if_cscope.c:1771:47: warning: comparison is always true due to limited range of data type [-Wtype-limits]
while ((ch = (char)getc(csinfo[i].fr_fp)) != EOF && ch != CSCOPE_PROMPT[0])
^~
../src/nvim/if_cscope.c:1804:14: warning: comparison is always false due to limited range of data type [-Wtype-limits]
if (ch == EOF) {
^~
../src/nvim/if_cscope.c:1816:14: warning: negative integer implicitly converted to unsigned type [-Wsign-conversion]
ch = EOF;
^~~
../src/nvim/if_cscope.c:1821:12: warning: comparison is always false due to limited range of data type [-Wtype-limits]
if (ch == EOF)
^~
Since EOF is -1, it will be converted to a large unsigned value to
compare with unsigned char and never match. Use an int to store the
return from getc so we can safely compare it and, once known to be
valid, cast it to char when storing it into buf.
Signed-off-by: James McCoy <jamessan@jamessan.com>
move `call_shell` to misc1.c
Move some fns to state.c
Move some fns to option.c
Move some fns to memline.c
Move `vim_chdir*` fns to file_search.c
Move some fns to new module, bytes.c
Move some fns to fileio.c