Commit Graph

202 Commits

Author SHA1 Message Date
Justin M. Keyes
0b93bab6c2 tui: update cleared area only if non-default bg
This check was removed in 133ae5eeef without explanation.
2017-11-24 09:53:09 +01:00
Justin M. Keyes
b838ad5b7a tui: Disable BCE almost always. #7624
133ae5eeef 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
2017-11-24 09:18:13 +01:00
Justin M. Keyes
9888a54f15 tui: Disable BCE by default. #7624
133ae5eeef 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
2017-11-23 21:21:58 +01:00
Justin M. Keyes
51637f4256 tui: move terminfo_is_term_family() 2017-11-22 23:19:51 +01:00
Justin M. Keyes
8c959be511 Merge #7593 'PVS static analysis fixes' 2017-11-22 23:12:30 +01:00
Peter Kalauskas
c24b74c229 Fix for pvs V782, pointer access to first element of array 2017-11-22 09:21:34 -08:00
Peter Kalauskas
fdcde7dba3 input.c: replace if/else with switch 2017-11-22 09:21:34 -08:00
Justin M. Keyes
f19e5d6530 tui: setrgbf/setrgbb: emit semicolons for VTE
Severe memory leak observed on gnome-terminal 3.26.2 VTE 0.50.2 when
colon-delimited RGB sequences are used.

