added static output handler (fixes #6)

added some extensive debug output — all the communication between pseudo
terminal's host and client
Gentoo
Christian Burger 2022-04-08 21:35:49 +02:00
parent fd800dbca8
commit c7138f3df9
3 changed files with 22 additions and 9 deletions

View File

@ -51,7 +51,8 @@ namespace krikkel::NCursesPtyWindow
ptyWindow->wresize(Root_Window->lines(), Root_Window->cols());
continue;
}
ptyWindow->writeToClient((unsigned char) input);
ptyWindow->writeToClient((char *) &input, 1);
}
return 0;

View File

@ -37,9 +37,11 @@ namespace krikkel::NCursesPtyWindow
pseudoTerminalScreen = vterm_obtain_screen(pseudoTerminal);
vterm_screen_reset(pseudoTerminalScreen, true);
vterm_screen_set_callbacks(pseudoTerminalScreen, &screenCallbacks, this);
vterm_output_set_callback(pseudoTerminal, &staticHandlerOutput, this);
//vterm_screen_enable_altscreen(pseudoTerminalScreen, true);
// the terminal is doing most of the work
//raw(); — cbreak might suffice
//raw(); //— cbreak might suffice
//noecho(); — already set
//nodelay(true); — @todo needs some reprogramming
keypad(false);
@ -62,10 +64,11 @@ namespace krikkel::NCursesPtyWindow
return fdPtyClient;
}
/// @todo maybe implement a function with a string buffer
void NCursesPtyWindow::writeToClient(char character)
void NCursesPtyWindow::writeToClient(const char *output, size_t length) const
{
write(fdPtyHost, &character, sizeof(character));
write(fdPtyHost, output, length);
__debug_log("written to PTY client: ");
__debug_log(__debug_bytes_printable_table(output, length));
}
void NCursesPtyWindow::readFromPtyClientThreadMethod()
@ -90,6 +93,7 @@ namespace krikkel::NCursesPtyWindow
size_t bytesRead = read(fdPtyHost, ptyClientOutputBuffer, PTY_CLIENT_OUTPUT_BUFFER_SIZE);
if(bytesRead != -1 && bytesRead != 0)
vterm_input_write(pseudoTerminal, ptyClientOutputBuffer, bytesRead);
__debug_log("read from PTY client: '" + __debug_bytes_printable(ptyClientOutputBuffer, bytesRead) + "'");
}
VTermScreenCallbacks NCursesPtyWindow::screenCallbacks =
@ -210,13 +214,13 @@ namespace krikkel::NCursesPtyWindow
attr_t NCursesPtyWindow::extractAttributesFromVTermCell(VTermScreenCell vTermCell)
{
attr_t result = A_NORMAL;
__debug_log("unimplemented method called");
//__debug_log("unimplemented method called");
return result;
}
short NCursesPtyWindow::extractColorFromVTermCell(VTermScreenCell vTermCell)
{
__debug_log("unimplemented method called");
//__debug_log("unimplemented method called");
return 0;
}
@ -317,4 +321,11 @@ namespace krikkel::NCursesPtyWindow
NCursesPtyWindow *instance = static_cast<NCursesPtyWindow *>(user);
return instance->handlerPopLine(cols, cells);
}
void NCursesPtyWindow::staticHandlerOutput(const char *s, size_t len, void *user)
{
NCursesPtyWindow *instance = static_cast<NCursesPtyWindow *>(user);
for(size_t index = 0; index < len; ++index)
instance->writeToClient(s, len);
}
}

View File

@ -24,7 +24,7 @@ namespace krikkel::NCursesPtyWindow
~NCursesPtyWindow();
int getFdPtyClient() const;
void writeToClient(char character);
void writeToClient(const char * string, size_t length) const;
int add_wch(cchar_t *character);
int refresh() override;
@ -66,5 +66,6 @@ namespace krikkel::NCursesPtyWindow
static int staticHandlerResize(int rows, int cols, void *user);
static int staticHandlerPushLine(int cols, const VTermScreenCell *cells, void *user);
static int staticHandlerPopLine(int cols, VTermScreenCell *cells, void *user);
};
static void staticHandlerOutput(const char *s, size_t len, void *user);
};
}