Skip to content

Commit

Permalink
feat: add get_cursor_pos()
Browse files Browse the repository at this point in the history
  • Loading branch information
lihop committed Feb 4, 2024
1 parent b575895 commit 2392dd7
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 0 deletions.
7 changes: 7 additions & 0 deletions addons/godot_xterm/native/src/terminal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,8 @@ void Terminal::_register_methods() {
register_method("sb_reset", &Terminal::sb_reset);
register_method("clear_sb", &Terminal::clear_sb);

register_method("get_cursor_pos", &Terminal::get_cursor_pos);

register_method("start_selection", &Terminal::start_selection);
register_method("select_to_pointer", &Terminal::select_to_pointer);
register_method("reset_selection", &Terminal::reset_selection);
Expand Down Expand Up @@ -635,6 +637,11 @@ void Terminal::clear_sb() {
update();
}

Vector2 Terminal::get_cursor_pos() {
return Vector2(tsm_screen_get_cursor_x(screen),
tsm_screen_get_cursor_y(screen));
}

void Terminal::start_selection(Vector2 position) {
tsm_screen_selection_start(screen, position.x, position.y);
update();
Expand Down
2 changes: 2 additions & 0 deletions addons/godot_xterm/native/src/terminal.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ class Terminal : public Control {
void sb_reset();
void clear_sb();

Vector2 get_cursor_pos();

void start_selection(Vector2 position);
void select_to_pointer(Vector2 position);
void reset_selection();
Expand Down
4 changes: 4 additions & 0 deletions addons/godot_xterm/terminal.gd
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ func get_rows() -> int:
return _rows


func get_cursor_pos() -> Vector2:
return _native_terminal.get_cursor_pos()


func write(data) -> void:
assert(
data is PoolByteArray or data is String,
Expand Down
15 changes: 15 additions & 0 deletions test/integration/terminal.test.gd
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,21 @@ func test_bell_cooldown() -> void:
assert_signal_emit_count(terminal, "bell", 2)


func test_cursor_get_pos_initially_0_0() -> void:
assert_eq(terminal.get_cursor_pos(), Vector2(0, 0))


func test_cursor_get_pos_increments_immediately() -> void:
terminal.write(" ")
assert_eq(terminal.get_cursor_pos(), Vector2(1, 0))


func test_cursor_get_pos_increments_eventually() -> void:
terminal.write(" ")
yield(yield_to(get_tree(), "idle_frame", 1), YIELD)
assert_eq(terminal.get_cursor_pos(), Vector2(1, 0))


func test_writing_random_data_to_terminal_does_not_crash_application():
add_child_autofree(preload("res://test/scenes/write_random.tscn").instance())
yield(yield_frames(5, "Writing random data to terminal"), YIELD)
Expand Down

0 comments on commit 2392dd7

Please sign in to comment.