aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* tui: always hide cursor when flushingFlorian Larysch2017-12-05
| | | | | | | The previous commit ensures that we can never flush the buffer in a state where toggling cursor visibility can corrupt other escape codes. Thus, we can remove the workaround added as part of e838452, simplyfing the code and hiding the cursor on more occasions.
* tui: never flush buffers in midst of unibilium outputFlorian Larysch2017-12-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e83845285 fixed an issue where long (true color) escape sequences got interrupted by the cursor visibility toggling caused by buffer flushes. cdfaecb25 introduces a new issue which causes similar problems: While the old buffer flushing code appended the cursor visibility escapes to the buffer before/after flushing, the new code effectively prepends the sequences. Assume the following sequence of events occurs: - A long escape code is issued using unibi_out when the buffer is almost full - out() gets called for a prefix of that escape code, causing the buffer to fill up - flush_buf(ui, false) is called and (correctly) does not insert any cursor toggling escapes - The rest of the escape code is written into the now empty buffer - At some later point, some other part of nvim calls flush_buf(ui, true), which then toggles the cursor, corrupting the escape code This could possibly also be fixed by tracking the state of the buffer (i.e. does it contain a partially output escape code?), but this seems fragile in the same way e83845285 turned out to be. The root cause for all these problems is the mismatch between nvim's (implicit) assumption that the buffer is flushable at any point in time and the non-atomicity of unibilium's character based callback interface. The proper fix (without modifying unibilium) is to ensure nvim's assumption about the buffer state holds at all times. To that end, add a "cork" flag which ensures one unibi_out-call never splits its output across a buffer flush; if an escape code does not fit into the current buffer, flush it without any part of the escape code in it and insert the whole escape code in the emptied buffer. This is a little more complex because it modifies the buffer in place rather than printing into another buffer, checking the remaining space in the terminal buffer and then memcpy'ing it.
* vim-patch:8.0.0295 (#7671)KunMing Xie2017-12-02
| | | | | | Problem: test_viml hangs. Solution: Put resetting 'more' before sourcing the script. https://github.com/vim/vim/commit/7a073549a3b1e72037a4e98ceb406d057ac9ba50
* tui.c: request focus-reporting (fix regression) #7670Justin M. Keyes2017-12-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ref #7649 ref #7664 27f9b1c7b029d8 caused a regression: it uses loop_schedule_deferred() to defer emitting the "enable focus reporting" termcode. tui_main() never processes `tui_loop.events` (which loop_schedule_deferred() depends on), so the event was never actually processed. But fixing that (by processing `tui_loop.events`) would bring back the problem 27f9b1c7b029 tried to fix: it still emits the event too soon. Instead, do a little dance: schedule the event on `main_loop` and then forward it to `tui_loop`. NOTE: after this commit, in tmux 2.3 with `focus-events` enabled, FocusGained is fired on startup and when resuming from suspend. Using `script` to record the terminal session (and `vterm-dump` to post-process the result): BEFORE: {DECSM 1049}{DECSM 1}{ESC =} {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{CSI 1,43 r} {CUP 1,1} {CUP *}{ED *}{SM 34}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED *}{LF} {SGR *}{LS1}{SGR 94}~ ... AFTER: {CUP *}{ED *}{CSI 1,43 r} {CUP 1,1} {CUP *}{ED *}{SM 34}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED *}{DECSM 2004}{DECSM 1004}{LF} {SGR *}{LS1}{SGR 94}~ ...
* tui: emit some termcodes later (after startup) (#7664)Justin M. Keyes2017-12-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For some reason, enabling focus reporting during terminal setup, causes slow rendering during Nvim startup on tmux 2.3 with the tmux `focus-events` option enabled. To workaround that issue, this commit defers the request. closes #7649 init.vim: call plug#begin('~/.config/nvim/plugged') Plug 'morhetz/gruvbox' call plug#end() set background=light " background light just to see the effect more quickly colorscheme gruvbox .tmux.conf: set -g focus-events on set-option -ga terminal-overrides ",xterm-256color:Tc" set-option -g default-terminal "screen-256color" Using `script` to record the terminal session (and `vterm-dump` to post-process the result): BEFORE this commit: ./build/bin/nvim -u NONE{CR}{LF} {DECSM 1049}{DECSM 1}{ESC =} {CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{CSI 8,44,156 t}{CSI * r} {CUP 1,1} {CUP *}{ED 2}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED 2}{LF} {ESC (B}{SGR *}{SGR 94}~ {CR}{LF} ~ {CR}{LF} AFTER this commit: ./build/bin/nvim -u NONE{CR}{LF} {DECSM 1049}{DECSM 1}{ESC =} {CUP *}{ED 2}{CSI 8,44,156 t}{CSI * r} {CUP 1,1} {CUP *}{ED 2}{DECSM 2004}{DECSM 1004}{DECSM 25} {DECRM 25}{CSI 2 q}{CSI 2 q} {CUP *}{ED 2}{LF} {ESC (B}{SGR *}{SGR 94}~ {CR}{LF} ~ {CR}{LF} ...
* tui/rxvt: enable focus-reportingJustin M. Keyes2017-12-01
| | | | closes #7578
* version.c: Mark 8.0.0171 as NAJames McCoy2017-11-29
| | | | [ci skip]
* Revert "tui: update cleared area only if non-default bg"Justin M. Keyes2017-11-29
| | | | | | | | Reverts 0b93bab6c22edf7a07cf965ebbbf631b93e1dc1b. This change was counter-productive to the other changes which intended to reduce the role of BCE. ref #7624
* Merge pull request #7657 from jamessan/float128-ffiJames McCoy2017-11-29
|\ | | | | unittest: Ignore _Float128 types in ffi
| * unittest: Ignore _Float128 types in ffiJames McCoy2017-11-29
|/ | | | | | | | | | | | | | | | | | | | | | | When building with certain GCC versions, a _Float128 type is present when setting up the ffi for unit tests. ./test/unit/helpers.lua:256: declaration specifier expected near '_Float128' at line 396 /usr/bin/luajit: /usr/share/lua/5.1/busted/runner.lua:99: attempt to concatenate local 'message' (a table value) stack traceback: /usr/share/lua/5.1/busted/runner.lua:99: in function 'fn' /usr/share/lua/5.1/mediator.lua:103: in function 'publish' /usr/share/lua/5.1/busted/modules/helper_loader.lua:21: in function 'helperLoader' /usr/share/lua/5.1/busted/runner.lua:147: in function </usr/share/lua/5.1/busted/runner.lua:11> /usr/bin/busted:3: in main chunk [C]: at 0x004044a0 CMake Error at /<<PKGBUILDDIR>>/cmake/RunTests.cmake:53 (message): Running unit tests failed with error: 1. Since this is being pulled in by a dependency, not directly used by nvim, just ignore the type. Closes #7423
* provider: fix batchfile extension for ruby gem (#7651)Jan Edmund Lazo2017-11-29
| | | | | | | | | | | ruby uses batchfiles with 'cmd' extension. gem creates batchfiles with 'bat' extension. `gem install rails` does the following in Windows (not Cygwin): 1. Run `gem.cmd install rails` on cmd.exe 2. gem.cmd runs `ruby.exe -x gem install rails` 3. `rails` gem is installed. `rails.bat` is created in the same directory where ruby.exe and gem.cmd reside.
* Merge pull request #7639 from jamessan/openbsd-chrJames McCoy2017-11-28
|\ | | | | Add OpenBSD as an expected OS for opening char devices
| * Use defined(BSD) check when defining OPEN_CHR_FILESJames McCoy2017-11-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than enumerate predefines for all BSD systems, just rely on the fact that they all "#define BSD" in sys/param.h. Debian's GNU/kFreeBSD still requires its own check, since it isn't using the BSD userspace. References: OpenBSD - https://github.com/openbsd/src/blob/210ebf9df0460bbdad02da9bbd5d859b61f57462/sys/sys/param.h#L40 FreeBSD - https://github.com/freebsd/freebsd/blob/f5d95e1f8d32db4ccccfd5ad9cecb21ed07a695d/sys/sys/param.h#L43 NetBSD - https://github.com/NetBSD/src/blob/ea620980793cf2011e5424f4a537b0488e3ffb4d/sys/sys/param.h#L49 DragonFlyBSD - https://github.com/DragonFlyBSD/DragonFlyBSD/blob/94ecf1295bb42b59772448d58ff40dd75c4a3ef8/sys/sys/param.h#L41 vim-patch:8.0.1357
| * Add OpenBSD as an expected OS for opening char devicesJames McCoy2017-11-28
|/ | | | Closes #7542
* Merge pull request #7650 from jamessan/na-patchesJames McCoy2017-11-28
|\ | | | | version.c: mark NA patches
| * version.c: mark NA patchesMichael Schupikov2017-11-28
|/ | | | | | | | | | | | | - channels: vim-patch:8.0.0018 - GUI: vim-patch:8.0.0021 - Different recursive function implementation: vim-patch:8.0.0141 - JSON handling: vim-patch:8.0.0166, vim-patch:8.0.0169, vim-patch:8.0.0170, vim-patch:8.0.0171, vim-patch:8.0.0180 Mark vim-patch:8.0.0096 applied, since it was added in 860ecd705588470b52094b7036c016b2af15f8c9. [ci skip]
* Merge #7640 'term' optionJustin M. Keyes2017-11-27
|\
| * lintJustin M. Keyes2017-11-27
| |
| * test: tui_spec.lua: use robust settingsJustin M. Keyes2017-11-27
| |
| * tui: expose terminal type in 'term' optionJustin M. Keyes2017-11-27
| | | | | | | | | | | | | | | | | | | | Since "builtin" terminfo definitions were implemented (7cbf52db1bdf), the decisions made by tui.c and terminfo.c are more relevant. Exposing that decision in the 'term' option helps with troubleshooting. Also: remove code that allowed setting t_Co. `:set t_Co=…` has never worked; the highlight_spec test asserting that nvim_set_option('t_Co') _does_ work makes no sense, and should not have worked.
* | tests: mark flaky socket test pending for nowBjörn Linse2017-11-27
| |
* | Revert "provider: delete vimL stderr collector, now that it exists builtin"Björn Linse2017-11-27
|/ | | | | | | This change exposed a memory issue with buffered channels, possibly involving GC. Revert until it has been fixed. This reverts commit 0de019b6a65c6dd5141b7e002343df3689065ce7.
* Merge #7633 'Retry fgets on EINTR'Justin M. Keyes2017-11-26
|\ | | | | closes #7632
| * io: fix handling EOF in vim_fgetsMatt Widmann2017-11-25
| | | | | | | | | | | | | | | | | | If an EOF is returned from `fgets`, `vim_fgets` might spin forever, as it tries to consume the current line. A `NULL` return value from `fgets` should break out of the function (unless `errno` is `EINTR`), and then `feof` should be used to check for the EOF condition on the stream.
| * io: retry fgets on EINTR (#7632)Matt Widmann2017-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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`.
* | Merge pull request #6844 from bfredl/channelBjörn Linse2017-11-26
|\ \ | | | | | | channels: support buffered output and bytes sockets/stdio
| * | provider: delete vimL stderr collector, now that it exists builtinBjörn Linse2017-11-26
| | |
| * | channels: testsBjörn Linse2017-11-26
| | |
| * | channels: update documentationBjörn Linse2017-11-25
| | |
| * | core dumps: don't use pipe, it does not workBjörn Linse2017-11-25
| | |
| * | test: add hexdump utilitiy functionBjörn Linse2017-11-25
| | |
| * | input: only change mode of input fd if there is an input fdBjörn Linse2017-11-25
| | |
| * | tui: job-control: use saved termios for pty jobsJustin M. Keyes2017-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On startup, if running in a terminal, save the termios properties. Use the saved termios for `:terminal` and `jobstart()` pty jobs. This won't affect nvim spawned outside of a terminal. questions: - This affects `:terminal` and `jobstart({'pty':v:true})`. Should we be more conservative for `jobstart({'pty':v:true})` (e.g. pass NULL to forkpty() and let the OS defaults prevail)? - Note: `iutf8` would not be set in that case.
| * | channels: improvements to bufferingBjörn Linse2017-11-25
| | |
| * | channels: more consistent event handlingBjörn Linse2017-11-25
| | | | | | | | | | | | | | | terminal: libvterm now receives data in async context. This was "almost" safe already, as redraws were queued anyway.
| * | channels: refactor jobwaitBjörn Linse2017-11-25
| | |
| * | channels: reimplement logging (as stub for proper event)Björn Linse2017-11-25
| | |
| * | channels: stderr channelBjörn Linse2017-11-25
| | |
| * | channels: generalize jobclose()Björn Linse2017-11-25
| | |
| * | channels: move away term code from eval.cBjörn Linse2017-11-25
| | |
| * | channels: allow bytes sockets and stdio, and buffered bytes outputBjörn Linse2017-11-24
| | |
| * | channels: refactorBjörn Linse2017-11-24
| | |
| * | Revert channel logging, rebased on new code belowBjörn Linse2017-11-24
| |/
* | Merge #7631 'highlight: no refresh on validation error'Justin M. Keyes2017-11-25
|\ \
| * | test: :highlight validation errorsnate2017-11-25
| | | | | | | | | | | | | | | add test when highlight group doesn't exist. add test when an invalid color name is used for `cterm`.
| * | :highlight : avoid redraw on errornate2017-11-25
|/ / | | | | | | | | do_highlight() should not redraw if a validation error occurred. closes #7489
* | Merge #7624 'tui: disable BCE almost always'Justin M. Keyes2017-11-25
|\ \ | |/ |/| | | closes #7035 closes #7337
| * tui: update cleared area only if non-default bgJustin M. Keyes2017-11-24
| | | | | | | | This check was removed in 133ae5eeeff3 without explanation.
| * tui: Disable BCE almost always. #7624Justin M. Keyes2017-11-24
| | | | | | | | | | | | | | | | | | | | 133ae5eeeff3 implemented BCE (background color erase). But we can't trust terminfo, so it is safer disable BCE if we are not certain. Per https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545 terminal support for BCE seems to be (1) optional and (2) inconsistent. ref #4210 #4421 #7035 #7337 #7381 #7425 #7618
| * tui: Disable BCE by default. #7624Justin M. Keyes2017-11-23
|/ | | | | | | | | | | | 133ae5eeeff3 implemented BCE (background color erase). That's fine if the system terminfo claims to support it; but our built-in fallback should not assume it. Per https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545 terminal support for BCE seems to be (1) optional and (2) inconsistent. So the built-in terminfos should disable it by default. ref #4210 #4421 #7035 #7337 #7381 #7425 #7618