refactoring: wide character methods to Window
This commit is contained in:
parent
746e458cd2
commit
3af1284cf8
|
@ -13,7 +13,7 @@ set(CMAKE_CXX_STANDARD 17)
|
||||||
include(CTest)
|
include(CTest)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
add_library(NCursesPtyWindow PtyWindow.cpp SingleUserInput.cpp Debug.cpp)
|
add_library(NCursesPtyWindow Window.cpp PtyWindow.cpp SingleUserInput.cpp Debug.cpp)
|
||||||
|
|
||||||
### path to own system includes
|
### path to own system includes
|
||||||
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/include")
|
include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/include")
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace krikkel::NCursesPtyWindow
|
||||||
using std::lock_guard;
|
using std::lock_guard;
|
||||||
|
|
||||||
PtyWindow::PtyWindow(std::mutex *writeToNCursesMutex, int lines, int columns, int y, int x)
|
PtyWindow::PtyWindow(std::mutex *writeToNCursesMutex, int lines, int columns, int y, int x)
|
||||||
: writeToNCursesMutex(writeToNCursesMutex), NCursesWindow(lines, columns, y, x)
|
: writeToNCursesMutex(writeToNCursesMutex), Window(lines, columns, y, x)
|
||||||
{
|
{
|
||||||
// to get the original terminal we need to shutdown ncurses for a moment
|
// to get the original terminal we need to shutdown ncurses for a moment
|
||||||
/// @todo maybe try `reset_prog_mode()` and `reset_shell_mode()` instead
|
/// @todo maybe try `reset_prog_mode()` and `reset_shell_mode()` instead
|
||||||
|
@ -83,13 +83,6 @@ namespace krikkel::NCursesPtyWindow
|
||||||
vterm_keyboard_key(pseudoTerminal, key, VTERM_MOD_NONE);
|
vterm_keyboard_key(pseudoTerminal, key, VTERM_MOD_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleUserInput PtyWindow::readSingleUserInput()
|
|
||||||
{
|
|
||||||
wint_t input;
|
|
||||||
int result = get_wch(&input);
|
|
||||||
return SingleUserInput(result, input);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PtyWindow::readFromPtyClientThreadMethod()
|
void PtyWindow::readFromPtyClientThreadMethod()
|
||||||
{
|
{
|
||||||
/// @todo in theory, there is no need for a timeout or select …
|
/// @todo in theory, there is no need for a timeout or select …
|
||||||
|
@ -254,16 +247,6 @@ namespace krikkel::NCursesPtyWindow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int PtyWindow::add_wch(const cchar_t *character)
|
|
||||||
{
|
|
||||||
return ::wadd_wch(w, character);
|
|
||||||
}
|
|
||||||
|
|
||||||
int PtyWindow::get_wch(wint_t *character)
|
|
||||||
{
|
|
||||||
return ::wget_wch(w, character);
|
|
||||||
}
|
|
||||||
|
|
||||||
int PtyWindow::refresh()
|
int PtyWindow::refresh()
|
||||||
{
|
{
|
||||||
lock_guard nCursesLock(*writeToNCursesMutex);
|
lock_guard nCursesLock(*writeToNCursesMutex);
|
||||||
|
|
30
Window.cpp
Normal file
30
Window.cpp
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/**
|
||||||
|
* @author Christian Burger (christian@krikkel.de)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <NCursesPtyWindow/Window.hpp>
|
||||||
|
|
||||||
|
namespace krikkel::NCursesPtyWindow
|
||||||
|
{
|
||||||
|
Window::Window(int lines, int columns, int y, int x)
|
||||||
|
: NCursesWindow(lines, columns, y, x)
|
||||||
|
{}
|
||||||
|
|
||||||
|
int Window::add_wch(const cchar_t *character)
|
||||||
|
{
|
||||||
|
return ::wadd_wch(w, character);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Window::get_wch(wint_t *character)
|
||||||
|
{
|
||||||
|
return ::wget_wch(w, character);
|
||||||
|
}
|
||||||
|
|
||||||
|
SingleUserInput Window::readSingleUserInput()
|
||||||
|
{
|
||||||
|
wint_t input;
|
||||||
|
int result = get_wch(&input);
|
||||||
|
return SingleUserInput(result, input);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,6 +7,7 @@
|
||||||
#define __WINDOW_H__
|
#define __WINDOW_H__
|
||||||
|
|
||||||
#include "SingleUserInput.hpp"
|
#include "SingleUserInput.hpp"
|
||||||
|
#include "Window.hpp"
|
||||||
|
|
||||||
#include <cursesw.h>
|
#include <cursesw.h>
|
||||||
#include <pty.h>
|
#include <pty.h>
|
||||||
|
@ -15,21 +16,9 @@
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
#ifdef add_wch
|
|
||||||
inline void UNDEF(add_wch)(const cchar_t *character) { add_wch(character); }
|
|
||||||
#undef add_wch
|
|
||||||
#define add_wch UNDEF(add_wch)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef get_wch
|
|
||||||
inline void UNDEF(get_wch)(wint_t *character) { get_wch(character); }
|
|
||||||
#undef get_wch
|
|
||||||
#define get_wch UNDEF(get_wch)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace krikkel::NCursesPtyWindow
|
namespace krikkel::NCursesPtyWindow
|
||||||
{
|
{
|
||||||
class PtyWindow : public NCursesWindow
|
class PtyWindow : public Window
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PtyWindow(std::mutex *writeToNCursesMutex, int lines, int columns, int y, int x);
|
PtyWindow(std::mutex *writeToNCursesMutex, int lines, int columns, int y, int x);
|
||||||
|
@ -40,10 +29,6 @@ namespace krikkel::NCursesPtyWindow
|
||||||
void writeUnicodeCharToClient(wint_t character);
|
void writeUnicodeCharToClient(wint_t character);
|
||||||
void writeKeyToClient(VTermKey key);
|
void writeKeyToClient(VTermKey key);
|
||||||
|
|
||||||
SingleUserInput readSingleUserInput();
|
|
||||||
|
|
||||||
int add_wch(const cchar_t *character);
|
|
||||||
int get_wch(wint_t *character);
|
|
||||||
int refresh() override;
|
int refresh() override;
|
||||||
int wresize(int rows, int cols);
|
int wresize(int rows, int cols);
|
||||||
|
|
||||||
|
|
38
include/NCursesPtyWindow/Window.hpp
Normal file
38
include/NCursesPtyWindow/Window.hpp
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* @brief Providing wide character methods missing in NCursesWindow.
|
||||||
|
* @author Christian Burger (christian@krikkel.de)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef A2C3FDB7_7A85_4527_BC85_366E14149EB8
|
||||||
|
#define A2C3FDB7_7A85_4527_BC85_366E14149EB8
|
||||||
|
|
||||||
|
#include "SingleUserInput.hpp"
|
||||||
|
|
||||||
|
#include <ncursesw/cursesw.h>
|
||||||
|
|
||||||
|
#ifdef add_wch
|
||||||
|
inline void UNDEF(add_wch)(const cchar_t *character) { add_wch(character); }
|
||||||
|
#undef add_wch
|
||||||
|
#define add_wch UNDEF(add_wch)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef get_wch
|
||||||
|
inline void UNDEF(get_wch)(wint_t *character) { get_wch(character); }
|
||||||
|
#undef get_wch
|
||||||
|
#define get_wch UNDEF(get_wch)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace krikkel::NCursesPtyWindow
|
||||||
|
{
|
||||||
|
class Window : public NCursesWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Window(int lines, int columns, int y, int x);
|
||||||
|
int add_wch(const cchar_t *character);
|
||||||
|
int get_wch(wint_t *character);
|
||||||
|
|
||||||
|
SingleUserInput readSingleUserInput();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* A2C3FDB7_7A85_4527_BC85_366E14149EB8 */
|
Loading…
Reference in a new issue