Skip to content

Commit e3c5548

Browse files
authored
Merge pull request #10442 from FoamyGuy/terminal_expose_cursor_position
cursor_x and cursor_y properties on Terminal
2 parents 203c999 + b2a3eef commit e3c5548

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

shared-bindings/terminalio/Terminal.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,30 @@ static mp_uint_t terminalio_terminal_write(mp_obj_t self_in, const void *buf_in,
136136
return common_hal_terminalio_terminal_write(self, buf, size, errcode);
137137
}
138138

139+
//| cursor_x: int
140+
//| """The x position of the cursor."""
141+
//|
142+
static mp_obj_t terminalio_terminal_obj_get_cursor_x(mp_obj_t self_in) {
143+
terminalio_terminal_obj_t *self = MP_OBJ_TO_PTR(self_in);
144+
return MP_OBJ_NEW_SMALL_INT(common_hal_terminalio_terminal_get_cursor_x(self));
145+
}
146+
MP_DEFINE_CONST_FUN_OBJ_1(terminalio_terminal_get_cursor_x_obj, terminalio_terminal_obj_get_cursor_x);
147+
148+
MP_PROPERTY_GETTER(terminalio_terminal_cursor_x_obj,
149+
(mp_obj_t)&terminalio_terminal_get_cursor_x_obj);
150+
151+
//| cursor_y: int
152+
//| """The y position of the cursor."""
153+
//|
154+
static mp_obj_t terminalio_terminal_obj_get_cursor_y(mp_obj_t self_in) {
155+
terminalio_terminal_obj_t *self = MP_OBJ_TO_PTR(self_in);
156+
return MP_OBJ_NEW_SMALL_INT(common_hal_terminalio_terminal_get_cursor_y(self));
157+
}
158+
MP_DEFINE_CONST_FUN_OBJ_1(terminalio_terminal_get_cursor_y_obj, terminalio_terminal_obj_get_cursor_y);
159+
160+
MP_PROPERTY_GETTER(terminalio_terminal_cursor_y_obj,
161+
(mp_obj_t)&terminalio_terminal_get_cursor_y_obj);
162+
139163
static mp_uint_t terminalio_terminal_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t arg, int *errcode) {
140164
terminalio_terminal_obj_t *self = MP_OBJ_TO_PTR(self_in);
141165
mp_uint_t ret;
@@ -155,6 +179,8 @@ static mp_uint_t terminalio_terminal_ioctl(mp_obj_t self_in, mp_uint_t request,
155179
static const mp_rom_map_elem_t terminalio_terminal_locals_dict_table[] = {
156180
// Standard stream methods.
157181
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
182+
{ MP_ROM_QSTR(MP_QSTR_cursor_x), MP_ROM_PTR(&terminalio_terminal_cursor_x_obj) },
183+
{ MP_ROM_QSTR(MP_QSTR_cursor_y), MP_ROM_PTR(&terminalio_terminal_cursor_y_obj) },
158184
};
159185
static MP_DEFINE_CONST_DICT(terminalio_terminal_locals_dict, terminalio_terminal_locals_dict_table);
160186

@@ -168,7 +194,7 @@ static const mp_stream_p_t terminalio_terminal_stream_p = {
168194
MP_DEFINE_CONST_OBJ_TYPE(
169195
terminalio_terminal_type,
170196
MP_QSTR_Terminal,
171-
MP_TYPE_FLAG_ITER_IS_ITERNEXT,
197+
MP_TYPE_FLAG_ITER_IS_ITERNEXT | MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
172198
make_new, terminalio_terminal_make_new,
173199
locals_dict, (mp_obj_dict_t *)&terminalio_terminal_locals_dict,
174200
iter, mp_stream_unbuffered_iter,

shared-bindings/terminalio/Terminal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,7 @@ extern void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *
1919
extern size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self,
2020
const uint8_t *data, size_t len, int *errcode);
2121

22+
extern uint16_t common_hal_terminalio_terminal_get_cursor_x(terminalio_terminal_obj_t *self);
23+
extern uint16_t common_hal_terminalio_terminal_get_cursor_y(terminalio_terminal_obj_t *self);
24+
2225
extern bool common_hal_terminalio_terminal_ready_to_tx(terminalio_terminal_obj_t *self);

shared-module/terminalio/Terminal.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,13 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con
453453
return i - data;
454454
}
455455

456+
uint16_t common_hal_terminalio_terminal_get_cursor_x(terminalio_terminal_obj_t *self) {
457+
return self->cursor_x;
458+
}
459+
uint16_t common_hal_terminalio_terminal_get_cursor_y(terminalio_terminal_obj_t *self) {
460+
return self->cursor_y;
461+
}
462+
456463
bool common_hal_terminalio_terminal_ready_to_tx(terminalio_terminal_obj_t *self) {
457464
return self->scroll_area != NULL;
458465
}

0 commit comments

Comments
 (0)