Splitting init_termcaps() into multiple submethods
This commit is contained in:
parent
9c987ca49c
commit
0864055cab
54
.travis.yml
54
.travis.yml
|
@ -1,19 +1,37 @@
|
||||||
language: cpp
|
language: cpp
|
||||||
|
dist: trusty
|
||||||
sudo: required
|
sudo: required
|
||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
|
|
||||||
install:
|
addons:
|
||||||
- lsb_release -a
|
apt:
|
||||||
- uname -a
|
packages:
|
||||||
- sudo apt-get update
|
- autotools-dev
|
||||||
- sudo apt-get -y install autotools-dev automake autoconf autoconf-archive libtool libglib2.0-dev libncurses5-dev libgpm-dev gperf
|
- automake
|
||||||
|
- autoconf
|
||||||
|
- autoconf-archive
|
||||||
|
- libtool
|
||||||
|
- libglib2.0-dev
|
||||||
|
- libncurses5-dev
|
||||||
|
- libgpm-dev
|
||||||
|
- gperf
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
|
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
|
||||||
# via the "travis encrypt" command using the project repo's public key
|
# via the "travis encrypt" command using the project repo's public key
|
||||||
- secure: "HzE/Yc8AWHTnZYFIfgKI9uFLlrKBw8L7cucRRYGzVyS1YGijjuchIeFxl4ahUCW6/pwvj4Wh9JUL1pOm+mB89XRSMSCGXN7gkFA73DB1Eq/oNdoDQbzKJeMYEP+WhPUuwTGClukRsjN48v35Nc2DJ4bGwasOjwOElZZKgNe/XrF7ok9eI1atcIl4BaxjnjNIyG9A1+MKhjUkT+FnPuqjXXz02RWD7E0IC94CK665LjdDZsnsRGf3sKBr1ZyI4uQmFmZ8W/7DxSsW1xkhtTOyY+QxQ8+CqSfiBgREwU2bPQuM/rAdAISvLk+1zMOja60B2YHTNreVi4Jj0FAQUKto9feC2QZTTrX+jv6NQEyH4XilMak9vBHKpCb6MFhHgDO4puXTur1OzGY1dtHQeQ72Ap2aAy0pPJruqeYzd9K80cSTDhqcOywt+dwja7lrPEVhqltKXFXSviLj6531to1PQBVi+Uw3uMbdo1twtkvW0SRgqq2h8OzD6SWsdI63nurQxK0qpGFnE2/N5pWxOHud6Me8G6ZBYeTRNKMrHroGoKrUr4CwgB80SKR0qj7Yga3HnJLkKwEUmRnK1gA2MD/td8IT4QAf10VI7J5P1rullZ7zK0eVnE+bHHgyd5XJkgspaXezYVPPh2hNLwREXztU3DfQgrzwjuQ4aBEGiYgcGMU="
|
- secure: |-
|
||||||
|
HzE/Yc8AWHTnZYFIfgKI9uFLlrKBw8L7cucRRYGzVyS1YGijjuchIeFxl4ahUCW6/pwvj4
|
||||||
|
Wh9JUL1pOm+mB89XRSMSCGXN7gkFA73DB1Eq/oNdoDQbzKJeMYEP+WhPUuwTGClukRsjN4
|
||||||
|
8v35Nc2DJ4bGwasOjwOElZZKgNe/XrF7ok9eI1atcIl4BaxjnjNIyG9A1+MKhjUkT+FnPu
|
||||||
|
qjXXz02RWD7E0IC94CK665LjdDZsnsRGf3sKBr1ZyI4uQmFmZ8W/7DxSsW1xkhtTOyY+Qx
|
||||||
|
Q8+CqSfiBgREwU2bPQuM/rAdAISvLk+1zMOja60B2YHTNreVi4Jj0FAQUKto9feC2QZTTr
|
||||||
|
X+jv6NQEyH4XilMak9vBHKpCb6MFhHgDO4puXTur1OzGY1dtHQeQ72Ap2aAy0pPJruqeYz
|
||||||
|
d9K80cSTDhqcOywt+dwja7lrPEVhqltKXFXSviLj6531to1PQBVi+Uw3uMbdo1twtkvW0S
|
||||||
|
Rgqq2h8OzD6SWsdI63nurQxK0qpGFnE2/N5pWxOHud6Me8G6ZBYeTRNKMrHroGoKrUr4Cw
|
||||||
|
gB80SKR0qj7Yga3HnJLkKwEUmRnK1gA2MD/td8IT4QAf10VI7J5P1rullZ7zK0eVnE+bHH
|
||||||
|
gyd5XJkgspaXezYVPPh2hNLwREXztU3DfQgrzwjuQ4aBEGiYgcGMU=
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
|
@ -32,8 +50,14 @@ matrix:
|
||||||
build_command_prepend: "autoreconf -v --install --force && ./configure --prefix=/usr && make clean"
|
build_command_prepend: "autoreconf -v --install --force && ./configure --prefix=/usr && make clean"
|
||||||
build_command: "make V=1 -j10"
|
build_command: "make V=1 -j10"
|
||||||
branch_pattern: master
|
branch_pattern: master
|
||||||
|
before_install:
|
||||||
|
- lsb_release -a
|
||||||
|
- uname -a
|
||||||
script:
|
script:
|
||||||
- autoreconf -v --install --force && ./configure --prefix=/usr && make -j10 && make check
|
- autoreconf -v --install --force
|
||||||
|
- ./configure --prefix=/usr
|
||||||
|
- make -j10
|
||||||
|
- make check
|
||||||
|
|
||||||
#
|
#
|
||||||
# Coveralls
|
# Coveralls
|
||||||
|
@ -42,6 +66,8 @@ matrix:
|
||||||
env:
|
env:
|
||||||
- TEST="Coveralls"
|
- TEST="Coveralls"
|
||||||
before_install:
|
before_install:
|
||||||
|
- lsb_release -a
|
||||||
|
- uname -a
|
||||||
- pip install --user cpp-coveralls
|
- pip install --user cpp-coveralls
|
||||||
script:
|
script:
|
||||||
- ./build.sh coverage
|
- ./build.sh coverage
|
||||||
|
@ -51,3 +77,17 @@ matrix:
|
||||||
after_success:
|
after_success:
|
||||||
- coveralls --gcov-options '\-lp' -e debian -e doc -e icon -e logo -e m4 -e scripts
|
- coveralls --gcov-options '\-lp' -e debian -e doc -e icon -e logo -e m4 -e scripts
|
||||||
|
|
||||||
|
#
|
||||||
|
# macOS
|
||||||
|
#
|
||||||
|
- os: osx
|
||||||
|
env:
|
||||||
|
- TEST="macOS"
|
||||||
|
before_install:
|
||||||
|
- uname -a
|
||||||
|
script:
|
||||||
|
- autoreconf -v --install --force
|
||||||
|
- ./configure --prefix=/usr
|
||||||
|
- make -j10
|
||||||
|
- make check
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* Improved command line paramenter handling
|
* Improved command line paramenter handling
|
||||||
* New command line paramenter --no-terminal-detection
|
* New command line paramenter --no-terminal-detection
|
||||||
* New command line paramenter --no-color-change
|
* New command line paramenter --no-color-change
|
||||||
|
* Splitting init_termcaps() into multiple submethods
|
||||||
|
|
||||||
2017-11-11 Markus Gans <guru.mail@muenster.de>
|
2017-11-11 Markus Gans <guru.mail@muenster.de>
|
||||||
* Improved code coverage tests
|
* Improved code coverage tests
|
||||||
|
|
|
@ -454,6 +454,12 @@ class FTerm
|
||||||
static void init_cygwin_charmap();
|
static void init_cygwin_charmap();
|
||||||
static void init_teraterm_charmap();
|
static void init_teraterm_charmap();
|
||||||
static void init_termcaps();
|
static void init_termcaps();
|
||||||
|
static void init_termcaps_booleans();
|
||||||
|
static void init_termcaps_numeric();
|
||||||
|
static void init_termcaps_strings (char*&);
|
||||||
|
static void init_termcaps_keys (char*&);
|
||||||
|
static void init_OptiMove();
|
||||||
|
static void init_OptiAttr();
|
||||||
static void init_locale();
|
static void init_locale();
|
||||||
static void init_encoding();
|
static void init_encoding();
|
||||||
static void redefineColorPalette();
|
static void redefineColorPalette();
|
||||||
|
|
132
src/fterm.cpp
132
src/fterm.cpp
|
@ -3283,12 +3283,10 @@ void FTerm::init_termcaps()
|
||||||
success = 1
|
success = 1
|
||||||
, no_entry = 0
|
, no_entry = 0
|
||||||
, db_not_found = -1
|
, db_not_found = -1
|
||||||
, not_available = -1
|
|
||||||
, uninitialized = -2;
|
, uninitialized = -2;
|
||||||
static char term_buffer[2048];
|
static char term_buffer[2048];
|
||||||
static char string_buf[2048];
|
static char string_buf[2048];
|
||||||
char* buffer = string_buf;
|
char* buffer = string_buf;
|
||||||
char* key_up_string;
|
|
||||||
int status = uninitialized;
|
int status = uninitialized;
|
||||||
|
|
||||||
// share the terminal capabilities
|
// share the terminal capabilities
|
||||||
|
@ -3344,38 +3342,65 @@ void FTerm::init_termcaps()
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
// get termcap booleans
|
// Get termcap booleans
|
||||||
// --------------------
|
init_termcaps_booleans();
|
||||||
|
|
||||||
// screen erased with the background color
|
// Get termcap numeric
|
||||||
|
init_termcaps_numeric();
|
||||||
|
|
||||||
|
// Get termcap strings
|
||||||
|
init_termcaps_strings(buffer);
|
||||||
|
|
||||||
|
// Get termcap keys
|
||||||
|
init_termcaps_keys(buffer);
|
||||||
|
|
||||||
|
// Initialize cursor movement optimization
|
||||||
|
init_OptiMove();
|
||||||
|
|
||||||
|
// Initialize video attributes optimization
|
||||||
|
init_OptiAttr();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::init_termcaps_booleans()
|
||||||
|
{
|
||||||
|
// Get termcap booleans
|
||||||
|
|
||||||
|
// Screen erased with the background color
|
||||||
FTermcap::background_color_erase = tgetflag(const_cast<char*>("ut"));
|
FTermcap::background_color_erase = tgetflag(const_cast<char*>("ut"));
|
||||||
|
|
||||||
// t_cursor_left wraps from column 0 to last column
|
// t_cursor_left wraps from column 0 to last column
|
||||||
FTermcap::automatic_left_margin = tgetflag(const_cast<char*>("bw"));
|
FTermcap::automatic_left_margin = tgetflag(const_cast<char*>("bw"));
|
||||||
|
|
||||||
// terminal has auto-matic margins
|
// Terminal has auto-matic margins
|
||||||
FTermcap::automatic_right_margin = tgetflag(const_cast<char*>("am"));
|
FTermcap::automatic_right_margin = tgetflag(const_cast<char*>("am"));
|
||||||
|
|
||||||
// newline ignored after 80 cols
|
// NewLine ignored after 80 cols
|
||||||
FTermcap::eat_nl_glitch = tgetflag(const_cast<char*>("xn"));
|
FTermcap::eat_nl_glitch = tgetflag(const_cast<char*>("xn"));
|
||||||
|
|
||||||
// terminal supports ANSI set default fg and bg color
|
// Terminal supports ANSI set default fg and bg color
|
||||||
FTermcap::ansi_default_color = tgetflag(const_cast<char*>("AX"));
|
FTermcap::ansi_default_color = tgetflag(const_cast<char*>("AX"));
|
||||||
|
|
||||||
// terminal supports operating system commands (OSC)
|
// Terminal supports operating system commands (OSC)
|
||||||
// OSC = Esc + ']'
|
// OSC = Esc + ']'
|
||||||
FTermcap::osc_support = tgetflag(const_cast<char*>("XT"));
|
FTermcap::osc_support = tgetflag(const_cast<char*>("XT"));
|
||||||
|
|
||||||
// U8 is nonzero for terminals with no VT100 line-drawing in UTF-8 mode
|
// U8 is nonzero for terminals with no VT100 line-drawing in UTF-8 mode
|
||||||
FTermcap::no_utf8_acs_chars = bool(tgetnum(const_cast<char*>("U8")) != 0);
|
FTermcap::no_utf8_acs_chars = bool(tgetnum(const_cast<char*>("U8")) != 0);
|
||||||
|
|
||||||
|
// Tera Term eat_nl_glitch fix
|
||||||
if ( tera_terminal )
|
if ( tera_terminal )
|
||||||
FTermcap::eat_nl_glitch = true;
|
FTermcap::eat_nl_glitch = true;
|
||||||
|
}
|
||||||
|
|
||||||
// get termcap numeric
|
//----------------------------------------------------------------------
|
||||||
// -------------------
|
void FTerm::init_termcaps_numeric()
|
||||||
|
{
|
||||||
|
// Get termcap numeric
|
||||||
|
|
||||||
// maximum number of colors on screen
|
static const int not_available = -1;
|
||||||
|
|
||||||
|
// Maximum number of colors on screen
|
||||||
FTermcap::max_color = std::max( FTermcap::max_color
|
FTermcap::max_color = std::max( FTermcap::max_color
|
||||||
, tgetnum(const_cast<char*>("Co")) );
|
, tgetnum(const_cast<char*>("Co")) );
|
||||||
|
|
||||||
|
@ -3387,13 +3412,13 @@ void FTerm::init_termcaps()
|
||||||
else
|
else
|
||||||
monochron = false;
|
monochron = false;
|
||||||
|
|
||||||
// get initial spacing for hardware tab stop
|
// Get initial spacing for hardware tab stop
|
||||||
FTermcap::tabstop = tgetnum(const_cast<char*>("it"));
|
FTermcap::tabstop = tgetnum(const_cast<char*>("it"));
|
||||||
|
|
||||||
if ( FTermcap::tabstop == not_available )
|
if ( FTermcap::tabstop == not_available )
|
||||||
FTermcap::tabstop = 8;
|
FTermcap::tabstop = 8;
|
||||||
|
|
||||||
// get video attributes that cannot be used with colors
|
// Get video attributes that cannot be used with colors
|
||||||
FTermcap::attr_without_color = tgetnum(const_cast<char*>("NC"));
|
FTermcap::attr_without_color = tgetnum(const_cast<char*>("NC"));
|
||||||
|
|
||||||
if ( FTermcap::attr_without_color == not_available )
|
if ( FTermcap::attr_without_color == not_available )
|
||||||
|
@ -3407,30 +3432,33 @@ void FTerm::init_termcaps()
|
||||||
// and since version 0.71 is the dim attribute is also supported
|
// and since version 0.71 is the dim attribute is also supported
|
||||||
if ( putty_terminal )
|
if ( putty_terminal )
|
||||||
FTermcap::attr_without_color = 0;
|
FTermcap::attr_without_color = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// get termcap strings
|
//----------------------------------------------------------------------
|
||||||
// -------------------
|
void FTerm::init_termcaps_strings (char*& buffer)
|
||||||
|
{
|
||||||
|
// Get termcap strings
|
||||||
|
|
||||||
// read termcap output strings
|
// Read termcap output strings
|
||||||
for (int i = 0; tcap[i].tname[0] != 0; i++)
|
for (int i = 0; tcap[i].tname[0] != 0; i++)
|
||||||
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
tcap[i].string = tgetstr(tcap[i].tname, &buffer);
|
||||||
|
|
||||||
// set invisible cursor for cygwin terminal
|
// Set invisible cursor for cygwin terminal
|
||||||
if ( cygwin_terminal && ! TCAP(fc::t_cursor_invisible) )
|
if ( cygwin_terminal && ! TCAP(fc::t_cursor_invisible) )
|
||||||
TCAP(fc::t_cursor_invisible) = \
|
TCAP(fc::t_cursor_invisible) = \
|
||||||
const_cast<char*>(CSI "?25l");
|
const_cast<char*>(CSI "?25l");
|
||||||
|
|
||||||
// set visible cursor for cygwin terminal
|
// Set visible cursor for cygwin terminal
|
||||||
if ( cygwin_terminal && ! TCAP(fc::t_cursor_visible) )
|
if ( cygwin_terminal && ! TCAP(fc::t_cursor_visible) )
|
||||||
TCAP(fc::t_cursor_visible) = \
|
TCAP(fc::t_cursor_visible) = \
|
||||||
const_cast<char*>(CSI "?25h");
|
const_cast<char*>(CSI "?25h");
|
||||||
|
|
||||||
// set ansi blink for cygwin terminal
|
// Set ansi blink for cygwin terminal
|
||||||
if ( cygwin_terminal && ! TCAP(fc::t_enter_blink_mode) )
|
if ( cygwin_terminal && ! TCAP(fc::t_enter_blink_mode) )
|
||||||
TCAP(fc::t_enter_blink_mode) = \
|
TCAP(fc::t_enter_blink_mode) = \
|
||||||
const_cast<char*>(CSI "5m");
|
const_cast<char*>(CSI "5m");
|
||||||
|
|
||||||
// set enter/exit alternative charset mode for rxvt terminal
|
// Set enter/exit alternative charset mode for rxvt terminal
|
||||||
if ( rxvt_terminal && std::strncmp(termtype, "rxvt-16color", 12) == 0 )
|
if ( rxvt_terminal && std::strncmp(termtype, "rxvt-16color", 12) == 0 )
|
||||||
{
|
{
|
||||||
TCAP(fc::t_enter_alt_charset_mode) = \
|
TCAP(fc::t_enter_alt_charset_mode) = \
|
||||||
|
@ -3444,11 +3472,11 @@ void FTerm::init_termcaps()
|
||||||
TCAP(fc::t_exit_underline_mode) = \
|
TCAP(fc::t_exit_underline_mode) = \
|
||||||
const_cast<char*>(CSI "24m");
|
const_cast<char*>(CSI "24m");
|
||||||
|
|
||||||
// set background color erase for cygwin terminal
|
// Set background color erase for cygwin terminal
|
||||||
if ( cygwin_terminal )
|
if ( cygwin_terminal )
|
||||||
FTermcap::background_color_erase = true;
|
FTermcap::background_color_erase = true;
|
||||||
|
|
||||||
// set ansi foreground and background color
|
// Set ansi foreground and background color
|
||||||
if ( linux_terminal || cygwin_terminal )
|
if ( linux_terminal || cygwin_terminal )
|
||||||
{
|
{
|
||||||
if ( FTermcap::max_color > 8 )
|
if ( FTermcap::max_color > 8 )
|
||||||
|
@ -3469,7 +3497,7 @@ void FTerm::init_termcaps()
|
||||||
TCAP(fc::t_orig_pair) = \
|
TCAP(fc::t_orig_pair) = \
|
||||||
const_cast<char*>(CSI "39;49;25m");
|
const_cast<char*>(CSI "39;49;25m");
|
||||||
|
|
||||||
// avoid dim + underline
|
// Avoid dim + underline
|
||||||
TCAP(fc::t_enter_dim_mode) = 0;
|
TCAP(fc::t_enter_dim_mode) = 0;
|
||||||
TCAP(fc::t_exit_dim_mode) = 0;
|
TCAP(fc::t_exit_dim_mode) = 0;
|
||||||
TCAP(fc::t_enter_underline_mode) = 0;
|
TCAP(fc::t_enter_underline_mode) = 0;
|
||||||
|
@ -3574,17 +3602,17 @@ void FTerm::init_termcaps()
|
||||||
const_cast<char*>(CSI "M");
|
const_cast<char*>(CSI "M");
|
||||||
}
|
}
|
||||||
|
|
||||||
// fallback if "AF" is not found
|
// Fallback if "AF" is not found
|
||||||
if ( ! TCAP(fc::t_set_a_foreground) )
|
if ( ! TCAP(fc::t_set_a_foreground) )
|
||||||
TCAP(fc::t_set_a_foreground) = \
|
TCAP(fc::t_set_a_foreground) = \
|
||||||
const_cast<char*>(CSI "3%p1%dm");
|
const_cast<char*>(CSI "3%p1%dm");
|
||||||
|
|
||||||
// fallback if "AB" is not found
|
// Fallback if "AB" is not found
|
||||||
if ( ! TCAP(fc::t_set_a_background) )
|
if ( ! TCAP(fc::t_set_a_background) )
|
||||||
TCAP(fc::t_set_a_background) = \
|
TCAP(fc::t_set_a_background) = \
|
||||||
const_cast<char*>(CSI "4%p1%dm");
|
const_cast<char*>(CSI "4%p1%dm");
|
||||||
|
|
||||||
// fallback if "Ic" is not found
|
// Fallback if "Ic" is not found
|
||||||
if ( ! TCAP(fc::t_initialize_color) )
|
if ( ! TCAP(fc::t_initialize_color) )
|
||||||
{
|
{
|
||||||
if ( screen_terminal )
|
if ( screen_terminal )
|
||||||
|
@ -3624,26 +3652,26 @@ void FTerm::init_termcaps()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// fallback if "ti" is not found
|
// Fallback if "ti" is not found
|
||||||
if ( ! TCAP(fc::t_enter_ca_mode) )
|
if ( ! TCAP(fc::t_enter_ca_mode) )
|
||||||
TCAP(fc::t_enter_ca_mode) = \
|
TCAP(fc::t_enter_ca_mode) = \
|
||||||
const_cast<char*>(ESC "7" CSI "?47h");
|
const_cast<char*>(ESC "7" CSI "?47h");
|
||||||
|
|
||||||
// fallback if "te" is not found
|
// Fallback if "te" is not found
|
||||||
if ( ! TCAP(fc::t_exit_ca_mode) )
|
if ( ! TCAP(fc::t_exit_ca_mode) )
|
||||||
TCAP(fc::t_exit_ca_mode) = \
|
TCAP(fc::t_exit_ca_mode) = \
|
||||||
const_cast<char*>(CSI "?47l" ESC "8" CSI "m");
|
const_cast<char*>(CSI "?47l" ESC "8" CSI "m");
|
||||||
|
|
||||||
// set ansi move if "cm" is not found
|
// Set ansi move if "cm" is not found
|
||||||
if ( ! TCAP(fc::t_cursor_address) )
|
if ( ! TCAP(fc::t_cursor_address) )
|
||||||
TCAP(fc::t_cursor_address) = \
|
TCAP(fc::t_cursor_address) = \
|
||||||
const_cast<char*>(CSI "%i%p1%d;%p2%dH");
|
const_cast<char*>(CSI "%i%p1%d;%p2%dH");
|
||||||
|
|
||||||
// test for standard ECMA-48 (ANSI X3.64) terminal
|
// Test for standard ECMA-48 (ANSI X3.64) terminal
|
||||||
if ( TCAP(fc::t_exit_underline_mode)
|
if ( TCAP(fc::t_exit_underline_mode)
|
||||||
&& std::strncmp(TCAP(fc::t_exit_underline_mode), CSI "24m", 5) == 0 )
|
&& std::strncmp(TCAP(fc::t_exit_underline_mode), CSI "24m", 5) == 0 )
|
||||||
{
|
{
|
||||||
// seems to be a ECMA-48 (ANSI X3.64) compatible terminal
|
// Seems to be a ECMA-48 (ANSI X3.64) compatible terminal
|
||||||
TCAP(fc::t_enter_dbl_underline_mode) = \
|
TCAP(fc::t_enter_dbl_underline_mode) = \
|
||||||
const_cast<char*>(CSI "21m"); // Exit single underline, too
|
const_cast<char*>(CSI "21m"); // Exit single underline, too
|
||||||
|
|
||||||
|
@ -3696,18 +3724,23 @@ void FTerm::init_termcaps()
|
||||||
FTermcap::attr_without_color = 18;
|
FTermcap::attr_without_color = 18;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::init_termcaps_keys (char*& buffer)
|
||||||
|
{
|
||||||
|
// Read termcap key strings
|
||||||
|
|
||||||
// read termcap key strings
|
|
||||||
for (int i = 0; Fkey[i].tname[0] != 0; i++)
|
for (int i = 0; Fkey[i].tname[0] != 0; i++)
|
||||||
{
|
{
|
||||||
Fkey[i].string = tgetstr(Fkey[i].tname, &buffer);
|
Fkey[i].string = tgetstr(Fkey[i].tname, &buffer);
|
||||||
|
|
||||||
// fallback for rxvt with TERM=xterm
|
// Fallback for rxvt with TERM=xterm
|
||||||
if ( std::strncmp(Fkey[i].tname, "khx", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "khx", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "7~"); // home key
|
Fkey[i].string = const_cast<char*>(CSI "7~"); // Home key
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "@7x", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "@7x", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "8~"); // end key
|
Fkey[i].string = const_cast<char*>(CSI "8~"); // End key
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "k1x", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "k1x", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "11~"); // F1
|
Fkey[i].string = const_cast<char*>(CSI "11~"); // F1
|
||||||
|
@ -3721,15 +3754,15 @@ void FTerm::init_termcaps()
|
||||||
if ( std::strncmp(Fkey[i].tname, "k4x", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "k4x", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "14~"); // F4
|
Fkey[i].string = const_cast<char*>(CSI "14~"); // F4
|
||||||
|
|
||||||
// fallback for TERM=ansi
|
// Fallback for TERM=ansi
|
||||||
if ( std::strncmp(Fkey[i].tname, "@7X", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "@7X", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "K"); // end key
|
Fkey[i].string = const_cast<char*>(CSI "K"); // End key
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some terminals (e.g. PuTTY) send the wrong code for the arrow keys
|
// Some terminals (e.g. PuTTY) send the wrong code for the arrow keys
|
||||||
// http://www.unix.com/shell-programming-scripting/..
|
// http://www.unix.com/shell-programming-scripting/..
|
||||||
// ..110380-using-arrow-keys-shell-scripts.html
|
// ..110380-using-arrow-keys-shell-scripts.html
|
||||||
key_up_string = tgetstr(const_cast<char*>("ku"), &buffer);
|
char* key_up_string = tgetstr(const_cast<char*>("ku"), &buffer);
|
||||||
|
|
||||||
if ( (key_up_string && (std::strcmp(key_up_string, CSI "A") == 0))
|
if ( (key_up_string && (std::strcmp(key_up_string, CSI "A") == 0))
|
||||||
|| ( TCAP(fc::t_cursor_up)
|
|| ( TCAP(fc::t_cursor_up)
|
||||||
|
@ -3738,16 +3771,16 @@ void FTerm::init_termcaps()
|
||||||
for (int i = 0; Fkey[i].tname[0] != 0; i++)
|
for (int i = 0; Fkey[i].tname[0] != 0; i++)
|
||||||
{
|
{
|
||||||
if ( std::strncmp(Fkey[i].tname, "kux", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "kux", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "A"); // key up
|
Fkey[i].string = const_cast<char*>(CSI "A"); // Key up
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "kdx", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "kdx", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "B"); // key down
|
Fkey[i].string = const_cast<char*>(CSI "B"); // Key down
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "krx", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "krx", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "C"); // key right
|
Fkey[i].string = const_cast<char*>(CSI "C"); // Key right
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "klx", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "klx", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(CSI "D"); // key left
|
Fkey[i].string = const_cast<char*>(CSI "D"); // Key left
|
||||||
|
|
||||||
if ( std::strncmp(Fkey[i].tname, "k1X", 3) == 0 )
|
if ( std::strncmp(Fkey[i].tname, "k1X", 3) == 0 )
|
||||||
Fkey[i].string = const_cast<char*>(ESC "OP"); // PF1
|
Fkey[i].string = const_cast<char*>(ESC "OP"); // PF1
|
||||||
|
@ -3762,8 +3795,13 @@ void FTerm::init_termcaps()
|
||||||
Fkey[i].string = const_cast<char*>(ESC "OS"); // PF4
|
Fkey[i].string = const_cast<char*>(ESC "OS"); // PF4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::init_OptiMove()
|
||||||
|
{
|
||||||
|
// Duration precalculation of the cursor movement strings
|
||||||
|
|
||||||
// duration precalculation of the cursor movement strings
|
|
||||||
opti_move->setTabStop(int(FTermcap::tabstop));
|
opti_move->setTabStop(int(FTermcap::tabstop));
|
||||||
opti_move->set_cursor_home (TCAP(fc::t_cursor_home));
|
opti_move->set_cursor_home (TCAP(fc::t_cursor_home));
|
||||||
opti_move->set_cursor_to_ll (TCAP(fc::t_cursor_to_ll));
|
opti_move->set_cursor_to_ll (TCAP(fc::t_cursor_to_ll));
|
||||||
|
@ -3790,8 +3828,12 @@ void FTerm::init_termcaps()
|
||||||
opti_move->set_repeat_char (TCAP(fc::t_repeat_char));
|
opti_move->set_repeat_char (TCAP(fc::t_repeat_char));
|
||||||
clr_bol_length = opti_move->set_clr_bol (TCAP(fc::t_clr_bol));
|
clr_bol_length = opti_move->set_clr_bol (TCAP(fc::t_clr_bol));
|
||||||
clr_eol_length = opti_move->set_clr_eol (TCAP(fc::t_clr_eol));
|
clr_eol_length = opti_move->set_clr_eol (TCAP(fc::t_clr_eol));
|
||||||
|
}
|
||||||
|
|
||||||
// attribute settings
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::init_OptiAttr()
|
||||||
|
{
|
||||||
|
// Attribute settings
|
||||||
opti_attr->setNoColorVideo (int(FTermcap::attr_without_color));
|
opti_attr->setNoColorVideo (int(FTermcap::attr_without_color));
|
||||||
opti_attr->set_enter_bold_mode (TCAP(fc::t_enter_bold_mode));
|
opti_attr->set_enter_bold_mode (TCAP(fc::t_enter_bold_mode));
|
||||||
opti_attr->set_exit_bold_mode (TCAP(fc::t_exit_bold_mode));
|
opti_attr->set_exit_bold_mode (TCAP(fc::t_exit_bold_mode));
|
||||||
|
|
Loading…
Reference in New Issue