Skip to content

Commit 06b6f30

Browse files
committed
Clean
1 parent 0a686ff commit 06b6f30

29 files changed

+316
-251
lines changed

cpp-terminal/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ configure_file(version.hpp.in version.hpp)
44
add_subdirectory(platforms)
55

66
# create and configure library target
7-
add_library(cpp-terminal base.cpp prompt.cpp window.cpp input.cpp terminal.cpp color.cpp key.cpp event.cpp screen.cpp options.cpp)
7+
add_library(cpp-terminal prompt.cpp window.cpp input.cpp terminal.cpp color.cpp key.cpp event.cpp screen.cpp options.cpp cursor.cpp style.cpp)
88
target_link_libraries(cpp-terminal PRIVATE Warnings::Warnings cpp-terminal::cpp-terminal-platforms)
99
target_compile_options(cpp-terminal PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
1010
target_include_directories(cpp-terminal PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}> $<INSTALL_INTERFACE:include>)
1111

1212
set_target_properties(cpp-terminal PROPERTIES
13-
PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/options.hpp;${CMAKE_CURRENT_SOURCE_DIR}/event.hpp;${CMAKE_CURRENT_SOURCE_DIR}/key.hpp;${CMAKE_CURRENT_SOURCE_DIR}/tty.hpp;${CMAKE_CURRENT_SOURCE_DIR}/terminal.hpp;${CMAKE_CURRENT_SOURCE_DIR}/base.hpp;${CMAKE_CURRENT_SOURCE_DIR}/prompt.hpp;${CMAKE_CURRENT_SOURCE_DIR}/window.hpp;${CMAKE_CURRENT_BINARY_DIR}/version.hpp"
14-
PRIVATE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/platforms/conversion.hpp;${CMAKE_CURRENT_SOURCE_DIR}/platforms/macros.hpp")
13+
PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/options.hpp;${CMAKE_CURRENT_SOURCE_DIR}/event.hpp;${CMAKE_CURRENT_SOURCE_DIR}/key.hpp;${CMAKE_CURRENT_SOURCE_DIR}/tty.hpp;${CMAKE_CURRENT_SOURCE_DIR}/terminal.hpp;${CMAKE_CURRENT_SOURCE_DIR}/cursor.hpp;${CMAKE_CURRENT_SOURCE_DIR}/style.hpp;${CMAKE_CURRENT_SOURCE_DIR}/prompt.hpp;${CMAKE_CURRENT_SOURCE_DIR}/window.hpp;${CMAKE_CURRENT_BINARY_DIR}/version.hpp"
14+
PRIVATE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/platforms/conversion.hpp;${CMAKE_CURRENT_SOURCE_DIR}/platforms/macros.hpp")
1515

1616
add_library(cpp-terminal::cpp-terminal ALIAS cpp-terminal)
1717

cpp-terminal/base.cpp

Lines changed: 0 additions & 67 deletions
This file was deleted.

cpp-terminal/base.hpp

Lines changed: 0 additions & 70 deletions
This file was deleted.

cpp-terminal/cursor.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include "cpp-terminal/cursor.hpp"
2+
3+
#include "cpp-terminal/input.hpp"
4+
5+
#include <iostream>
6+
7+
Term::Cursor::Cursor(const std::size_t& row, const std::size_t& colum) : m_position({row, colum}) {}
8+
9+
std::size_t Term::Cursor::row() const { return m_position.first; }
10+
11+
std::size_t Term::Cursor::column() const { return m_position.second; }
12+
13+
bool Term::Cursor::empty()
14+
{
15+
if(m_position.first == 0 && m_position.second == 0) return true;
16+
else
17+
return false;
18+
}
19+
20+
void Term::Cursor::setRow(const std::size_t& row) { m_position.first = row; }
21+
22+
void Term::Cursor::setColum(const std::size_t& column) { m_position.second = column; }
23+
24+
Term::Cursor Term::cursor_position()
25+
{
26+
// write cursor position report
27+
std::cout << cursor_position_report() << std::flush;
28+
Term::Event c;
29+
while((c = Platform::read_raw()).empty()) continue;
30+
return c;
31+
}
32+
33+
std::string Term::cursor_off() { return "\x1b[?25l"; }
34+
35+
std::string Term::cursor_on() { return "\x1b[?25h"; }
36+
37+
std::string Term::cursor_move(std::size_t row, std::size_t column) { return "\033[" + std::to_string(row) + ';' + std::to_string(column) + 'H'; }
38+
39+
std::string Term::cursor_up(std::size_t rows) { return "\033[" + std::to_string(rows) + 'A'; }
40+
41+
std::string Term::cursor_down(std::size_t rows) { return "\033[" + std::to_string(rows) + 'B'; }
42+
43+
std::string Term::cursor_right(std::size_t columns) { return "\033[" + std::to_string(columns) + 'C'; }
44+
45+
std::string Term::cursor_left(std::size_t columns) { return "\033[" + std::to_string(columns) + 'D'; }
46+
47+
std::string Term::cursor_position_report() { return "\x1b[6n"; }
48+
49+
std::string Term::clear_eol() { return "\033[K"; }

cpp-terminal/cursor.hpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#pragma once
2+
3+
#include <cstddef>
4+
#include <string>
5+
#include <utility>
6+
7+
namespace Term
8+
{
9+
10+
class Cursor
11+
{
12+
public:
13+
Cursor() = default;
14+
Cursor(const std::size_t& rows, const std::size_t& colums);
15+
std::size_t row() const;
16+
std::size_t column() const;
17+
void setRow(const std::size_t&);
18+
void setColum(const std::size_t&);
19+
bool empty();
20+
21+
private:
22+
std::pair<std::size_t, std::size_t> m_position{0, 0};
23+
};
24+
25+
// returns the current cursor position (row, column) (Y, X)
26+
Term::Cursor cursor_position();
27+
28+
// move the cursor to the given (row, column) / (Y, X)
29+
std::string cursor_move(std::size_t row, std::size_t column);
30+
// move the cursor the given rows up
31+
std::string cursor_up(std::size_t rows);
32+
// move the cursor the given rows down
33+
std::string cursor_down(std::size_t rows);
34+
// move the cursor the given columns left
35+
std::string cursor_left(std::size_t columns);
36+
// move the cursor the given columns right
37+
std::string cursor_right(std::size_t columns);
38+
// the ANSI code to generate a cursor position report
39+
std::string cursor_position_report();
40+
// turn off the cursor
41+
std::string cursor_off();
42+
// turn on the cursor
43+
std::string cursor_on();
44+
45+
// clears the screen from the current cursor position to the end of the screen
46+
std::string clear_eol();
47+
48+
} // namespace Term

cpp-terminal/event.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "cpp-terminal/event.hpp"
22

3+
#include "cpp-terminal/cursor.hpp"
4+
35
bool Term::Event::empty()
46
{
57
if(m_Type == Type::Empty) return true;
@@ -39,6 +41,21 @@ void Term::Event::parse()
3941
if(m_Key == Term::Key::Value::DEL) m_Key = Term::Key::Value::BACKSPACE;
4042
m_str.clear();
4143
}
44+
else if(m_str.size() == 2 && m_str[0] == '\033')
45+
{
46+
m_Key = static_cast<Term::Key::Value>(Term::Key::Value::ALT + static_cast<Term::Key::Value>(m_str[1]));
47+
m_Type = Type::Key;
48+
m_str.clear();
49+
}
50+
else if(m_str[0] == '\033' && m_str[1] == '[' && m_str[m_str.size() - 1] == 'R')
51+
{
52+
std::size_t found = m_str.find(';', 2);
53+
if(found != std::string::npos)
54+
{
55+
m_Type = Type::Cursor;
56+
m_Cursor = Cursor(std::stoi(m_str.substr(2, found - 2)), std::stoi(m_str.substr(found + 1, m_str.size() - (found + 2))));
57+
}
58+
}
4259
else if(m_str.size() <= 10)
4360
{
4461
//https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
@@ -189,3 +206,10 @@ Term::Event::operator Term::Key()
189206
else
190207
return Key();
191208
}
209+
210+
Term::Event::operator Term::Cursor()
211+
{
212+
if(m_Type == Type::Cursor) return m_Cursor;
213+
else
214+
return Cursor();
215+
}

cpp-terminal/event.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include "cpp-terminal/cursor.hpp"
34
#include "cpp-terminal/key.hpp"
45
#include "cpp-terminal/screen.hpp"
56

@@ -17,6 +18,7 @@ class Event
1718
Empty,
1819
Key,
1920
Screen,
21+
Cursor,
2022
CopyPaste,
2123
};
2224
Event() = default;
@@ -28,13 +30,15 @@ class Event
2830

