aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/tui
Commit message (Collapse)AuthorAge
...
* | | TUI: attrs -> attr_id refactorBjörn Linse2018-11-11
| | |
* | | UI/TUI: improvements and cleanups for scrolling and clearingBjörn Linse2018-11-11
|/ / | | | | | | | | | | | | | | | | | | | | | | - TUI: _never_ rely on BCE for implicit clearing, only explicit commands. - TUI: use unibi_erase_chars when possible. - TUI: use end-exclusive ranges for invalid and cleared areas - screen: scrolling leaves scrolled in aree undefined. This is a conservative change, a client assuming the old semantics will still behave correctly. - screen: factor out vsep handling from line drawing. This is needed anyway for the multigrid refactor. - screen: simplifications of win_do_lines
* | TUI: Avoid reset_cursor_color in old VTE #9191Sam Wilson2018-11-03
| | | | | | | | closes #9089
* | tui.c: Fix ext.set_underline_color for !has_colon_rgbJustin M. Keyes2018-10-20
| | | | | | | | PVS/V523: The 'then' statement is equivalent to the 'else' statement.
* | Merge pull request #9079 from bfredl/tui_cursorBjörn Linse2018-10-09
|\ \ | | | | | | TUI cursor fixes: avoid memory errors after resize with invalid cursor position
| * | TUI: delete "first-row" workaround after resizeBjörn Linse2018-10-06
| | | | | | | | | | | | | | | This was caused by cursor position being invalid right after tui_grid_resize, which is now fixed
| * | TUI: always use safe cursor movement after resizeBjörn Linse2018-10-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old code could lead to a memory error in the following situation: 0. The previous cursor position was row 50 since before, on a grid larger than 50 rows. 1. grid_resize changes the grid height to 40, and invalidly assumes the resize moved the physical cursor to row 0 2. Some event used a operation that could move the cursor (such as clear), and then reset the cursor to the "true" position row 50 (pointless after #8221, but I forgot to remove it) 3. raw_line/cheap_to_print is invoked, and tries to inspect the grid at row 50 (memory error) 4. grid_cursor_goto would have been called at this point, and set a valid cursor position 0-39.
* | | Merge #9036 'func_attr_printf'Justin M. Keyes2018-10-07
|\ \ \ | |/ / |/| |
| * | add func_attr_printf in :MichaHoffmann2018-09-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | log.c message.c strings.c fixed some printf warnings in: src/nvim/undo.c src/nvim/eval.c src/nvim/eval/encode.c src/nvim/eval/typval.c src/nvim/ex_getln.c src/nvim/fileio.c src/nvim/lua/executor.c src/nvim/main.c src/nvim/regexp_nfa.c src/nvim/shada.c src/nvim/spellfile.c src/nvim/tui/terminfo.c src/nvim/garray.h
* | | TUI: check libvte version for undercurl support #9088Daniel Hahler2018-10-05
| | | | | | | | | | | | | | | Support was added in https://github.com/GNOME/vte/commit/efaf8f3c. Fixes #9083
* | | TUI: fix support for undercurl/underline color #9080Daniel Hahler2018-10-03
| | |
* | | Merge pull request #9052 from blueyed/undercurlBjörn Linse2018-10-02
|\ \ \ | | | | | | | | tui: add support for undercurl and colored underline
| * | | tui: add support for undercurl and underline colorDaniel Hahler2018-10-01
| | | | | | | | | | | | | | | | Fixes https://github.com/neovim/neovim/issues/7479.
* | | | ui: rename ext_newgrid to ext_linegridBjörn Linse2018-10-01
| | | |
* | | | Revert "TUI: terminfo_start: use unibi_from_term directly"Justin M. Keyes2018-10-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | If $TERM is not defined then unibi_from_term() would crash. Reverts 3bdc34d0657d223599afdf0ce9b072fafa3d5648. ref #9072
* | | | TUI: terminfo_start: use unibi_from_term directly (#9072)Daniel Hahler2018-09-30
|/ / / | | | | | | | | | | | | Avoids redundant call to `getenv("TERM")`. Ref: https://github.com/mauke/unibilium/blob/e3b16d6219ca1cb92d98b1d9cc416b49a3ac468e/uniutil.c#L203-L211
* | | tui: eliminate scrolling region data structureBjörn Linse2018-09-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | The scrolling region is always local to a single grid_scroll event, use local variables and parameters instead. The invocation of reset_scroll_region in grid_resize is cargo-culted to use margin reset under exactly the same circumstances, not sure if it is necessary though.
* | | tui: eliminate grid->attrs, use indexed cell->attrBjörn Linse2018-09-26
| | | | | | | | | | | | remove dead ugrid_put
* | | TUI: Alacritty supports DECSCUSR (#9048)Christian Duerr2018-09-25
| | | | | | | | | Alacritty may set TERM to"alacritty" or "alacritty-direct" if it finds its terminfo.
* | | minor: tui: update_attrs: code consistencyDaniel Hahler2018-09-23
|/ /
* | TUI: Reset cursor color when applicable #8572Yichao Zhou2018-09-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Resets the TUI cursor color if: - current 'guicursor' mode does not specify a highlight group - cursor highlight group has "inverse" or "reverse" flag - on Nvim exit We interpret, "inverse" to mean "default cursor". Example: hi Cursor guifg=bg guibg=fg set termguicolors set guicursor=n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20 * When the cursor shape is block, its color will be "inverse" * When the cursor shape is I-beam, its color will be `hi Cursor`. This is useful e.g. to prevent `set listchars=eol:¬` causing your cursor color to a low contrast color in insert mode because you cursor are often at EOL in insert mode. close #8572
* | cleanup/TUI: remove old unused code #9013Justin M. Keyes2018-09-19
| | | | | | | | | | | | | | | | - Checks for ECHOE, ICANON were left over from Vim code. We already reference the symbols elsewhere without checking. - newline_on_exit, intr_char: Both are vestigial remnants of Vim 4.x, not implemented in Nvim. intr_char is a termios/stty feature, it's probably not useful because users have other ways to configure their terminals.
* | TUI: Skip redundant "stop" event (macOS kernel panic) (#9007)Justin M. Keyes2018-09-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the TUI suspends (:suspend, CTRL-z) it calls tui_terminal_stop (but does NOT set `ui->data=NULL`, so `tui_is_stopped` returns false). If the host terminal dies, it sends SIGCONT, SIGHUP (usually in that order): ERROR 2018-09-16T19:30:17.065 25821 suspend_event:1153: SIGCONT ERROR 2018-09-16T19:30:17.065 25821 on_signal:162: SIGHUP ERROR 2018-09-16T19:30:17.155 25821 on_signal:162: SIGHUP Race: if SIGHUP is handled before SIGCONT, it calls ui_builtin_stop() which schedules tui_stop before the TUI was resumed? libuv uv_close() aborts if the handle is already closed/closing. Somehow that causes macOS to panic. #8075 Assertion failed: (!uv__is_closing(handle)), function uv_close, file src/unix/core.c, line 117. Thread 0:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x00007fff67d69ec2 kevent + 10 1 libuv.1.dylib 0x000000010609304d uv__io_poll + 892 2 libuv.1.dylib 0x0000000106083904 uv_run + 339 3 nvim 0x0000000105e76f7b loop_poll_events + 74 4 nvim 0x0000000105fa5f51 ui_bridge_stop + 206 5 nvim 0x0000000105fa4c00 ui_builtin_stop + 50 6 nvim 0x0000000105f26ee9 mch_exit + 29 7 nvim 0x0000000105eda84a getout + 518 8 nvim 0x0000000105e778b3 multiqueue_process_events + 77 9 nvim 0x0000000105f24c5a os_breakcheck + 49 10 nvim 0x0000000105eb7ea3 auto_next_pat + 463 11 nvim 0x0000000105eb7603 apply_autocmds_group + 1289 12 nvim 0x0000000105eb0e8d apply_autocmds + 36 13 nvim 0x0000000105f5a412 screenalloc + 1892 14 nvim 0x0000000105f5b223 screen_resize + 190 15 nvim 0x0000000105fa52e3 ui_refresh + 257 16 nvim 0x0000000105e8c3d9 do_cmdline + 6614 17 nvim 0x0000000105f03a72 normal_execute + 3996 18 nvim 0x0000000105f89925 state_enter + 164 19 nvim 0x0000000105efe08d normal_enter + 125 20 nvim 0x0000000105ed9ffd main + 6858 21 libdyld.dylib 0x00007fff67c19115 start + 1 Thread 1 Crashed: 0 libsystem_kernel.dylib 0x00007fff67d68e3e __pthread_kill + 10 1 libsystem_pthread.dylib 0x00007fff67ea7150 pthread_kill + 333 2 libsystem_c.dylib 0x00007fff67cc5312 abort + 127 3 libsystem_c.dylib 0x00007fff67c8d368 __assert_rtn + 320 4 libuv.1.dylib 0x00000001060835bf uv_close + 247 5 nvim 0x0000000105fa0ebb tui_terminal_stop + 221 6 nvim 0x0000000105f9ff3d tui_stop + 14 7 nvim 0x0000000105e778b3 multiqueue_process_events + 77 8 nvim 0x0000000105fa0c89 tui_main + 302 9 libsystem_pthread.dylib 0x00007fff67ea46c1 _pthread_body + 340 10 libsystem_pthread.dylib 0x00007fff67ea456d _pthread_start + 377 11 libsystem_pthread.dylib 0x00007fff67ea3c5d thread_start + 13 TODO: - Set `ui->data = NULL` to flag UI as "stopped"? But loop_poll_events drains *all* fast_events, so could skip some events...
* | tui: Hint wrapped lines to terminals.Ricky Zhou2018-09-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, when neovim would wrap a line across multiple lines, terminal emulators could not detect that the lines represent a single wrapped line as opposed to several separate lines. As a result, many terminals' selection/copying functionality would treat a wrapped line as several newline-delimited lines. Fix this by reenabling a "special trick" from Vim. When a line is wrapped, write the last character of that line followed by the first character of the next line to the terminal. This hints to the terminal that the next line is a continuation of the current line. Extends the raw_line event with a "wrap" parameter which controls when to do wrap hinting.
* | TUI: use BCE again more often, as it provides smoother resizes and scrollingBjörn Linse2018-08-14
| | | | | | | | add exceptions for terminals we know doesn't support BCE
* | tui: reenable cursor movement optimizations (leftover from #8221)Björn Linse2018-08-14
| |
* | tui: hack for invalid first line with non-bce resizeBjörn Linse2018-08-14
| |
* | tui: use bce properlyBjörn Linse2018-08-14
| |
* | cursor_shape: use attribute ids instead of syntax idsBjörn Linse2018-08-13
| | | | | | | | | | As attribute ids is the convention in the UI protocol Also remove non-threadsafe calls in tui.c to syntax module.
* | highlight: HlAttrs is a value type; treat it like suchBjörn Linse2018-08-13
| |
* | terminfo: add header guard, stdint.h for int8_t (#8848)Jan Edmund Lazo2018-08-11
| | | | | | | | Lint fixes for single-include test.
* | terminfo: update built-in terminfo entriesMarco Hinz2018-08-10
| | | | | | | | | | | | | | The arrays are put in their own file: terminfo_defs.h. This makes it simple to update all terminfo entries in one go using scripts/update_terminfo.sh. The entries were compiled with tic 6.1 and some use the extended number format.
* | terminfo: add scripts/update_terminfo.shMarco Hinz2018-08-10
| | | | | | | | | | | | This script updates the built-in terminfo entries. [skip ci]
* | tui: clip invalid regions on resize (#8779), fixes #8774Björn Linse2018-07-26
| |
* | ui: fix glitches where scrolling region affects clearing of screenBjörn Linse2018-07-24
| | | | | | | | | | | | | | | | the first implemented UI protocol clients (python-gui and builitin TUI) allowed the cleared region to be restricted by setting the scroll region. This was never used by nvim though, and not documented and implemented by newer clients, to check we remain compatible with both kind of clients, ensure the scroll region is in a reset state.
* | ui: use line-based rather than char-based updates in screen.cBjörn Linse2018-07-21
| | | | | | | | | | | | | | | | | | | | | | | | | | Add ext_newgrid and ext_hlstate extensions. These use predefined highlights and line-segment based updates, for efficiency and simplicity.. The ext_hlstate extension in addition allows semantic identification of builtin and syntax highlights. Reimplement the old char-based updates in the remote UI layer, for compatibility. For the moment, this is still the default. The bulitin TUI uses the new line-based protocol. cmdline uses curwin cursor position when ext_cmdline is active.
* | highlight: refactor to use stateful representationBjörn Linse2018-07-21
| | | | | | | | | | This allows us to keep track of the source higlight groups, and not only the final combined highlights.
* | highlight: extract low-level highlight logic from syntax, uiBjörn Linse2018-07-21
| |
* | Merge pull request #8708 from blueyed/fix-standoutJames McCoy2018-07-10
|\ \ | | | | | | Fix standout mode
| * | [WIP/RFC] Fix standout modeDaniel Hahler2018-07-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was not working for me in different terminals. This patch makes it work in the same way like reverse. Test: :hi jediUsage cterm=standout | hi jediUsage
* | | TUI: urxvt: also send xterm focus-reporting seqs #8699Daniel Hahler2018-07-08
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | urxvt supports the xterm sequence for focus reporting in master / CVS since 2016 [1]. This has not been released yet, but is expected to be in 9.23. In 3d0ee17 a special case for rxvt was added, which requires a custom urxvt extension, see #7578. Since urxvt 9.23 is not released still, and extensions for handling this manually appear to be in use, this sends both escape sequences for rxvt. Fixes https://github.com/neovim/neovim/issues/8695. 1: https://github.com/exg/rxvt-unicode/commit/75264fa544529a21ff79d3da26eb3130c43444a5#diff-2c8f5590ce4fa7495edcf7572c89c77b
* | coverity/166184: Null pointer dereference (FP)Justin M. Keyes2018-07-02
| | | | | | | | | | False positive: should never happen, because unibi_from_env() would return NULL if $TERM is undefined.
* | build/MSVC: TUI: Fix uninitialized variableb-r-o-c-k2018-06-03
| | | | | | | | closes #8459
* | TUI: skip SIGWINCH during teardown #8470Justin M. Keyes2018-06-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | closes #8409 Although 8b05da157728 prevents UI events during TUI teardown, there's still a chance a SIGWINCH event (which emits from a different source, not the UI pump) could be queued. Backtrace: Program terminated with signal SIGSEGV, Segmentation fault. 0 0x0828b5e2 in update_size (ui=0xf7130000) at ../src/nvim/tui/tui.c:1231 1231 if (data->out_isatty Thread 2 (Thread 0xf749c740 (LWP 15704)): 0 0xf76f4be9 in __kernel_vsyscall () No symbol table info available. 1 0xf7585847 in syscall () from /lib32/libc.so.6 No symbol table info available. 2 0x082d280b in uv__epoll_wait (epfd=9, events=events@entry=0xff8570a0, nevents=nevents@entry=1024, timeout=timeout@entry=10) at /home/travis/nvim-deps/build/src/libuv/src/unix/linux-syscalls.c:321 result = -4 3 0x082d095b in uv__io_poll (loop=loop@entry=0x843bb20 <main_loop>, timeout=10) at /home/travis/nvim-deps/build/src/libuv/src/unix/linux-core.c:289 no_epoll_pwait = 0 no_epoll_wait = 0 events = {{events = 1, data = 12}, {events = 0, data = 17828744682641817600}, {events = 0, data = 595427328019700187}, {events = 1, data = 256}, {events = 8, data = 38646673644}, {events = 138656544, data = 0}, {events = 0, data = 4433601024}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 5066646634167795712}, {events = 4286935584, data = 206168555883}, {events = 0, data = 471020612051744}, {events = 4286935503, data = 17828744133024637728}, {events = 1, data = 17317007001}, {events = 4286935503, data = 10619564869973704705}, {events = 1024, data = 595525515121881824}, {events = 4150558720, data = 17823414452125790712}, {events = 138530816, data = 4432135917}, {events = 4286935544, data = 10144519793148261088}, {events = 3966, data = 10619579670432006720}, {events = 138530816, data = 595525326143320812}, {events = 1, data = 595525321993555278}, {events = 138656852, data = 1}, {events = 3995, data = 4295967296}, {events = 1, data = 595526644706312193}, {events = 0, data = 17033840295937}, {events = 4286935776, data = 206168555900}, {events = 4286937292, data = 4398046511113}, {events = 4286937584, data = 1}, {events = 0, data = 154475121641}, {events = 534, data = 188970531020}, {events = 4286936336, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 1, data = 10}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 48}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 138530816, data = 18412251243033639712}, {events = 4286936040, data = 189114457288}, {events = 0, data = 4294967296}, {events = 0, data = 17803669134559412224}, {events = 44, data = 18412251243033639712}, {events = 4286936088, data = 189114457380}, {events = 43, data = 587839499189486944}, {events = 0, data = 18412250572880084992}, {events = 4145239744, data = 17803668932546221712}, {events = 4286936136, data = 18412251054051721307}, {events = 1, data = 17828741581675430017}, {events = 1, data = 17828941684201750528}, {events = 4151062887, data = 188813018680}, {events = 4286936184, data = 594985324343494205}, {events = 138656544, data = 589074057631462644}, {events = 138657344, data = 17735744192413433899}, {events = 136867048, data = 0}, {events = 138530816, data = 595528757965521683}, {events = 136865087, data = 589073507718137052}, {events = 4129424952, data = 17735744192413433899}, {events = 136867048, data = 587831072767851296}, {events = 4129424604, data = 17735745120263524155}, {events = 43, data = 587839499189486944}, {events = 1, data = 4151078100}, {events = 137102077, data = 18412251277393378816}, {events = 1024, data = 0}, {events = 0, data = 595526301108928512}, {events = 138656544, data = 18412251247181919476}, {events = 1, data = 9281074407080460288}, {events = 0, data = 18446466442728570881}, {events = 4294901792, data = 4294967295}, {events = 35, data = 18446462783416434688}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 2305913371515420672}, {events = 3092376453, data = 138513204574}, {events = 2098047, data = 0}, {events = 0, data = 0}, {events = 8064, data = 196607}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 2147483648, data = 16382}, {events = 3951370240, data = 70402120267857}, {events = 0, data = 0}, {events = 0, data = 5280832615950057472}, {events = 1229539657, data = 5280832617179597129}, {events = 16711680, data = 0}, {events = 255, data = 0}, {events = 0, data = 8589934592}, {events = 0, data = 0}, {events = 4144925328, data = 8589934600}, {events = 0, data = 0}, {events = 4144060920, data = 8589934597}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 10441860757015494656}, {events = 2357, data = 1000000}, {events = 0, data = 0}, {events = 138656544, data = 0}, {events = 0, data = 5066646694297337856}, {events = 948, data = 7}, {events = 832, data = 0}, {events = 0, data = 0}, {events = 0, data = 12884901888}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 4400483032669}, {events = 4286937344, data = 17826513962666277708}, {events = 4286937112, data = 594985328358030594}, {events = 137168621, data = 18412254696048689153}, {events = 4286937344, data = 1024}, {events = 1000000, data = 2896717541055035201}, {events = 4148807356, data = 595525510834946052}, {events = 137169476, data = 10125674444609}, {events = 1000000, data = 0}, {events = 0, data = 595525321856385024}, {events = 0, data = 0}, {events = 0, data = 18412255692481101824}, {events = 10125674, data = 48}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 0}, {events = 0, data = 1179670597}, {events = 0, data = 4400482871034}, {events = 4286937584, data = 17826513962666277708}, {events = 4286937352, data = 594985328358030594}, {events = 137168621, data = 18412255726840840193}, {events = 4286937584, data = 17160756302592}, {events = 1000000, data = 594985326644596377}, {events = 4286937584, data = 4433623840}, {events = 137169713, data = 595526352787192608}, {events = 1, data = 0}, {events = 0, data = 1}, {events = 1, data = 138656852}, {events = 0, data = 18412256723273256859}, {events = 10125669, data = 48}, {events = 0, data = 0} <repeats 11 times>, {events = 0, data = 4294967296}, {events = 12, data = 0}, {events = 0, data = 0}, {events = 2430806547, data = 18412258097662788608}, {events = 138656588, data = 18412257105380933632}, {events = 4149837058, data = 589134741370949632}...} pe = <optimized out> e = {events = 4127768836, data = 7} real_timeout = 10 q = <optimized out> w = <optimized out> sigset = {__val = {832, 0, 0, 138656544, 0, 0, 4286935144, 135300669, 4144063488, 138656544, 138633728, 0, 0, 0, 0, 0, 0, 0, 4286935224, 135309369, 4144063520, 135309195, 138633728, 0, 0, 0, 0, 0, 138633728, 135309195, 138633728, 0}} sigmask = <optimized out> base = <optimized out> have_signals = <optimized out> nevents = <optimized out> count = 48 nfds = <optimized out> fd = <optimized out> op = <optimized out> i = <optimized out> __PRETTY_FUNCTION__ = "uv__io_poll" 4 0x082c0cab in uv_run (loop=0x843bb20 <main_loop>, mode=UV_RUN_ONCE) at /home/travis/nvim-deps/build/src/libuv/src/unix/core.c:359 timeout = <optimized out> r = 1 5 0x08107e61 in loop_poll_events (loop=0x843bb20 <main_loop>, ms=10) at ../src/nvim/event/loop.c:57 mode = UV_RUN_ONCE timeout_expired = false 6 0x0829225a in ui_bridge_stop (b=0xf70330e0) at ../src/nvim/ui_bridge.c:122 bridge = 0xf70330e0 stopped = false 7 0x0828f0a5 in ui_builtin_stop () at ../src/nvim/ui.c:144 ui = 0xf70330e0 i = 0 8 0x081e9b85 in mch_exit (r=1) at ../src/nvim/os_unix.c:141 No locals. 9 0x0818076e in getout (exitval=1) at ../src/nvim/main.c:666 tp = 0x0 next_tp = 0x0 10 0x081a80df in preserve_exit () at ../src/nvim/misc1.c:2655 really_exiting = true 11 0x081e8e2e in deadly_signal (signum=1) at ../src/nvim/os/signal.c:137 No locals. 12 0x081e8eaa in on_signal (handle=0x8436200 <shup>, signum=1, data=0x0) at ../src/nvim/os/signal.c:162 __PRETTY_FUNCTION__ = "on_signal" __func__ = "on_signal" 13 0x0810a7bb in signal_event (argv=0xff85a328) at ../src/nvim/event/signal.c:47 watcher = 0x8436200 <shup> 14 0x0810869b in multiqueue_process_events (this=0xf7016420) at ../src/nvim/event/multiqueue.c:150 event = {handler = 0x810a78b <signal_event>, argv = {0x8436200 <shup>, 0x0, 0x0, 0x0, 0x0, 0x0}} __PRETTY_FUNCTION__ = "multiqueue_process_events" 15 0x08107eac in loop_poll_events (loop=0x843bb20 <main_loop>, ms=3984) at ../src/nvim/event/loop.c:65 mode = UV_RUN_ONCE timeout_expired = false 16 0x081e5d6f in input_poll (ms=4000) at ../src/nvim/os/input.c:349 remaining = 3984 before = 10125692630347 17 0x081e5e50 in inbuf_poll (ms=4000) at ../src/nvim/os/input.c:372 No locals. 18 0x081e568f in os_inchar (buf=0x0, maxlen=0, ms=-1, tb_change_cnt=0) at ../src/nvim/os/input.c:110 result = (unknown: 136905872) 19 0x0826b0a1 in state_enter (s=0xff85a4c0) at ../src/nvim/state.c:55 check_result = 1 key = 58 execute_result = 1 20 0x0813802b in command_line_enter (firstc=58, count=1, indent=0) at ../src/nvim/ex_getln.c:392 state = {state = {check = 0x8138588 <command_line_check>, execute = 0x81385b3 <command_line_execute>}, firstc = 58, count = 1, indent = 0, c = 58, i = 0, j = 1, gotesc = 0, do_abbr = 1, lookfor = 0x0, hiscnt = 10000, histype = 0, search_start = {lnum = 1, col = 0, coladd = 0}, save_cursor = {lnum = 1, col = 0, coladd = 0}, old_curswant = 0, init_curswant = 0, old_leftcol = 0, init_leftcol = 0, old_topline = 1, init_topline = 1, old_topfill = 0, init_topfill = 0, old_botline = 2, init_botline = 2, match_start = {lnum = 1, col = 0, coladd = 0}, match_end = {lnum = 0, col = 0, coladd = 0}, did_incsearch = 0, incsearch_postponed = 0, did_wild_list = 0, wim_index = 0, res = 0, save_msg_scroll = 0, save_State = 1, save_p_icm = 0xf7015e50 "", some_key_typed = 1, ignore_drag_release = 1, break_ctrl_c = 0, xpc = {xp_context = 0, xp_pattern = 0x0, xp_pattern_len = 0, xp_arg = 0x0, xp_scriptID = 0, xp_backslash = 0, xp_shell = 0, xp_numfiles = -1, xp_files = 0x0, xp_line = 0x0, xp_col = 0}, b_im_ptr = 0x0, save_ccline = {cmdbuff = 0x0, cmdbufflen = 0, cmdlen = 0, cmdpos = 0, cmdspos = 0, cmdfirstc = 0, cmdindent = 0, cmdprompt = 0x0, cmdattr = 0, overstrike = 0, xpc = 0x0, xp_context = 0, xp_arg = 0x0, input_fn = 0, prompt_id = 0, highlight_callback = {data = {funcref = 0x0, partial = 0x0}, type = kCallbackNone}, last_colors = {prompt_id = 0, cmdbuff = 0x0, colors = {size = 0, capacity = 0, items = 0x0}}, level = 0, prev_ccline = 0x0, special_char = 0 '\000', special_shift = false, redraw_state = kCmdRedrawNone}} s = 0xff85a4c0 tstate = {current_exception = 0x832fc5a <arena_run_split_remove+74>, private_msg_list = 0xcb, msg_list = 0xc8, trylevel = 309, got_int = 0, need_rethrow = 0, did_emsg = -148897536} err = {type = kErrorTypeNone, msg = 0x0} tl_ret = true dict = 0xf701e180 firstcbuf = ":" 21 0x0813bf33 in getcmdline (firstc=58, count=1, indent=0) at ../src/nvim/ex_getln.c:1991 No locals. 22 0x0813c273 in getexline (c=58, cookie=0x0, indent=0) at ../src/nvim/ex_getln.c:2171 No locals. 23 0x0812178e in do_cmdline (cmdline=0x0, fgetline=0x813c23b <getexline>, cookie=0x0, flags=0) at ../src/nvim/ex_docmd.c:521 next_cmdline = 0x0 cmdline_copy = 0x0 used_getline = 0 recursive = 0 msg_didout_before_start = 0 count = 0 did_inc = 0 retval = 1 cstack = {cs_flags = {-149727708, -149727552, 44, -149749760, 0, -8018024, 135896356, 44, 0, -8018008, 137102848, 138530816, -149749760, -165425056, -149727552, -153095488, 0, -8017976, 135301762, -165613500, -149727516, 136875711, -143908912, -153095488, 8, 18, -143904672, 8, -143889324, -8017928, 137102848, 138530816, -149749760, 0, 137154491, -153095488, 0, -149749760, 136875711, -149749760, 0, 136875711, 135298863, -153095488, 136911089, -150785824, 135298732, 0, 0, -149749760}, cs_pending = "@\004!\366 d\001\367\000\000\000\000h\250\205\377\023\217(\b\240\357\337\366\361\030)\b\340\060\003\367\254~\020\b\000\000\000\000\000\000\000\000\000\000\023\367@\004", cs_pend = {csp_rv = {0x0, 0x0, 0xff85a888, 0x81fb319 <rbuffer_consumed+138>, 0xf70b3e00, 0x2, 0xff85a8b8, 0x829198a <ui_bridge_flush+117>, 0x82918f1 <ui_bridge_flush_event>, 0xf70330e0, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0x108, 0xff85a8c8, 0x81fb4bf <rbuffer_read+152>, 0xf70b3e00, 0xff85a8ac, 0x2b, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0xf7130000, 0x0, 0x0, 0xf70b3e4b, 0x58, 0x2b, 0xf70330e0, 0x0, 0xff85a8f8, 0x8161750 <fix_input_buffer+11>, 0xf70b3e00, 0x843070b <typebuf_init+43>, 0xff85a9a8, 0xf7648000, 0xff85a908, 0xf7597d02 <clock_gettime+34>, 0x841d000, 0x82cdd00 <uv__run_timers+16>, 0x1, 0xff85a908, 0xff85a9d8, 0x816172b <inchar+496>, 0x84306e0 <typebuf_init>, 0xf4240, 0xff85a928, 0x8108748 <multiqueue_empty+62>, 0xf7016424, 0x843bb20 <main_loop>}, csp_ex = {0x0, 0x0, 0xff85a888, 0x81fb319 <rbuffer_consumed+138>, 0xf70b3e00, 0x2, 0xff85a8b8, 0x829198a <ui_bridge_flush+117>, 0x82918f1 <ui_bridge_flush_event>, 0xf70330e0, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0x108, 0xff85a8c8, 0x81fb4bf <rbuffer_read+152>, 0xf70b3e00, 0xff85a8ac, 0x2b, 0x8107eac <loop_poll_events+230>, 0x0, 0x0, 0xf7130000, 0x0, 0x0, 0xf70b3e4b, 0x58, 0x2b, 0xf70330e0, 0x0, 0xff85a8f8, 0x8161750 <fix_input_buffer+11>, 0xf70b3e00, 0x843070b <typebuf_init+43>, 0xff85a9a8, 0xf7648000, 0xff85a908, 0xf7597d02 <clock_gettime+34>, 0x841d000, 0x82cdd00 <uv__run_timers+16>, 0x1, 0xff85a908, 0xff85a9d8, 0x816172b <inchar+496>, 0x84306e0 <typebuf_init>, 0xf4240, 0xff85a928, 0x8108748 <multiqueue_empty+62>, 0xf7016424, 0x843bb20 <main_loop>}}, cs_forinfo = {0x2, 0x82c0cb3 <uv_run+291>, 0x843bb20 <main_loop>, 0x0, 0xff85a968, 0x81086a6 <multiqueue_process_events+103>, 0xf7016420, 0x0, 0x843bb44 <main_loop+36>, 0xff85a948, 0xf70b3e00, 0x1, 0xff85a978, 0x81e5fd4 <process_interrupts+126>, 0xf70b3e00, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff85a9a8, 0x8107eac <loop_poll_events+230>, 0xf7016420, 0x2, 0x80, 0xf76c6892 <__lll_lock_wait+34>, 0xff85aa18, 0x1, 0xff85a9a8, 0x815f1ab <may_sync_undo+55>, 0x0, 0x0, 0x6d2000, 0x2, 0x0, 0x0, 0xff85a9d8, 0x815f15b <gotchars+134>, 0x3a, 0x0, 0x0, 0x82ccfbb <uv_mutex_unlock+27>, 0xf6220638, 0x0, 0x84306e1 <typebuf_init+1>, 0x3a, 0x0, 0x0, 0xff85aab8, 0x81608af <vgetorpeek+2629>}, cs_line = {1, 0, -1, 1, -149727600, 0, -8017384, 135300936, -150903772, 43, 2248736, 0, 138656544, 58, 58, 0, -150903776, 0, -8017256, -144408576, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10125, 674433438, 138530816, 0, 0, 137103323, 0, 257, -8017256, 136208557, -150258176, 1000000, 5330103, 136221690, 0, 0, 0, 136207882, 5330103, 0}, cs_idx = -1, cs_looplevel = 0, cs_trylevel = 0, cs_emsg_silent_list = 0x0, cs_lflags = 0} lines_ga = {ga_len = 0, ga_maxlen = 0, ga_itemsize = 8, ga_growsize = 10, ga_data = 0x0} current_line = 0 fname = 0x0 breakpoint = 0x0 dbg_tick = 0x0 debug_saved = {trylevel = 0, force_abort = 0, caught_stack = 0x0, vv_exception = 0x0, vv_throwpoint = 0x0, did_emsg = 0, got_int = 0, need_rethrow = 0, check_cstack = 0, current_exception = 0x0} initial_trylevel = 0 saved_msg_list = 0x0 private_msg_list = 0x0 cmd_getline = 0x813c23b <getexline> cmd_cookie = 0x0 cmd_loop_cookie = {lines_gap = 0xff85a748, current_line = 135896356, repeating = 44, getline = 0x30, cookie = 0xff85a758} real_cookie = 0x0 getline_is_func = 0 call_depth = 1 24 0x081bc48e in nv_colon (cap=0xff85abdc) at ../src/nvim/normal.c:4561 old_p_im = 0 cmd_result = 255 is_cmdkey = false 25 0x081b5382 in normal_execute (state=0xff85ab70, key=58) at ../src/nvim/normal.c:1137 s = 0xff85ab70 __PRETTY_FUNCTION__ = "normal_execute" 26 0x0826b0ec in state_enter (s=0xff85ab70) at ../src/nvim/state.c:67 check_result = 1 key = 58 execute_result = 1 27 0x081b3a1d in normal_enter (cmdwin=false, noexmode=false) at ../src/nvim/normal.c:467 state = {state = {check = 0x81b5881 <normal_check>, execute = 0x81b4cee <normal_execute>}, conceal_old_cursor_line = 0, conceal_new_cursor_line = 0, command_finished = false, ctrl_w = false, need_flushbuf = false, conceal_update_lines = false, set_prevcount = false, previous_got_int = false, cmdwin = false, noexmode = false, toplevel = true, oa = {op_type = 0, regname = 0, motion_type = kMTCharWise, motion_force = 0, use_reg_one = false, inclusive = false, end_adjusted = false, start = {lnum = 0, col = 0, coladd = 0}, end = {lnum = 0, col = 0, coladd = 0}, cursor_start = {lnum = 0, col = 0, coladd = 0}, line_count = 0, empty = false, is_VIsual = false, start_vcol = 0, end_vcol = 0, prev_opcount = 0, prev_count0 = 0}, ca = {oap = 0xff85ab8c, prechar = 0, cmdchar = 58, nchar = 0, ncharC1 = 0, ncharC2 = 0, extra_char = 0, opcount = 0, count0 = 0, count1 = 1, arg = 0, retval = 0, searchbuf = 0x0}, mapped_len = 0, old_mapped_len = 0, idx = 60, c = 58, old_col = 0, old_pos = {lnum = 1, col = 0, coladd = 0}} 28 0x08180336 in main (argc=7, argv=0xff85adc4) at ../src/nvim/main.c:566 fname = 0x0 params = {argc = 7, argv = 0xff85adc4, use_vimrc = 0xff85b50d "NONE", n_commands = 0, commands = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, cmds_tofree = "\000\000\000\000\000\000\000\000\000", n_pre_commands = 1, pre_commands = {0xff85b520 "set noswapfile noshowcmd noruler undodir=. directory=. viewdir=. backupdir=.", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, edit_type = 0, tagname = 0x0, use_ef = 0x0, want_full_screen = 1, input_isatty = true, output_isatty = true, err_isatty = true, no_swap_file = 0, use_debug_break_level = -1, window_count = 1, window_layout = 0, diff_mode = 0, listen_addr = 0x0} cwd = 0x0 __PRETTY_FUNCTION__ = "main" reading_input = true Thread 1 (Thread 0xf6dffb40 (LWP 15705)): 0 0x0828b5e2 in update_size (ui=0xf7130000) at ../src/nvim/tui/tui.c:1231 data = 0x0 width = 0 height = 0 val = 0x8199d72 <xfree+17> "\311\303U\211\345\203\354(\203}\b" advance = 0 1 0x08288f42 in sigwinch_cb (watcher=0xf622091c, signum=0, data=0xf7130000) at ../src/nvim/tui/tui.c:408 ui = 0xf7130000 2 0x0810a7bb in signal_event (argv=0xf6dfeeb8) at ../src/nvim/event/signal.c:47 watcher = 0xf622091c 3 0x0810869b in multiqueue_process_events (this=0xf620f020) at ../src/nvim/event/multiqueue.c:150 event = {handler = 0x810a78b <signal_event>, argv = {0xf622091c, 0x82d27cb <uv__epoll_ctl+59>, 0xff, 0x14, 0x0, 0x0}} __PRETTY_FUNCTION__ = "multiqueue_process_events" 4 0x08107eac in loop_poll_events (loop=0xf6dfefa0, ms=20) at ../src/nvim/event/loop.c:65 mode = UV_RUN_ONCE timeout_expired = true 5 0x08288d08 in tui_main (bridge=0xf70330e0, ui=0xf7130000) at ../src/nvim/tui/tui.c:362 ms = 3 tui_loop = {uv = {data = 0xf6dfefa0, active_handles = 2, handle_queue = {0xf6dff104, 0xf62204fc}, active_reqs = {0xf6dfefb0, 0xf6dfefb0}, stop_flag = 0, flags = 0, backend_fd = 15, pending_queue = {0xf6dfefc4, 0xf6dfefc4}, watcher_queue = {0xf6dfefcc, 0xf6dfefcc}, watchers = 0xf620c000, nwatchers = 30, nfds = 2, wq = {0xf6dfefe0, 0xf6dfefe0}, wq_mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {d = {__espins = 0, __elision = 0}, __list = {__next = 0x0}}}, __size = '\000' <repeats 23 times>, __align = 0}, wq_async = {data = 0x0, loop = 0xf6dfefa0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0xf6dff290, 0xf6dff104}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 49152, async_cb = 0x82d3fe0 <uv__work_done>, queue = {0xf6dff2b4, 0xf6dff084}, pending = 0}, cloexec_lock = {__data = {__lock = 0, __nr_readers = 0, __readers_wakeup = 0, __writer_wakeup = 0, __nr_readers_queued = 0, __nr_writers_queued = 0, __flags = 0 '\000', __shared = 0 '\000', __pad1 = 0 '\000', __pad2 = 0 '\000', __writer = 0}, __size = '\000' <repeats 31 times>, __align = 0}, closing_handles = 0x0, process_handles = {0xf6dff064, 0xf6dff064}, prepare_handles = {0xf6dff06c, 0xf6dff06c}, check_handles = {0xf6dff074, 0xf6dff074}, idle_handles = {0xf6dff07c, 0xf6dff07c}, async_handles = {0xf6dff034, 0xf6dff2b4}, async_unused = 0x0, async_io_watcher = {cb = 0x82c01f0 <uv__async_io>, pending_queue = {0xf6dff094, 0xf6dff094}, watcher_queue = {0xf6dff09c, 0xf6dff09c}, pevents = 1, events = 1, fd = 18}, async_wfd = -1, timer_heap = {min = 0x0, nelts = 0}, timer_counter = 5, time = 10125712, signal_pipefd = {16, 17}, signal_io_watcher = {cb = 0x82c9900 <uv__signal_event>, pending_queue = {0xf6dff0d8, 0xf6dff0d8}, watcher_queue = {0xf6dff0e0, 0xf6dff0e0}, pevents = 1, events = 1, fd = 16}, child_watcher = {data = 0x0, loop = 0xf6dfefa0, type = UV_SIGNAL, close_cb = 0x0, handle_queue = {0xf6dff010, 0xf6dfefa8}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 32768, signal_cb = 0x0, signum = 0, tree_entry = {rbe_left = 0x0, rbe_right = 0x0, rbe_parent = 0x0, rbe_color = 0}, caught_signals = 0, dispatched_signals = 0}, emfile_fd = 19, inotify_read_watcher = {cb = 0x0, pending_queue = {0x0, 0x0}, watcher_queue = {0x0, 0x0}, pevents = 0, events = 0, fd = 0}, inotify_watchers = 0x0, inotify_fd = -1}, events = 0xf620f000, thread_events = 0xf620f040, fast_events = 0xf620f020, children = 0xf620d000, children_watcher = {data = 0xf6dff1b0, loop = 0xf6dfefa0, type = UV_SIGNAL, close_cb = 0xf74a1ed4, handle_queue = {0xf6dff1e0, 0xf6dff290}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0x0}}, next_closing = 0x0, flags = 8192, signal_cb = 0x0, signum = 0, tree_entry = {rbe_left = 0x5, rbe_right = 0x421, rbe_parent = 0xf7669aa0, rbe_color = -144272712}, caught_signals = 0, dispatched_signals = 0}, children_kill_timer = {data = 0xf76b9f94, loop = 0xf6dfefa0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0xf6dff238, 0xf6dff190}, u = {fd = -153095436, reserved = {0xf6dff2f4, 0xf76f0608, 0xf6dff2b0, 0xf76fe91a}}, next_closing = 0x0, flags = 8192, timer_cb = 0x0, heap_node = {0xf7716a94, 0x0, 0xf7669aa0}, timeout = 5, repeat = 0, start_id = 0}, poll_timer = {data = 0xf620e008, loop = 0xf6dfefa0, type = UV_TIMER, close_cb = 0x0, handle_queue = {0xf622092c, 0xf6dff1e0}, u = {fd = -153095436, reserved = {0xf6dff2f4, 0xf6dff268, 0xf6dff260, 0xf76bb648}}, next_closing = 0x0, flags = 8192, timer_cb = 0x8108315 <timer_cb>, heap_node = {0x0, 0x0, 0x0}, timeout = 10125732, repeat = 20, start_id = 4}, async = {data = 0x0, loop = 0xf6dfefa0, type = UV_ASYNC, close_cb = 0x0, handle_queue = {0xf6dff190, 0xf6dff010}, u = {fd = 0, reserved = {0x0, 0x0, 0x0, 0xf7716000}}, next_closing = 0x0, flags = 24576, async_cb = 0x810826b <async_cb>, queue = {0xf6dff084, 0xf6dff034}, pending = 0}, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {d = {__espins = 0, __elision = 0}, __list = {__next = 0x0}}}, __size = '\000' <repeats 23 times>, __align = 0}, recursive = 0} data = 0xf6210440 6 0x08292172 in ui_thread_run (data=0xf70330e0) at ../src/nvim/ui_bridge.c:104 bridge = 0xf70330e0 7 0xf76bff5b in start_thread (arg=0xf6dffb40) at pthread_create.c:312 __res = <optimized out> pd = 0xf6dffb40 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {-143843328, -153093312, 4001536, -153095192, -1395719907, -992530146}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" 8 0xf758a52e in clone () from /lib32/libc.so.6 No symbol table info available.
* | Merge #8218 'Fix errors reported by PVS'Justin M. Keyes2018-04-27
|\ \ | | | | | | closes #4983
| * | *: Fix clint errorsZyX2018-04-22
| | |
| * | tui: Silence PVS/V560: condition is set to true in prev-previous if()ZyX2018-04-22
| | |
* | | tui/input.c: add support for mouse release events in urxvt (#8309)symphorien2018-04-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some terminals don't report which buttons are involved in some mouse events. For example, the urxvt protocol (http://www.huge-man-linux.net/man7/urxvt.html section "Mouse reporting") does not report which button has been released. In this case libtermkey reports button 0 (http://www.leonerd.org.uk/code/libtermkey/doc/termkey_interpret_mouse.3.html) Up to now, forward_mouse_event did not handle button==0. On press events there is not much we can do, and we keep the current behavior which is dropping the event. But on drag-and-release events we can compensate by remembering the last button pressed. fixes #3182 for urxvt fixes #5400
* | | tui: abort on unexpected enum value (#8266)John Szakmeister2018-04-13
| | | | | | | | | ref #8261
* | | tui: fix uninitialize variable usage (#8261)John Szakmeister2018-04-12
| | | | | | | | | | | | | | | This fixes an issue with compiles failing in release mode due to shape having the possibility of being used uninitialized (since the default case was missing).