terminal.h
Go to the documentation of this file.
1 // Encapsulates terminal control (colors, cursor, ...)
2 // Author: Max Schwarz <max.schwarz@uni-bonn.de>
3 
4 #ifndef TERMINAL_H
5 #define TERMINAL_H
6 
7 #include <stdint.h>
8 #include <string>
9 #include <map>
10 #include <chrono>
11 
12 namespace rosbag_fancy
13 {
14 
21 class Terminal
22 {
23 public:
31  {
33  Red,
48 
50  Grayscale = 0xe8
51  };
52 
59  class Parser
60  {
61  public:
62  Parser();
63 
65  void parse(char c);
66 
68  void parse(const std::string& str);
69 
71  void apply(Terminal* term);
72  private:
73  void parseSetAttributes(const std::string& str);
74 
75  enum State
76  {
80  };
81 
83  std::string m_buf;
84 
85  int m_fgColor;
86  int m_bgColor;
87  bool m_bold;
88  };
89 
90  Terminal();
91 
98  void setForegroundColor(uint32_t color);
99 
106  void setBackgroundColor(uint32_t color);
107 
109  void setCursorInvisible();
110 
112  void setCursorVisible();
113 
117  void setEcho(bool on);
118 
119  void setBold(bool on);
120 
122 
123  void setSimpleBackground(SimpleColor color);
124  void setSimpleForeground(SimpleColor color);
127 
129  void setStandardColors();
130 
132  void clearToEndOfLine();
133 
135  void moveCursorUp(int numLines);
136 
139 
145  bool getSize(int* columns, int* rows);
146 
152  bool has256Colors() const;
153 
157  bool interactive() const
158  { return m_valid; }
159 
160  void setWindowTitle(const std::string& title);
161  void clearWindowTitle(const std::string& backup);
162 
163 
165  {
166  SK_F1 = 0x100, SK_F2, SK_F3, SK_F4,
170  };
171 
172  int readKey();
173 
174 private:
175  bool m_valid;
178 
179  std::string m_bgColorStr;
180  std::string m_fgColorStr;
181  std::string m_opStr;
182  std::string m_sgr0Str;
183  std::string m_elStr;
184  std::string m_upStr;
185  std::string m_boldStr;
186 
187  std::map<std::string, SpecialKey> m_specialKeys;
188 
189  std::string m_currentEscapeStr;
190  std::chrono::steady_clock::time_point m_escapeStartTime;
192  unsigned int m_currentEscapeAbortIdx = 0;
193 };
194 
195 }
196 
197 #endif
rosbag_fancy::Terminal::SK_F8
@ SK_F8
Definition: terminal.h:167
rosbag_fancy::Terminal::m_valid
bool m_valid
Definition: terminal.h:175
rosbag_fancy::Terminal::IntenseYellow
@ IntenseYellow
Definition: terminal.h:43
rosbag_fancy::Terminal::readKey
int readKey()
Definition: terminal.cpp:432
rosbag_fancy::Terminal::m_truecolor
bool m_truecolor
Definition: terminal.h:177
rosbag_fancy::Terminal::SK_F1
@ SK_F1
Definition: terminal.h:166
rosbag_fancy::Terminal::setForegroundColor
void setForegroundColor(uint32_t color)
Set 24-bit foreground color.
Definition: terminal.cpp:293
rosbag_fancy::Terminal::setCursorVisible
void setCursorVisible()
restore cursor
Definition: terminal.cpp:254
rosbag_fancy::Terminal::m_fgColorStr
std::string m_fgColorStr
Definition: terminal.h:180
rosbag_fancy::Terminal::moveCursorUp
void moveCursorUp(int numLines)
Move cursor up by numLines.
Definition: terminal.cpp:385
rosbag_fancy::Terminal::IntenseWhite
@ IntenseWhite
Definition: terminal.h:47
rosbag_fancy::Terminal::Green
@ Green
Definition: terminal.h:34
rosbag_fancy::Terminal::IntenseBlack
@ IntenseBlack
Definition: terminal.h:40
rosbag_fancy::Terminal::setCursorInvisible
void setCursorInvisible()
hide cursor
Definition: terminal.cpp:246
rosbag_fancy
Definition: bag_reader.cpp:240
rosbag_fancy::Terminal::Black
@ Black
Definition: terminal.h:32
rosbag_fancy::Terminal::Yellow
@ Yellow
Definition: terminal.h:35
rosbag_fancy::Terminal::SK_F4
@ SK_F4
Definition: terminal.h:166
rosbag_fancy::Terminal::SimpleColor
SimpleColor
Simple colors.
Definition: terminal.h:30
rosbag_fancy::Terminal::m_currentEscapeAborted
bool m_currentEscapeAborted
Definition: terminal.h:191
rosbag_fancy::Terminal::has256Colors
bool has256Colors() const
Definition: terminal.cpp:241
rosbag_fancy::Terminal::setBold
void setBold(bool on)
Definition: terminal.cpp:332
rosbag_fancy::Terminal::Parser::parseSetAttributes
void parseSetAttributes(const std::string &str)
Definition: terminal.cpp:34
rosbag_fancy::Terminal::Parser::apply
void apply(Terminal *term)
Apply the current internal state (colors) on the terminal.
Definition: terminal.cpp:108
rosbag_fancy::Terminal::interactive
bool interactive() const
Definition: terminal.h:157
rosbag_fancy::Terminal::SK_F3
@ SK_F3
Definition: terminal.h:166
rosbag_fancy::Terminal::SK_Right
@ SK_Right
Definition: terminal.h:169
rosbag_fancy::Terminal::IntenseGreen
@ IntenseGreen
Definition: terminal.h:42
rosbag_fancy::Terminal::m_escapeStartTime
std::chrono::steady_clock::time_point m_escapeStartTime
Definition: terminal.h:190
rosbag_fancy::Terminal::SK_F12
@ SK_F12
Definition: terminal.h:168
rosbag_fancy::Terminal::m_boldStr
std::string m_boldStr
Definition: terminal.h:185
rosbag_fancy::Terminal::setSimplePair
void setSimplePair(SimpleColor fg, SimpleColor bg)
Definition: terminal.cpp:359
rosbag_fancy::Terminal::IntenseBlue
@ IntenseBlue
Definition: terminal.h:44
rosbag_fancy::Terminal::setSimpleForeground
void setSimpleForeground(SimpleColor color)
Definition: terminal.cpp:341
rosbag_fancy::Terminal::Parser::m_buf
std::string m_buf
Definition: terminal.h:83
rosbag_fancy::Terminal::SK_F2
@ SK_F2
Definition: terminal.h:166
rosbag_fancy::Terminal::Parser::STATE_CSI
@ STATE_CSI
Definition: terminal.h:79
rosbag_fancy::Terminal
Encapsulates terminal control.
Definition: terminal.h:21
rosbag_fancy::Terminal::m_currentEscapeAbortIdx
unsigned int m_currentEscapeAbortIdx
Definition: terminal.h:192
rosbag_fancy::Terminal::Parser::STATE_TYPE
@ STATE_TYPE
Definition: terminal.h:78
rosbag_fancy::Terminal::setSimpleBackground
void setSimpleBackground(SimpleColor color)
Definition: terminal.cpp:350
rosbag_fancy::Terminal::getSize
bool getSize(int *columns, int *rows)
Get current window size.
Definition: terminal.cpp:398
rosbag_fancy::Terminal::Cyan
@ Cyan
Definition: terminal.h:38
rosbag_fancy::Terminal::SK_Down
@ SK_Down
Definition: terminal.h:169
rosbag_fancy::Terminal::Blue
@ Blue
Definition: terminal.h:36
rosbag_fancy::Terminal::SK_F10
@ SK_F10
Definition: terminal.h:168
rosbag_fancy::Terminal::SK_F5
@ SK_F5
Definition: terminal.h:167
rosbag_fancy::Terminal::Red
@ Red
Definition: terminal.h:33
rosbag_fancy::Terminal::White
@ White
Definition: terminal.h:39
rosbag_fancy::Terminal::Parser::m_bold
bool m_bold
Definition: terminal.h:87
rosbag_fancy::Terminal::setWindowTitle
void setWindowTitle(const std::string &title)
Definition: terminal.cpp:411
rosbag_fancy::Terminal::m_upStr
std::string m_upStr
Definition: terminal.h:184
rosbag_fancy::Terminal::m_sgr0Str
std::string m_sgr0Str
Definition: terminal.h:182
rosbag_fancy::Terminal::m_256colors
bool m_256colors
Definition: terminal.h:176
rosbag_fancy::Terminal::Parser::m_fgColor
int m_fgColor
Definition: terminal.h:85
rosbag_fancy::Terminal::SK_F6
@ SK_F6
Definition: terminal.h:167
rosbag_fancy::Terminal::Parser::Parser
Parser()
Definition: terminal.cpp:26
rosbag_fancy::Terminal::setStandardColors
void setStandardColors()
Reset fg + bg to standard terminal colors.
Definition: terminal.cpp:368
rosbag_fancy::Terminal::IntenseCyan
@ IntenseCyan
Definition: terminal.h:46
rosbag_fancy::Terminal::Parser::State
State
Definition: terminal.h:75
rosbag_fancy::Terminal::SK_F9
@ SK_F9
Definition: terminal.h:168
rosbag_fancy::Terminal::m_bgColorStr
std::string m_bgColorStr
Definition: terminal.h:179
rosbag_fancy::Terminal::Magenta
@ Magenta
Definition: terminal.h:37
rosbag_fancy::Terminal::IntenseRed
@ IntenseRed
Definition: terminal.h:41
rosbag_fancy::Terminal::Parser::m_bgColor
int m_bgColor
Definition: terminal.h:86
rosbag_fancy::Terminal::SK_F7
@ SK_F7
Definition: terminal.h:167
rosbag_fancy::Terminal::m_opStr
std::string m_opStr
Definition: terminal.h:181
rosbag_fancy::Terminal::SK_Left
@ SK_Left
Definition: terminal.h:169
rosbag_fancy::Terminal::setEcho
void setEcho(bool on)
Definition: terminal.cpp:311
rosbag_fancy::Terminal::moveCursorToStartOfLine
void moveCursorToStartOfLine()
Move cursor to start of the line.
Definition: terminal.cpp:393
rosbag_fancy::Terminal::SK_Backspace
@ SK_Backspace
Definition: terminal.h:169
rosbag_fancy::Terminal::SK_Up
@ SK_Up
Definition: terminal.h:169
rosbag_fancy::Terminal::Terminal
Terminal()
Definition: terminal.cpp:122
rosbag_fancy::Terminal::Parser::parse
void parse(char c)
parse single character c
Definition: terminal.cpp:69
rosbag_fancy::Terminal::m_specialKeys
std::map< std::string, SpecialKey > m_specialKeys
Definition: terminal.h:187
rosbag_fancy::Terminal::Grayscale
@ Grayscale
24-step grayscale starts here
Definition: terminal.h:50
rosbag_fancy::Terminal::Parser::STATE_ESCAPE
@ STATE_ESCAPE
Definition: terminal.h:77
rosbag_fancy::Terminal::clearWindowTitle
void clearWindowTitle(const std::string &backup)
Definition: terminal.cpp:424
rosbag_fancy::Terminal::SK_F11
@ SK_F11
Definition: terminal.h:168
rosbag_fancy::Terminal::Parser
Terminal escape sequence parser.
Definition: terminal.h:59
rosbag_fancy::Terminal::Parser::m_state
State m_state
Definition: terminal.h:82
rosbag_fancy::Terminal::m_elStr
std::string m_elStr
Definition: terminal.h:183
rosbag_fancy::Terminal::IntenseMagenta
@ IntenseMagenta
Definition: terminal.h:45
rosbag_fancy::Terminal::SpecialKey
SpecialKey
Definition: terminal.h:164
rosbag_fancy::Terminal::setBackgroundColor
void setBackgroundColor(uint32_t color)
Set 24-bit background color.
Definition: terminal.cpp:275
rosbag_fancy::Terminal::clearToEndOfLine
void clearToEndOfLine()
Clear characters from cursor to end of line.
Definition: terminal.cpp:377
rosbag_fancy::Terminal::m_currentEscapeStr
std::string m_currentEscapeStr
Definition: terminal.h:189


rosbag_fancy
Author(s):
autogenerated on Tue Feb 20 2024 03:20:59