Improve dumping of SGR command
This commit is contained in:
parent
3604b8c3e5
commit
256a5318f1
@ -25,6 +25,7 @@ utoi(uint32_t *buf, unsigned int sz) {
|
|||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
// Macros {{{
|
// Macros {{{
|
||||||
|
#define MAX_PARAMS 256
|
||||||
#define IS_DIGIT \
|
#define IS_DIGIT \
|
||||||
case '0': \
|
case '0': \
|
||||||
case '1': \
|
case '1': \
|
||||||
@ -39,7 +40,8 @@ utoi(uint32_t *buf, unsigned int sz) {
|
|||||||
|
|
||||||
|
|
||||||
#ifdef DUMP_COMMANDS
|
#ifdef DUMP_COMMANDS
|
||||||
static void _report_error(PyObject *dump_callback, const char *fmt, ...) {
|
static void
|
||||||
|
_report_error(PyObject *dump_callback, const char *fmt, ...) {
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
PyObject *temp = PyUnicode_FromFormatV(fmt, argptr);
|
PyObject *temp = PyUnicode_FromFormatV(fmt, argptr);
|
||||||
@ -50,6 +52,17 @@ static void _report_error(PyObject *dump_callback, const char *fmt, ...) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_report_params(PyObject *dump_callback, const char *name, unsigned int *params, unsigned int count) {
|
||||||
|
static char buf[MAX_PARAMS*3] = {0};
|
||||||
|
unsigned int i, p;
|
||||||
|
for(i = 0, p=0; i < count && p < MAX_PARAMS*3-20; i++) {
|
||||||
|
p += snprintf(buf + p, MAX_PARAMS*3 - p, "%u ", params[i]);
|
||||||
|
}
|
||||||
|
buf[p] = 0;
|
||||||
|
Py_XDECREF(PyObject_CallFunction(dump_callback, "ss", name, buf)); PyErr_Clear();
|
||||||
|
}
|
||||||
|
|
||||||
#define DUMP_UNUSED
|
#define DUMP_UNUSED
|
||||||
|
|
||||||
#define REPORT_ERROR(...) _report_error(dump_callback, __VA_ARGS__);
|
#define REPORT_ERROR(...) _report_error(dump_callback, __VA_ARGS__);
|
||||||
@ -69,6 +82,8 @@ static void _report_error(PyObject *dump_callback, const char *fmt, ...) {
|
|||||||
#define REPORT_DRAW(ch) \
|
#define REPORT_DRAW(ch) \
|
||||||
Py_XDECREF(PyObject_CallFunction(dump_callback, "sC", "draw", ch)); PyErr_Clear();
|
Py_XDECREF(PyObject_CallFunction(dump_callback, "sC", "draw", ch)); PyErr_Clear();
|
||||||
|
|
||||||
|
#define REPORT_PARAMS(name, params, num) _report_params(dump_callback, #name, params, num_params)
|
||||||
|
|
||||||
#define FLUSH_DRAW \
|
#define FLUSH_DRAW \
|
||||||
Py_XDECREF(PyObject_CallFunction(dump_callback, "sO", "draw", Py_None)); PyErr_Clear();
|
Py_XDECREF(PyObject_CallFunction(dump_callback, "sO", "draw", Py_None)); PyErr_Clear();
|
||||||
|
|
||||||
@ -83,6 +98,7 @@ static void _report_error(PyObject *dump_callback, const char *fmt, ...) {
|
|||||||
|
|
||||||
#define REPORT_COMMAND(...)
|
#define REPORT_COMMAND(...)
|
||||||
#define REPORT_DRAW(ch)
|
#define REPORT_DRAW(ch)
|
||||||
|
#define REPORT_PARAMS(...)
|
||||||
#define FLUSH_DRAW
|
#define FLUSH_DRAW
|
||||||
#define REPORT_OSC(name, string)
|
#define REPORT_OSC(name, string)
|
||||||
|
|
||||||
@ -243,7 +259,6 @@ dispatch_osc(Screen *screen, PyObject DUMP_UNUSED *dump_callback) {
|
|||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
// CSI mode {{{
|
// CSI mode {{{
|
||||||
#define MAX_PARAMS 256
|
|
||||||
#define CSI_SECONDARY \
|
#define CSI_SECONDARY \
|
||||||
case ';': \
|
case ';': \
|
||||||
case '"': \
|
case '"': \
|
||||||
@ -298,7 +313,7 @@ dispatch_csi(Screen *screen, PyObject DUMP_UNUSED *dump_callback) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
#define CSI_HANDLER_MULTIPLE(name) \
|
#define CSI_HANDLER_MULTIPLE(name) \
|
||||||
REPORT_COMMAND(name, num_params); \
|
REPORT_PARAMS(name, params, num_params); \
|
||||||
name(screen, params, num_params); \
|
name(screen, params, num_params); \
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user