aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/tui/terminfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/tui/terminfo.c')
-rw-r--r--src/nvim/tui/terminfo.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/nvim/tui/terminfo.c b/src/nvim/tui/terminfo.c
index 75e9a2d8da..fdc33f0a77 100644
--- a/src/nvim/tui/terminfo.c
+++ b/src/nvim/tui/terminfo.c
@@ -9,6 +9,7 @@
#include <unibilium.h>
#include "nvim/log.h"
+#include "nvim/memory.h"
#include "nvim/tui/terminfo.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
@@ -94,51 +95,72 @@ bool terminfo_is_term_family(const char *term, const char *family)
/// Loads a built-in terminfo db when we (unibilium) failed to load a terminfo
/// record from the environment (termcap systems, unrecognized $TERM, …).
/// We do not attempt to detect xterm pretenders here.
-static unibi_term *terminfo_builtin(const char *term)
+///
+/// @param term $TERM value
+/// @param[out,allocated] termname decided builtin 'term' name
+/// @return [allocated] terminfo structure
+static unibi_term *terminfo_builtin(const char *term, char **termname)
{
if (terminfo_is_term_family(term, "xterm")) {
+ *termname = xstrdup("builtin_xterm");
return unibi_from_mem((const char *)xterm_256colour_terminfo,
sizeof xterm_256colour_terminfo);
} else if (terminfo_is_term_family(term, "screen")) {
+ *termname = xstrdup("builtin_screen");
return unibi_from_mem((const char *)screen_256colour_terminfo,
sizeof screen_256colour_terminfo);
} else if (terminfo_is_term_family(term, "tmux")) {
+ *termname = xstrdup("builtin_tmux");
return unibi_from_mem((const char *)tmux_256colour_terminfo,
sizeof tmux_256colour_terminfo);
} else if (terminfo_is_term_family(term, "rxvt")) {
+ *termname = xstrdup("builtin_rxvt");
return unibi_from_mem((const char *)rxvt_256colour_terminfo,
sizeof rxvt_256colour_terminfo);
} else if (terminfo_is_term_family(term, "putty")) {
+ *termname = xstrdup("builtin_putty");
return unibi_from_mem((const char *)putty_256colour_terminfo,
sizeof putty_256colour_terminfo);
} else if (terminfo_is_term_family(term, "linux")) {
+ *termname = xstrdup("builtin_linux");
return unibi_from_mem((const char *)linux_16colour_terminfo,
sizeof linux_16colour_terminfo);
} else if (terminfo_is_term_family(term, "interix")) {
+ *termname = xstrdup("builtin_interix");
return unibi_from_mem((const char *)interix_8colour_terminfo,
sizeof interix_8colour_terminfo);
} else if (terminfo_is_term_family(term, "iterm")
|| terminfo_is_term_family(term, "iterm2")
|| terminfo_is_term_family(term, "iTerm.app")
|| terminfo_is_term_family(term, "iTerm2.app")) {
+ *termname = xstrdup("builtin_iterm");
return unibi_from_mem((const char *)iterm_256colour_terminfo,
sizeof iterm_256colour_terminfo);
} else if (terminfo_is_term_family(term, "st")) {
+ *termname = xstrdup("builtin_st");
return unibi_from_mem((const char *)st_256colour_terminfo,
sizeof st_256colour_terminfo);
} else if (terminfo_is_term_family(term, "gnome")
|| terminfo_is_term_family(term, "vte")) {
+ *termname = xstrdup("builtin_vte");
return unibi_from_mem((const char *)vte_256colour_terminfo,
sizeof vte_256colour_terminfo);
} else {
+ *termname = xstrdup("builtin_ansi");
return unibi_from_mem((const char *)ansi_terminfo,
sizeof ansi_terminfo);
}
}
-unibi_term *terminfo_from_builtin(const char *term)
+/// @param term $TERM value
+/// @param[out,allocated] termname decided builtin 'term' name
+/// @return [allocated] terminfo structure
+unibi_term *terminfo_from_builtin(const char *term, char **termname)
{
- unibi_term *ut = terminfo_builtin(term);
+ unibi_term *ut = terminfo_builtin(term, termname);
+ if (*termname == NULL) {
+ *termname = xstrdup("builtin_?");
+ }
// Disable BCE by default (for built-in terminfos). #7624
// https://github.com/kovidgoyal/kitty/issues/160#issuecomment-346470545
unibi_set_bool(ut, unibi_back_color_erase, false);