refactor: Remove term modules and termcap options

- Removed term.c, term.h and term_defs.h
- Tests for T_* values were removed. screen.c was simplified as a
  consequence(the best strategy for drawing is implemented in the UI layer)
- Redraw functions now call ui.c functions directly. Updates are flushed with
  `ui_flush()`
- Removed all termcap options(they now return empty strings for compatibility)
- &term/&ttybuiltin options return a constant value(nvim)
- &t_Co is still available, but it mirrors t_colors directly
- Remove cursor tracking from screen.c and the `screen_start` function. Now the
  UI is expected to maintain cursor state across any call, and reset it when
  resized.
- Remove unused code
This commit is contained in:
Thiago de Arruda
2015-02-16 23:47:56 -03:00
parent 486d2e944d
commit 3baba1e7bc
50 changed files with 849 additions and 3695 deletions

View File

@@ -47,7 +47,7 @@
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
#include "nvim/term.h"
#include "nvim/ui.h"
#include "nvim/undo.h"
#include "nvim/os/event.h"
#include "nvim/os/input.h"
@@ -2161,7 +2161,7 @@ static int vgetorpeek(int advance)
}
}
setcursor();
out_flush();
ui_flush();
new_wcol = curwin->w_wcol;
new_wrow = curwin->w_wrow;
curwin->w_wcol = old_wcol;
@@ -2380,8 +2380,8 @@ inchar (
int script_char;
if (wait_time == -1L || wait_time > 100L) { /* flush output before waiting */
cursor_on();
out_flush();
ui_cursor_on();
ui_flush();
}
/*
@@ -2450,7 +2450,7 @@ inchar (
* Always flush the output characters when getting input characters
* from the user.
*/
out_flush();
ui_flush();
/*
* Fill up to a third of the buffer, because each character may be
@@ -3246,7 +3246,7 @@ showmap (
}
if (p_verbose > 0)
last_set_msg(mp->m_script_ID);
out_flush(); /* show one line at a time */
ui_flush(); /* show one line at a time */
}
/*
@@ -4083,75 +4083,6 @@ int put_escstr(FILE *fd, char_u *strstart, int what)
return OK;
}
/*
* Check all mappings for the presence of special key codes.
* Used after ":set term=xxx".
*/
void check_map_keycodes(void)
{
mapblock_T *mp;
char_u *p;
int i;
char_u buf[3];
char_u *save_name;
int abbr;
int hash;
buf_T *bp;
validate_maphash();
save_name = sourcing_name;
sourcing_name = (char_u *)"mappings"; /* avoids giving error messages */
/* This this once for each buffer, and then once for global
* mappings/abbreviations with bp == NULL */
for (bp = firstbuf;; bp = bp->b_next) {
/*
* Do the loop twice: Once for mappings, once for abbreviations.
* Then loop over all map hash lists.
*/
for (abbr = 0; abbr <= 1; ++abbr)
for (hash = 0; hash < 256; ++hash) {
if (abbr) {
if (hash) /* there is only one abbr list */
break;
if (bp != NULL)
mp = bp->b_first_abbr;
else
mp = first_abbr;
} else {
if (bp != NULL)
mp = bp->b_maphash[hash];
else
mp = maphash[hash];
}
for (; mp != NULL; mp = mp->m_next) {
for (i = 0; i <= 1; ++i) { /* do this twice */
if (i == 0)
p = mp->m_keys; /* once for the "from" part */
else
p = mp->m_str; /* and once for the "to" part */
while (*p) {
if (*p == K_SPECIAL) {
++p;
if (*p < 128) { /* for "normal" tcap entries */
buf[0] = p[0];
buf[1] = p[1];
buf[2] = NUL;
(void)add_termcap_entry(buf, FALSE);
}
++p;
}
++p;
}
}
}
}
if (bp == NULL)
break;
}
sourcing_name = save_name;
}
/*
* Check the string "keys" against the lhs of all mappings.
* Return pointer to rhs of mapping (mapblock->m_str).
@@ -4236,3 +4167,71 @@ void add_map(char_u *map, int mode)
free(s);
p_cpo = cpo_save;
}
// Translate an internal mapping/abbreviation representation into the
// corresponding external one recognized by :map/:abbrev commands;
// respects the current B/k/< settings of 'cpoption'.
//
// This function is called when expanding mappings/abbreviations on the
// command-line, and for building the "Ambiguous mapping..." error message.
//
// It uses a growarray to build the translation string since the
// latter can be wider than the original description. The caller has to
// free the string afterwards.
//
// Returns NULL when there is a problem.
static char_u * translate_mapping (
char_u *str,
int expmap // TRUE when expanding mappings on command-line
)
{
garray_T ga;
ga_init(&ga, 1, 40);
int cpo_bslash = (vim_strchr(p_cpo, CPO_BSLASH) != NULL);
int cpo_special = (vim_strchr(p_cpo, CPO_SPECI) != NULL);
for (; *str; ++str) {
int c = *str;
if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL) {
int modifiers = 0;
if (str[1] == KS_MODIFIER) {
str++;
modifiers = *++str;
c = *++str;
}
if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL) {
if (expmap && cpo_special) {
ga_clear(&ga);
return NULL;
}
c = TO_SPECIAL(str[1], str[2]);
if (c == K_ZERO) {
// display <Nul> as ^@
c = NUL;
}
str += 2;
}
if (IS_SPECIAL(c) || modifiers) { /* special key */
if (expmap && cpo_special) {
ga_clear(&ga);
return NULL;
}
ga_concat(&ga, get_special_key_name(c, modifiers));
continue; /* for (str) */
}
}
if (c == ' ' || c == '\t' || c == Ctrl_J || c == Ctrl_V
|| (c == '<' && !cpo_special) || (c == '\\' && !cpo_bslash)) {
ga_append(&ga, cpo_bslash ? Ctrl_V : '\\');
}
if (c) {
ga_append(&ga, (char)c);
}
}
ga_append(&ga, NUL);
return (char_u *)(ga.ga_data);
}