Commit Graph

8697 Commits

Author SHA1 Message Date
Jonathan de Boyne Pollard
2b35f40fc1 doco: Adjust TERM and terminfo doco.
Use a table and adjust cursor-shape a bit.
2017-06-07 14:21:53 +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
86d796656c tui: Correct commentary on tmux colour tests. 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
9475cf2cc6 screen: Correct commentary.
This "trick" is not conditional upon the type of UI.
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
94d00d9473 doco: Add some guidance on up-to-date terminfo. 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
c201518674 doco: Correct :help term-dependent-settings .
The example used &term which is no longer meaningful.
Fortunately, we can change this into a useful example using $TERM that also
shows how to address a common need with termguicolors at the same time.
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
c2a0fd349e doco: Move TERM help into its own section and expand.
:help TERM previously pointed to a section that no longer even discussed the
variable.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
533f5c38c4 doco: Note some common $TERM mistakes and how to fix them.
Also explain more clearly the difference between Vim and Nvim
when it comes to built-in terminfo entries.
2017-06-03 18:53:28 +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
Jonathan de Boyne Pollard
5265ac5000 tui: Change terminal family recognition to avoid '+' entries.
The terminfo commentary states that these are not standalone
entries suitable for end-use.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
5377de33ac tui: Add st to the always 256-colour capable list.
Also comment and augment some terminal colour tests.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
3f8dedd7ae tui: Correct a copy and paste error in stterm tests.
The test decsription was correct; the test was not.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
24db94b1a6 tui: Fix Interix and account for deferred wrap.
The Interix termcap entry is missing the carriage_return capability which nvim
relies upon.  And Interix is one of the few terminal emulators that does not
defer automatic wrap at the right margin, which is now accounted for when
moving the cursor left and when outputting whole lines at a time.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
0d53767274 tui: Add iTerm and rxvt to the terminals that know extended DECSCUSR. 2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
8f60395dd1 tui: Update colour tests some more. 2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
6910bfee0f tui: Correct error in terminfo extension processing.
Using the right unibilium query function then revealed a latent NULL pointer
problem.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
1f3b5e1a82 tui: Correct error in terminfo extension processing.
Using the wrong unibilium query function just happened to work with the
various terminfo records used in local testing.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
8768b7f4a0 tui: Remove now-unused flag variable.
Follows on from fcf0d13f48bffbd41749069ce383d01153dd960c.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
e6cbb01b55 tui: Update colour tests. 2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
a2434aeddb tui: Remove tmux wrapper from the Konsole path.
tmux has its own code path, now; and the tmux wrapping was not the ideal thing
to do in the first place.

Also improve the commentary on the built-in terminfo records.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
16300d02c7 tui: Improvements to RGB colour support.
The details are in the on-line help under :help true-color .

The brief precis is that nvim is (I hope.) converging with tmux and libvte.
It is taking the same approach with setrgbf and setrgbb terminfo capabilities
that it does with the Ss and Se terminfo capabilities.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
67e2120459 tui: Refactor built-in teminfo records.
No change to their contents, but make the Big Blocks Of Numbers half as wide
but twice as deep, in order to accomodate house style.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
9e9ffeb5eb tui: Update fallback terminfo records.
Replace the 8-color xterm from unibilium with the 256-colour one from terminfo.
Add a fallback record for suckless terminal.
2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
503a5c458b tui: Spelling corrections in doco and commentary 2017-06-03 18:53:28 +01:00
Jonathan de Boyne Pollard
74472f7b2b tui: Fix conflict with predefined "linux" macro. 2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
756a17a848 doco: Replace termcap with terminfo where appropriate.
Also document better what to do on slow terminals.
2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
76a6509c59 tui: More refactoring, and improvements to cursor shape support.
The details are in the on-line help under :help cursor-shape .

The brief precis is that nvim is following the lead of tmux, and going
beyond what tmux does to make cursor shape changes work on a broad range of
terminals.  This includes on tmux itself, which is no longer bypassed.
2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
03683c375c tui: Disable interference in guicursor by higher layers.
Ironically, higher layers trying to be "smart" about the terminal type
but not actually being very smart at all, makes it more difficult rather
than less to correct the TUI layer.

Note that this orphans the os_term_is_nice() function and down the road,
presuming that we do not have to revert this, that function can be removed.
It incorporates knowledge of terminal types and behaviours in the wrong place.
2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
3d8e0594e4 tui: Split fix_terminfo() up and refactor.
There are now a few built-in terminfo entries, taken either from unibilium
or ncurses terminfo, for falling back upon when there is no terminfo database
or when it is missing stuff.  In an ideal world, these would be in unibilium
itself.

The ultimate fallback, for no terminfo database and no built-in terminfo
record that matches the terminal type, is now the "ansi" terminal type; so
unknown terminal types are now considered to have at minimum the basic
ECMA-48 colour, motion, and editing capabilities.

The terminfo records are just blobs, raw images of the equivalent terminfo file
created with the od command.  No longer are incomplete terminfo records built
up with code.  These blobs are the full, real, records; already built.

The post-processing of the terminfo record, once found, is split into the
part where we fix known errors and deficiencies in terminfo, and the part
where we add extensions that we need that terminfo does not define
capabilities for.  In an ideal world, the former would be a no-op.

No part of the TUI layer apart from these is aware of terminal type or has
conditional code based upon checking environment variables at runtime.  It
is all pre-calculated and written into unibilium (or the TUIData object) at
initialization time.

This is fairly aggressive about turning on 256-colour and true colour support.

This also positively decodes genuine xterm for turning on DECSLRM use, rather
than assuming that anything that says that it is xterm is actually xterm,
fixing scrolling problems with vertically split windows.
2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
d65cff9de8 doc: Document some more terminal behaviours.
This documents 256-colour and true colour handling, cursor shapes,
and scrolling regions.

Almost all of these headings are taken from the Vim doco, so that
the :help commands that people learn are a transferable skill.
2017-06-03 18:53:27 +01:00
Jonathan de Boyne Pollard
6be921b71c doc: Relegate xterm-8bit to a removed feature. 2017-06-03 18:53:27 +01:00