closes #7573
2017-11-18 12:26:09 +01:00
Justin M. Keyes
07931ed1c8 tui: 'guicursor': use DECSCUSR for xterm-likes (#7576)
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
2017-11-17 22:24:01 +01:00
Matthieu Coudron
ba7277cfb4 Adds nvim_get_hl_by_name/by_id
...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.
2017-09-30 11:43:26 +09:00
James McCoy
b9cba41106 tui: Use unibi_var_from_num when available
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.
2017-09-16 23:23:01 -04:00
Justin M. Keyes
b6b6e4a96f eventloop: FocusGained: schedule event instead of pseudokey
closes #4840
closes #6164
2017-09-05 15:01:06 +02:00
Vadim A. Misbakh-Soloviov
f050aaabbb tui: DECSCUSR workaround for Konsole (#7236)
closes #7235
2017-09-04 18:48:05 +02:00
Leonardo Brondani Schenkel
e1628fab00 tui: support new iterm2, iTerm2.app terminfo entries
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
2017-08-26 17:11:56 +02:00
Fredrik Fornwall
da84f7dcf9 tui: always use unibi_add_ext_str with unibi_get_ext_str #7204
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
2017-08-24 09:22:21 +02:00
Sebastian Parborg
1f9c139fd3 tui: fix DECSCUSR logic #6997
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
2017-08-13 01:13:28 +02:00
James McCoy
9edf00bddf coverity/166184: Check length of str, not term
32396b5879 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.
2017-08-11 10:30:38 -04:00
DarkDefender
cb13ef3596 tui: fix truecolor in libvte, tmux #7037
Closes #7041
2017-07-30 22:17:31 +02:00
Justin M. Keyes
4b390fafc9 log: termios info to DEBUG instead of INFO 2017-07-23 15:01:31 +02:00
DarkDefender
8898793ade tui: Do not override 'termguicolors' choice (#7004)
* Do not guard true color support with white list
* Remove ext_bool (it is unused)

Closes #7003
2017-07-15 16:36:45 +02:00
Jonathan de Boyne Pollard
0a7e7e0ecf tui: Remove superflous iTerm2 test added in error. 2017-07-09 19:29:04 +01:00
Jonathan de Boyne Pollard
68d2fb7570 tui: Improve the setrgbf/setrgbb fallback logic.
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.
2017-07-09 19:08:56 +01:00
Justin M. Keyes
1ae7744f42 lint 2017-07-07 00:33:57 +02:00
Jonathan de Boyne Pollard
852f21ed05 tui: Coding style changes only
Per warnings about house style from automated tools.
2017-07-06 10:17:13 +02:00
Jonathan de Boyne Pollard
5701165f06 tui: Switch terminal keyboard mode properly.
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.
2017-07-06 10:17:13 +02:00
Jonathan de Boyne Pollard
de8a9f6c33 tui: Coding style changes only
Per warnings about house style from automated tools.
2017-07-06 10:17:13 +02:00
Jonathan de Boyne Pollard
2c236fc67b tui: Track cursor visibility.
This fixes a test failure caused by dfaecb25f6a9a94f29a38d9f2d24a579b3dff5f
not tracking what the current visibility is and whether it matches the
current business state.
2017-06-10 09:00:15 +01:00
Jonathan de Boyne Pollard
cdfaecb25f tui: Eliminate more extraneous control sequences.
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.
2017-06-09 19:50:13 +01:00
Jonathan de Boyne Pollard
6d35c5c7ec tui: Another linux terminfo capability fix
For the linux terminal type apply the same fixup to the terminfo civis
string that is applied to the cnorm string.
2017-06-09 19:33:17 +01:00
Jonathan de Boyne Pollard
b22a61cdbb tui: Recognize "Tc" terminfo capability.
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.
2017-06-05 22:47:44 +01:00
Jonathan de Boyne Pollard
054b03e07a tui: Combine multiple attribute changes.
Use the terminfo set_attribute capability to set multiple attributes in one
control sequence, if it is available.
2017-06-05 22:12:53 +01:00
Jonathan de Boyne Pollard
239b0aaf2e tui: Remove the iTerm2 corner case. 2017-06-04 22:44:24 +01:00
Jonathan de Boyne Pollard
997411b635 tui: Do not optimize left motion at the right margin.
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.
2017-06-04 21:18:44 +01:00
Jonathan de Boyne Pollard
15500dbd8f tui: Treat cygwin as an immediate-wrap terminal.
Alongside interix.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
f6116eeaa3 tui: Add tmux to the always 256-colour capable list. 2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
b604e3a086 tui: Add terminfo patches for linux on MacOS.
Also enable italics on Konsole when it is falsely claiming to be xterm.
Also note the reasons for some of the patcher terminfo patches.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
ae7bb47b4f tui: Coding style changes only. 2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
6fe839a688 tui: Do some deferred wrap on iTerm2.
Partly undo 8ab08a65ba3bc9a44741a2ec9aa81fbcc77467fb.  Further testing
by Enrico Ghirardi suggests limiting the non-deferred automatic wrap to
only the bottom line, whose rightmost column is not printed for iTerm.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
98907c57ae tui: Several minor tweaks per commentary and 256-colourize PuTTY.
* Don't use &data->grid when we already have grid .
* Consolidate into a single assignment to the default_attr flag.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
b672035ff5 tui: Coding style changes only 2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
7cbf52db1b tui: Separate out built-in terminfo records.
They are now in their own nvim/tui/terminfo.c file.

Also turn the TERMINAL_FAMILY macro into a function.  Use the terminfo_
prefix for its name as other parts of the program are unlikely to want
that namespace, and the prefix is already used for some other TUI
functions.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
a2aba3f2f1 tui: Handle a corner case for rare terminals.
Terminals that do not defer automatic right margin wrap cannot print
characters in the bottom right corner without immediately scrolling.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
1903fb5de0 tui: Make iTerm2 have no deferred wrap.
Testing by Enrico Ghirardi and review of the source indicates that
iTerm2 is a second terminal emulator that does not defer automatic wrap
at the right margin.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
63fd561815 tui: Fix OBOE in linux cnorm capability fixup code. 2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
1aba6c607b tui: Change screen status line back to hardstatus.
Reverse the change in c11c60325a2baba94abe6bdfa1c11afe28c16661.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
4408bd28cb tui: Char signedness fix for the big blocks of (signed) numbers. 2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
1b008be1e6 tui: Correct to_status_line for screen.
PM...ST actually sends the string to screen's message area.  Sending the
string to the status line requires a different control sequence peculiar to
screen.

Also make iTerm2 SGR 38/48 consistent.
2017-06-03 18:53:29 +01:00
Jonathan de Boyne Pollard
1c1231bf13 tui: Add built-in terminfo entry for VTE.
Also slightly refactor the way in which GNOME/MATE Terminal pretending to be
xterm is detected.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
32396b5879 tui: Perform length safety check in comparison macros. 2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
41403c6d25 tui: Treat genuine Xterm and iTerm.app as standards-conformant.
They both can handle SGR control sequences in the form set out in
ISO 8613-6:1994/ITU T.416:1993.
2017-06-03 18:53:28 +01:00