Change cursor style on a FreeBSD console
This commit is contained in:
parent
7f134ccada
commit
0a581cb58b
|
@ -1,3 +1,6 @@
|
||||||
|
2017-04-06 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Change cursor style on a FreeBSD console
|
||||||
|
|
||||||
2017-04-05 Markus Gans <guru.mail@muenster.de>
|
2017-04-05 Markus Gans <guru.mail@muenster.de>
|
||||||
* Replace non-printable characters for Tera Term and
|
* Replace non-printable characters for Tera Term and
|
||||||
Cygwin terminal directly at start-up. Special cases
|
Cygwin terminal directly at start-up. Special cases
|
||||||
|
|
10
src/fc.h
10
src/fc.h
|
@ -929,7 +929,7 @@ class fc
|
||||||
};
|
};
|
||||||
|
|
||||||
// Linux console and framebuffer cursor style
|
// Linux console and framebuffer cursor style
|
||||||
enum consoleCursorStyle
|
enum linuxConsoleCursorStyle
|
||||||
{
|
{
|
||||||
default_cursor = 0,
|
default_cursor = 0,
|
||||||
invisible_cursor = 1,
|
invisible_cursor = 1,
|
||||||
|
@ -940,6 +940,14 @@ class fc
|
||||||
full_block_cursor = 6
|
full_block_cursor = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// BSD console cursor style
|
||||||
|
enum bsdConsoleCursorStyle
|
||||||
|
{
|
||||||
|
normal_cursor = 0,
|
||||||
|
blink_cursor = 1,
|
||||||
|
destructive_cursor = 3
|
||||||
|
};
|
||||||
|
|
||||||
// KDE konsole cursor style
|
// KDE konsole cursor style
|
||||||
enum kdeKonsoleCursorShape
|
enum kdeKonsoleCursorShape
|
||||||
{
|
{
|
||||||
|
|
|
@ -229,10 +229,13 @@ void FLabel::onAccel (FAccelEvent* ev)
|
||||||
FApplication::queueEvent(focused_widget, &out);
|
FApplication::queueEvent(focused_widget, &out);
|
||||||
accel_widget->setFocus();
|
accel_widget->setFocus();
|
||||||
|
|
||||||
|
|
||||||
if ( focused_widget )
|
if ( focused_widget )
|
||||||
focused_widget->redraw();
|
focused_widget->redraw();
|
||||||
|
|
||||||
accel_widget->redraw();
|
accel_widget->redraw();
|
||||||
|
FFocusEvent in (fc::FocusIn_Event);
|
||||||
|
FApplication::sendEvent(accel_widget, &in);
|
||||||
|
|
||||||
if ( getStatusBar() )
|
if ( getStatusBar() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,7 +109,8 @@ bool FTermcap::no_utf8_acs_chars = false;
|
||||||
int FTermcap::max_color = 1;
|
int FTermcap::max_color = 1;
|
||||||
int FTermcap::tabstop = 8;
|
int FTermcap::tabstop = 8;
|
||||||
int FTermcap::attr_without_color = 0;
|
int FTermcap::attr_without_color = 0;
|
||||||
fc::consoleCursorStyle FTerm::console_cursor_style;
|
fc::linuxConsoleCursorStyle FTerm::linux_console_cursor_style;
|
||||||
|
fc::bsdConsoleCursorStyle FTerm::bsd_console_cursor_style;
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
console_font_op FTerm::screen_font;
|
console_font_op FTerm::screen_font;
|
||||||
|
@ -217,13 +218,21 @@ FTerm::modifier_key& FTerm::getModifierKey()
|
||||||
|
|
||||||
return mod_key;
|
return mod_key;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
fc::consoleCursorStyle FTerm::getConsoleCursor()
|
fc::linuxConsoleCursorStyle FTerm::getLinuxConsoleCursorStyle()
|
||||||
{
|
{
|
||||||
return console_cursor_style;
|
return linux_console_cursor_style;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
fc::bsdConsoleCursorStyle FTerm::getBSDConsoleCursorStyle()
|
||||||
|
{
|
||||||
|
return bsd_console_cursor_style;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FTerm::isKeyTimeout (timeval* time, register long timeout)
|
bool FTerm::isKeyTimeout (timeval* time, register long timeout)
|
||||||
|
@ -252,14 +261,17 @@ bool FTerm::isNormal (char_data*& ch)
|
||||||
return opti_attr->isNormal(ch);
|
return opti_attr->isNormal(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::setConsoleCursor (fc::consoleCursorStyle style, bool hidden)
|
void FTerm::setLinuxConsoleCursorStyle ( fc::linuxConsoleCursorStyle style
|
||||||
|
, bool hidden )
|
||||||
{
|
{
|
||||||
// Set cursor style in linux console
|
// Set cursor style in linux console
|
||||||
|
|
||||||
if ( ! linux_terminal )
|
if ( ! linux_terminal )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
console_cursor_style = style;
|
linux_console_cursor_style = style;
|
||||||
|
|
||||||
if ( hidden )
|
if ( hidden )
|
||||||
return;
|
return;
|
||||||
|
@ -267,6 +279,26 @@ void FTerm::setConsoleCursor (fc::consoleCursorStyle style, bool hidden)
|
||||||
putstringf (CSI "?%dc", style);
|
putstringf (CSI "?%dc", style);
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FTerm::setBSDConsoleCursorStyle ( fc::bsdConsoleCursorStyle style
|
||||||
|
, bool hidden )
|
||||||
|
{
|
||||||
|
// Set cursor style in a BSD console
|
||||||
|
|
||||||
|
if ( ! isBSDConsole() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
bsd_console_cursor_style = style;
|
||||||
|
|
||||||
|
if ( hidden )
|
||||||
|
return;
|
||||||
|
|
||||||
|
ioctl(0, CONS_CURSORTYPE, &style);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::setTTY (termios& t)
|
void FTerm::setTTY (termios& t)
|
||||||
|
@ -812,6 +844,7 @@ void FTerm::detectTermSize()
|
||||||
void FTerm::setTermSize (int term_width, int term_height)
|
void FTerm::setTermSize (int term_width, int term_height)
|
||||||
{
|
{
|
||||||
// Set xterm size to {term_width} x {term_height}
|
// Set xterm size to {term_width} x {term_height}
|
||||||
|
|
||||||
if ( xterm_terminal )
|
if ( xterm_terminal )
|
||||||
{
|
{
|
||||||
putstringf (CSI "8;%d;%dt", term_height, term_width);
|
putstringf (CSI "8;%d;%dt", term_height, term_width);
|
||||||
|
@ -823,6 +856,7 @@ void FTerm::setTermSize (int term_width, int term_height)
|
||||||
void FTerm::setKDECursor (fc::kdeKonsoleCursorShape style)
|
void FTerm::setKDECursor (fc::kdeKonsoleCursorShape style)
|
||||||
{
|
{
|
||||||
// Set cursor style in KDE konsole
|
// Set cursor style in KDE konsole
|
||||||
|
|
||||||
if ( kde_konsole )
|
if ( kde_konsole )
|
||||||
{
|
{
|
||||||
oscPrefix();
|
oscPrefix();
|
||||||
|
@ -958,6 +992,12 @@ const FString FTerm::getXTermColorName (int color)
|
||||||
void FTerm::setXTermCursorStyle (fc::xtermCursorStyle style)
|
void FTerm::setXTermCursorStyle (fc::xtermCursorStyle style)
|
||||||
{
|
{
|
||||||
// Set the xterm cursor style
|
// Set the xterm cursor style
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
if ( isBSDConsole() )
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( (xterm_terminal || mintty_terminal)
|
if ( (xterm_terminal || mintty_terminal)
|
||||||
&& ! (gnome_terminal || kde_konsole) )
|
&& ! (gnome_terminal || kde_konsole) )
|
||||||
{
|
{
|
||||||
|
@ -3563,13 +3603,17 @@ void FTerm::init()
|
||||||
}
|
}
|
||||||
|
|
||||||
closeConsole();
|
closeConsole();
|
||||||
setConsoleCursor(fc::underscore_cursor, true);
|
setLinuxConsoleCursorStyle (fc::underscore_cursor, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( linux_terminal && getFramebuffer_bpp() >= 4 )
|
if ( linux_terminal && getFramebuffer_bpp() >= 4 )
|
||||||
FTermcap::max_color = 16;
|
FTermcap::max_color = 16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
setBSDConsoleCursorStyle (fc::destructive_cursor, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
t.c_lflag |= uInt(ICANON | ECHO);
|
t.c_lflag |= uInt(ICANON | ECHO);
|
||||||
tcsetattr(stdin_no, TCSADRAIN, &t);
|
tcsetattr(stdin_no, TCSADRAIN, &t);
|
||||||
}
|
}
|
||||||
|
@ -3809,12 +3853,13 @@ void FTerm::finish()
|
||||||
if ( linux_terminal )
|
if ( linux_terminal )
|
||||||
{
|
{
|
||||||
setBlinkAsIntensity (false);
|
setBlinkAsIntensity (false);
|
||||||
setConsoleCursor(fc::default_cursor, false);
|
setLinuxConsoleCursorStyle (fc::default_cursor, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(BSD)
|
#if defined(BSD)
|
||||||
resetBSDAlt2Meta();
|
resetBSDAlt2Meta();
|
||||||
|
setBSDConsoleCursorStyle (fc::normal_cursor, false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( kde_konsole )
|
if ( kde_konsole )
|
||||||
|
|
27
src/fterm.h
27
src/fterm.h
|
@ -43,6 +43,7 @@
|
||||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#if defined(BSD)
|
#if defined(BSD)
|
||||||
|
#include <sys/consio.h>
|
||||||
#include <sys/kbio.h>
|
#include <sys/kbio.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -120,14 +121,23 @@ class FTerm
|
||||||
static int getLineNumber();
|
static int getLineNumber();
|
||||||
static int getColumnNumber();
|
static int getColumnNumber();
|
||||||
static const FString getKeyName (int);
|
static const FString getKeyName (int);
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
static modifier_key& getModifierKey();
|
static modifier_key& getModifierKey();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char* getTermType();
|
static char* getTermType();
|
||||||
static char* getTermName();
|
static char* getTermName();
|
||||||
static int getTabstop();
|
static int getTabstop();
|
||||||
static int getMaxColor();
|
static int getMaxColor();
|
||||||
static fc::consoleCursorStyle getConsoleCursor();
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
static fc::linuxConsoleCursorStyle getLinuxConsoleCursorStyle();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
static fc::bsdConsoleCursorStyle getBSDConsoleCursorStyle();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
static const FString& getAnswerbackString();
|
static const FString& getAnswerbackString();
|
||||||
|
@ -166,7 +176,17 @@ class FTerm
|
||||||
// Mutators
|
// Mutators
|
||||||
static bool setCursorOptimisation (bool);
|
static bool setCursorOptimisation (bool);
|
||||||
static void setXTermDefaultColors (bool);
|
static void setXTermDefaultColors (bool);
|
||||||
static void setConsoleCursor (fc::consoleCursorStyle, bool);
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
static void setLinuxConsoleCursorStyle ( fc::linuxConsoleCursorStyle
|
||||||
|
, bool );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
static void setBSDConsoleCursorStyle ( fc::bsdConsoleCursorStyle
|
||||||
|
, bool );
|
||||||
|
#endif
|
||||||
|
|
||||||
static void setTTY (termios&);
|
static void setTTY (termios&);
|
||||||
static void noHardwareEcho();
|
static void noHardwareEcho();
|
||||||
static bool setRawMode (bool);
|
static bool setRawMode (bool);
|
||||||
|
@ -427,7 +447,8 @@ class FTerm
|
||||||
static bool resize_term;
|
static bool resize_term;
|
||||||
|
|
||||||
static struct termios term_init;
|
static struct termios term_init;
|
||||||
static fc::consoleCursorStyle console_cursor_style;
|
static fc::linuxConsoleCursorStyle linux_console_cursor_style;
|
||||||
|
static fc::bsdConsoleCursorStyle bsd_console_cursor_style;
|
||||||
static struct console_font_op screen_font;
|
static struct console_font_op screen_font;
|
||||||
static struct unimapdesc screen_unicode_map;
|
static struct unimapdesc screen_unicode_map;
|
||||||
static uChar bsd_alt_keymap;
|
static uChar bsd_alt_keymap;
|
||||||
|
|
|
@ -138,8 +138,15 @@ bool FVTerm::hideCursor (bool on)
|
||||||
|
|
||||||
flush_out();
|
flush_out();
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
if ( ! hidden_cursor && isLinuxTerm() )
|
if ( ! hidden_cursor && isLinuxTerm() )
|
||||||
setConsoleCursor (getConsoleCursor(), false);
|
setLinuxConsoleCursorStyle (getLinuxConsoleCursorStyle(), false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
if ( ! hidden_cursor )
|
||||||
|
setBSDConsoleCursorStyle (getBSDConsoleCursorStyle(), false);
|
||||||
|
#endif
|
||||||
|
|
||||||
return hidden_cursor;
|
return hidden_cursor;
|
||||||
}
|
}
|
||||||
|
@ -710,7 +717,14 @@ void FVTerm::setInsertCursorStyle (bool on)
|
||||||
{
|
{
|
||||||
setXTermCursorStyle(fc::blinking_underline);
|
setXTermCursorStyle(fc::blinking_underline);
|
||||||
setKDECursor(fc::UnderlineCursor);
|
setKDECursor(fc::UnderlineCursor);
|
||||||
setConsoleCursor(fc::underscore_cursor, isCursorHidden());
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
setLinuxConsoleCursorStyle (fc::underscore_cursor, isCursorHidden());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
setBSDConsoleCursorStyle (fc::destructive_cursor, isCursorHidden());
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( isUrxvtTerminal() )
|
if ( isUrxvtTerminal() )
|
||||||
setXTermCursorColor("rgb:ffff/ffff/ffff");
|
setXTermCursorColor("rgb:ffff/ffff/ffff");
|
||||||
|
@ -719,7 +733,14 @@ void FVTerm::setInsertCursorStyle (bool on)
|
||||||
{
|
{
|
||||||
setXTermCursorStyle(fc::steady_block);
|
setXTermCursorStyle(fc::steady_block);
|
||||||
setKDECursor(fc::BlockCursor);
|
setKDECursor(fc::BlockCursor);
|
||||||
setConsoleCursor(fc::full_block_cursor, isCursorHidden());
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
setLinuxConsoleCursorStyle (fc::full_block_cursor, isCursorHidden());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BSD)
|
||||||
|
setBSDConsoleCursorStyle (fc::normal_cursor, isCursorHidden());
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( isUrxvtTerminal() )
|
if ( isUrxvtTerminal() )
|
||||||
setXTermCursorColor("rgb:eeee/0000/0000");
|
setXTermCursorColor("rgb:eeee/0000/0000");
|
||||||
|
|
Loading…
Reference in New Issue