Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cpp-terminal/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ configure_file(version.hpp.in version.hpp)
add_subdirectory(platforms)

# create and configure library target
add_library(cpp-terminal base.cpp prompt.cpp window.cpp input.cpp terminal.cpp color.cpp key.cpp event.cpp screen.cpp options.cpp)
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)
target_link_libraries(cpp-terminal PRIVATE Warnings::Warnings cpp-terminal::cpp-terminal-platforms)
target_compile_options(cpp-terminal PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
target_include_directories(cpp-terminal PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}> $<INSTALL_INTERFACE:include>)

set_target_properties(cpp-terminal PROPERTIES
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"
PRIVATE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/platforms/conversion.hpp;${CMAKE_CURRENT_SOURCE_DIR}/platforms/macros.hpp")
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"
PRIVATE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/platforms/conversion.hpp;${CMAKE_CURRENT_SOURCE_DIR}/platforms/macros.hpp")

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

Expand Down
67 changes: 0 additions & 67 deletions cpp-terminal/base.cpp

This file was deleted.

70 changes: 0 additions & 70 deletions cpp-terminal/base.hpp

This file was deleted.

40 changes: 40 additions & 0 deletions cpp-terminal/cursor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include "cpp-terminal/cursor.hpp"

#include "cpp-terminal/input.hpp"

#include <iostream>

Term::Cursor::Cursor(const std::size_t& row, const std::size_t& column) : m_position({row, column}) {}

std::size_t Term::Cursor::row() const { return m_position.first; }

std::size_t Term::Cursor::column() const { return m_position.second; }

bool Term::Cursor::empty()
{
if(m_position.first == 0 && m_position.second == 0) return true;
else
return false;
}

void Term::Cursor::setRow(const std::size_t& row) { m_position.first = row; }

void Term::Cursor::setColum(const std::size_t& column) { m_position.second = column; }

std::string Term::cursor_off() { return "\x1b[?25l"; }

std::string Term::cursor_on() { return "\x1b[?25h"; }

std::string Term::cursor_move(std::size_t row, std::size_t column) { return "\033[" + std::to_string(row) + ';' + std::to_string(column) + 'H'; }

std::string Term::cursor_up(std::size_t rows) { return "\033[" + std::to_string(rows) + 'A'; }

std::string Term::cursor_down(std::size_t rows) { return "\033[" + std::to_string(rows) + 'B'; }

std::string Term::cursor_right(std::size_t columns) { return "\033[" + std::to_string(columns) + 'C'; }

std::string Term::cursor_left(std::size_t columns) { return "\033[" + std::to_string(columns) + 'D'; }

std::string Term::cursor_position_report() { return "\033[6n"; }

std::string Term::clear_eol() { return "\033[K"; }
48 changes: 48 additions & 0 deletions cpp-terminal/cursor.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#pragma once

#include <cstddef>
#include <string>
#include <utility>

namespace Term
{

class Cursor
{
public:
Cursor() = default;
Cursor(const std::size_t&, const std::size_t&);
std::size_t row() const;
std::size_t column() const;
void setRow(const std::size_t&);
void setColum(const std::size_t&);
bool empty();

private:
std::pair<std::size_t, std::size_t> m_position{0, 0};
};

// returns the current cursor position (row, column) (Y, X)
Term::Cursor cursor_position();

// move the cursor to the given (row, column) / (Y, X)
std::string cursor_move(std::size_t row, std::size_t column);
// move the cursor the given rows up
std::string cursor_up(std::size_t rows);
// move the cursor the given rows down
std::string cursor_down(std::size_t rows);
// move the cursor the given columns left
std::string cursor_left(std::size_t columns);
// move the cursor the given columns right
std::string cursor_right(std::size_t columns);
// the ANSI code to generate a cursor position report
std::string cursor_position_report();
// turn off the cursor
std::string cursor_off();
// turn on the cursor
std::string cursor_on();

// clears the screen from the current cursor position to the end of the screen
std::string clear_eol();

} // namespace Term
27 changes: 27 additions & 0 deletions cpp-terminal/event.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#include "cpp-terminal/event.hpp"

#include "cpp-terminal/cursor.hpp"

#include <iostream>

bool Term::Event::empty()
{
if(m_Type == Type::Empty) return true;
Expand Down Expand Up @@ -39,6 +43,22 @@ void Term::Event::parse()
if(m_Key == Term::Key::Value::DEL) m_Key = Term::Key::Value::BACKSPACE;
m_str.clear();
}
else if(m_str.size() == 2 && m_str[0] == '\033')
{
m_Key = static_cast<Term::Key::Value>(Term::Key::Value::ALT + static_cast<Term::Key::Value>(m_str[1]));
m_Type = Type::Key;
m_str.clear();
}
else if(m_str[0] == '\033' && m_str[1] == '[' && m_str[m_str.size() - 1] == 'R')
{
std::size_t found = m_str.find(';', 2);
if(found != std::string::npos)
{
m_Type = Type::Cursor;

m_Cursor = Cursor(std::stoi(m_str.substr(2, found - 2)), std::stoi(m_str.substr(found + 1, m_str.size() - (found + 2))));
}
}
else if(m_str.size() <= 10)
{
//https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
Expand Down Expand Up @@ -189,3 +209,10 @@ Term::Event::operator Term::Key()
else
return Key();
}

Term::Event::operator Term::Cursor()
{
if(m_Type == Type::Cursor) return m_Cursor;
else
return Cursor();
}
4 changes: 4 additions & 0 deletions cpp-terminal/event.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "cpp-terminal/cursor.hpp"
#include "cpp-terminal/key.hpp"
#include "cpp-terminal/screen.hpp"

Expand All @@ -17,6 +18,7 @@ class Event
Empty,
Key,
Screen,
Cursor,
CopyPaste,
};
Event() = default;
Expand All @@ -28,13 +30,15 @@ class Event

operator Term::Key();
operator Term::Screen();
operator Term::Cursor();
operator std::string();

private:
void parse();
Type m_Type{Type::Empty};
std::string m_str;
Key m_Key{Key::Value::NO_KEY};
Cursor m_Cursor;
Term::Screen m_Screen;
};

Expand Down
2 changes: 1 addition & 1 deletion cpp-terminal/key.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ bool Term::Key::is_CTRL()

bool Term::Key::is_ALT()
{
if((m_value & Key::ALT) == Key::ALT) return true;
if(m_value >= Key::ALT && Key::ALT < (Key::ALT << 1)) return true;
else
return false;
}
Expand Down
3 changes: 1 addition & 2 deletions cpp-terminal/key.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,7 @@ class Key
DEL = 127,
// End ASCII
// Extended ANSII goes up to 255
ALT_ENTER = 256,
ARROW_LEFT,
ARROW_LEFT = 256,
ARROW_RIGHT,
ARROW_UP,
ARROW_DOWN,
Expand Down
2 changes: 1 addition & 1 deletion cpp-terminal/platforms/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
add_library(cpp-terminal-platforms terminal.cpp tty.cpp terminfo.cpp input.cpp base.cpp)
add_library(cpp-terminal-platforms terminal.cpp tty.cpp terminfo.cpp input.cpp screen.cpp cursor.cpp)
target_link_libraries(cpp-terminal-platforms PRIVATE Warnings::Warnings)
target_compile_options(cpp-terminal-platforms PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
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>)
Expand Down
35 changes: 0 additions & 35 deletions cpp-terminal/platforms/base.cpp

This file was deleted.

Loading