aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/tui
Commit message (Collapse)AuthorAge
...
* | | *: Fix linter errorsZyX2017-12-12
|/ /
* | docJustin M. Keyes2017-12-10
| | | | | | | | closes #7622
* | Merge #7676 from florolf/atomic-unibiliumJustin M. Keyes2017-12-06
|\ \ | | | | | | closes #7381
| * | 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.
* | | tui: ignore st terminfo cursor shape (Se, Ss) entriesJustin M. Keyes2017-12-06
| | | | | | | | | | | | closes #7641
* | | tui: flush -V3 ('verbose' >= 3) info ASAPJustin M. Keyes2017-12-05
| | |
* | | tui: set descriptions on termcap extensionsJustin M. Keyes2017-12-05
| | |
* | | tui: dump termcap info if -V3 ('verbose' >= 3)Justin M. Keyes2017-12-05
|/ / | | | | | | | | | | | | | | | | Get terminal debugging info by starting Nvim with 'verbose' level 3: nvim -V3log This is like Vim's `:set termcap`, which was removed in Nvim (and would be very awkward to restore because of the decoupled UI).
* | 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
* | 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
* | 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.
* | 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
* | tui: move terminfo_is_term_family()Justin M. Keyes2017-11-22
| |
* | Merge #7593 'PVS static analysis fixes'Justin M. Keyes2017-11-22
|\ \
| * | Fix for pvs V782, pointer access to first element of arrayPeter Kalauskas2017-11-22
| | |
| * | input.c: replace if/else with switchPeter Kalauskas2017-11-22
|/ /
* | tui: setrgbf/setrgbb: emit semicolons for VTEJustin M. Keyes2017-11-18
| | | | | | | | | | | | | | Severe memory leak observed on gnome-terminal 3.26.2 VTE 0.50.2 when colon-delimited RGB sequences are used. closes #7573
* | tui: 'guicursor': use DECSCUSR for xterm-likes (#7576)Justin M. Keyes2017-11-17
| | | | | | | | | | | | | | Anything claiming to be an xterm gets DECSCUSR. This is the only reasonable choice unless/until we get more reliable detection (#7490). ref #6997 closes #7550
* | Adds nvim_get_hl_by_name/by_idMatthieu Coudron2017-09-30
| | | | | | | | | | | | | | | | | | ...in order to retrieve highlights. Added test/functional/api/highlight_spec.lua HL_NORMAL is not really a good name, since it's more like an empty attribute than the normal's one. If one pays attention, syn_cterm_attr2entry is never called with attr=0 because it's always special cased before. I suggest in subsequent PRs we remove the ATTR_OFF and just insert an EMPTY ATTR/RESET_ATTR/UNINITIALIZED for id 0.
* | tui: Use unibi_var_from_num when availableJames McCoy2017-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As of unibilium 1.2.1, directly manipulating unibi_var_t is deprecated. ../src/nvim/tui/tui.c: In function 'update_attrs': ../src/nvim/tui/tui.c:321:7: warning: 'i' is deprecated: use unibi_var_from_num or unibi_num_from_var instead [-Wdeprecated-declarations] data->params[0].i = (fg >> 16) & 0xff; // red ^~~~ In file included from ../src/nvim/tui/tui.c:12:0: /usr/include/unibilium.h:632:9: note: declared here int i UNIBI_DEPRECATED("use unibi_var_from_num or unibi_num_from_var instead"); ^ All use should go through unibi_{num,str}_from_var and unibi_var_from_{num,str}. Wrap access of unibi_var_t behind a new UNIBI_SET_NUM_VAR macro which uses the new functions when they're available.
* | eventloop: FocusGained: schedule event instead of pseudokeyJustin M. Keyes2017-09-05
| | | | | | | | | | closes #4840 closes #6164
* | tui: DECSCUSR workaround for Konsole (#7236)Vadim A. Misbakh-Soloviov2017-09-04
| | | | | | closes #7235
* | tui: support new iterm2, iTerm2.app terminfo entriesLeonardo Brondani Schenkel2017-08-26
| | | | | | | | | | | | | | | | iTerm2 got its own entry in Thomas Dickey's terminfo.src on 2017-08-16. Make sure that the new entry is handled in the same way as the old entry. closes #7209 closes #7214
* | tui: always use unibi_add_ext_str with unibi_get_ext_str #7204Fredrik Fornwall2017-08-24
| | | | | | | | | | | | | | | | When using an index returned by unibi_add_ext_str() we should always use unibi_get_ext_str() and not rely on the index being lower than unibi_string_begin_. Closes #7206
* | tui: fix DECSCUSR logic #6997Sebastian Parborg2017-08-13
| | | | | | | | | | | | | | | | | | | | Fix linuxvt cursor shape codes Fix konsole cursor_shapes (even when inside tmux) Do not trust old VTE terminal lies Closes #6978 Closes #7002 Closes #7049
* | coverity/166184: Check length of str, not termJames McCoy2017-08-11
| | | | | | | | | | | | | | | | 32396b5879b429def1c48948069c55366d41b9be add length checks to TERMINAL_FAMILY/STARTS_WITH to ensure memcmp() wouldn't read past the end of the string. However, "term" was copy/pasted from TERMINAL_FAMILY so STARTS_WITH() was unnecessarily reading the, potentially NULL, term variable.
* | tui: fix truecolor in libvte, tmux #7037DarkDefender2017-07-30
| | | | | | | | Closes #7041
* | log: termios info to DEBUG instead of INFOJustin M. Keyes2017-07-23
| |
* | tui: Do not override 'termguicolors' choice (#7004)DarkDefender2017-07-15
| | | | | | | | | | | | | | * Do not guard true color support with white list * Remove ext_bool (it is unused) Closes #7003
* | tui: Remove superflous iTerm2 test added in error.Jonathan de Boyne Pollard2017-07-09
| |
* | tui: Improve the setrgbf/setrgbb fallback logic.Jonathan de Boyne Pollard2017-07-09
| | | | | | | | | | | | | | The libvte test was too agressive, and is reduced to only triggering when it is libvte 0.36 AND a gnome or xterm terminal type is used. Contrastingly, tmux was not on the list at all and now is.
* | lintJustin M. Keyes2017-07-07
| |
* | tui: Coding style changes onlyJonathan de Boyne Pollard2017-07-06
| | | | | | | | Per warnings about house style from automated tools.
* | tui: Switch terminal keyboard mode properly.Jonathan de Boyne Pollard2017-07-06
| | | | | | | | | | | | | | | | The terminfo doco explicitly states that it covers the case where the terminal is in application cursor/keypad (i.e. "keypad transmit") mode, and not where it is in normal cursor/keypad (i.e. "keypad local") mode. Full screen applications like nvim must switch to and from keypad transmit mode when expecting the control sequences given by terminfo.
* | tui: Coding style changes onlyJonathan de Boyne Pollard2017-07-06
| | | | | | | | Per warnings about house style from automated tools.
* | tui: Track cursor visibility.Jonathan de Boyne Pollard2017-06-10
| | | | | | | | | | | | This fixes a test failure caused by dfaecb25f6a9a94f29a38d9f2d24a579b3dff5f not tracking what the current visibility is and whether it matches the current business state.
* | tui: Eliminate more extraneous control sequences.Jonathan de Boyne Pollard2017-06-09
| | | | | | | | | | | | When higher layers flush the TUI layer output buffer, but there is nothing in the buffer to flush, no longer does the TUI layer write out unnecessary cnorm/civis sequences surrounding that nothing.
* | tui: Another linux terminfo capability fixJonathan de Boyne Pollard2017-06-09
| | | | | | | | | | For the linux terminal type apply the same fixup to the terminfo civis string that is applied to the cnorm string.
* | tui: Recognize "Tc" terminfo capability.Jonathan de Boyne Pollard2017-06-05
| | | | | | | | | | | | | | | | | | | | | | This is a new convention pioneered by tmux. It does not do much for nvim; since nvim always looks to see whether it should be making up "setrgbf" and "setrgbb" capabilities. But it is a way for terminfo to force this, irrespective of the hardwired list in the code, for more terminal types. On the gripping hand, updating terminfo descriptions to actually have "setrgbf" and "setrgbb" capabilities so that nvim never has to try to invent them in the first place, is as good if not better an approach for overriding what is baked into the code.
* | tui: Combine multiple attribute changes.Jonathan de Boyne Pollard2017-06-05
| | | | | | | | | | Use the terminfo set_attribute capability to set multiple attributes in one control sequence, if it is available.
* | tui: Remove the iTerm2 corner case.Jonathan de Boyne Pollard2017-06-04
| |
* | tui: Do not optimize left motion at the right margin.Jonathan de Boyne Pollard2017-06-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From observation, there are several different possible behaviours: 1. Deferred wrap like a real DEC VT. The cursor stays visible in the last column, and CUB is calculated relative to that column. Examples: xterm, Unicode rxvt, PuTTY, nosh console-terminal-emulator, FreeBSD kernel's built-in emulator, Linux's built-in emulator 2. Deferred wrap like a real DEC VT. CUB is calculated relative to the last column. But the cursor is invisible. Examples: emulators using newer libvte 3. Non-deferred wrap. The cursor has already wrapped to the next line and CUB does not wrap back. Examples: cygwin, Interix 4. Non-deferred wrap that acts like deferred wrap. The cursor has already visibly wrapped to the next line, but CUB can wrap back around the left margin. Examples: Konsole 5. Deferred wrap with visibly out of bounds cursor. The cursor visibly moves outwith the screen boundaries. CUB is calculated relative to a cursor column that has overflowed the end of the screen grid array. Examples: iTerm2 6. Deferred wrap with invisibly out of bounds cursor. CUB is calculated relative to a cursor column that has overflowed the end of the screen grid array. And the cursor is invisible. Examples: emulators using older libvte In many cases, nvim does not have enough information to know which behaviour the terminal will exhibit, and thus the correct amount of CUB to issue.
* | tui: Treat cygwin as an immediate-wrap terminal.Jonathan de Boyne Pollard2017-06-03
| | | | | | | | Alongside interix.
* | tui: Add tmux to the always 256-colour capable list.Jonathan de Boyne Pollard2017-06-03
| |
* | tui: Add terminfo patches for linux on MacOS.Jonathan de Boyne Pollard2017-06-03
| | | | | | | | | | Also enable italics on Konsole when it is falsely claiming to be xterm. Also note the reasons for some of the patcher terminfo patches.