2931
operator Term::Key();
3032
operator Term::Screen();
33+
operator Term::Cursor();
3134
operator std::string();
3235

3336
private:
3437
void parse();
3538
Type m_Type{Type::Empty};
3639
std::string m_str;
3740
Key m_Key{Key::Value::NO_KEY};
41+
Cursor m_Cursor;
3842
Term::Screen m_Screen;
3943
};
4044

cpp-terminal/key.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ bool Term::Key::is_CTRL()
2828

2929
bool Term::Key::is_ALT()
3030
{
31-
if((m_value & Key::ALT) == Key::ALT) return true;
31+
if(m_value >= Key::ALT && Key::ALT < (Key::ALT << 1)) return true;
3232
else
3333
return false;
3434
}

cpp-terminal/key.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,7 @@ class Key
145145
DEL = 127,
146146
// End ASCII
147147
// Extended ANSII goes up to 255
148-
ALT_ENTER = 256,
149-
ARROW_LEFT,
148+
ARROW_LEFT = 256,
150149
ARROW_RIGHT,
151150
ARROW_UP,
152151
ARROW_DOWN,

cpp-terminal/platforms/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
add_library(cpp-terminal-platforms terminal.cpp tty.cpp terminfo.cpp input.cpp base.cpp)
1+
add_library(cpp-terminal-platforms terminal.cpp tty.cpp terminfo.cpp input.cpp screen.cpp)
22
target_link_libraries(cpp-terminal-platforms PRIVATE Warnings::Warnings)
33
target_compile_options(cpp-terminal-platforms PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
44
target_include_directories(cpp-terminal-platforms PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}> $<INSTALL_INTERFACE:include>)

0 commit comments

Comments
 (0)