diff --git a/addons/godot_xterm/editor_plugins/terminal/terminal_panel.gd b/addons/godot_xterm/editor_plugins/terminal/terminal_panel.gd index 2d435eb..37966d7 100644 --- a/addons/godot_xterm/editor_plugins/terminal/terminal_panel.gd +++ b/addons/godot_xterm/editor_plugins/terminal/terminal_panel.gd @@ -265,8 +265,8 @@ func _on_Panel_resized(): var size = tab_container.rect_size if tabs.get_tab_count() > 0: var terminal = tab_container.get_child(tabs.current_tab) - var cols = terminal.cols - var rows = terminal.rows + var cols = terminal.get_cols() + var rows = terminal.get_rows() size_label.text = "Size: %d cols; %d rows\n(%d x %d px)" % [cols, rows, size.x, size.y] else: size_label.text = "Size:\n(%d x %d px)" % [size.x, size.y] diff --git a/addons/godot_xterm/pty.gd b/addons/godot_xterm/pty.gd index 11185cc..2126073 100644 --- a/addons/godot_xterm/pty.gd +++ b/addons/godot_xterm/pty.gd @@ -102,7 +102,7 @@ func _set_terminal(value: _Terminal): return # Connect the new terminal. - resize(_terminal.cols, _terminal.rows) + resize(_terminal.get_cols(), _terminal.get_rows()) if not _terminal.is_connected("size_changed", self, "resizev"): _terminal.connect("size_changed", self, "resizev") if not _terminal.is_connected("data_sent", self, "write"): diff --git a/addons/godot_xterm/terminal.gd b/addons/godot_xterm/terminal.gd index 3b789d4..5340bf4 100644 --- a/addons/godot_xterm/terminal.gd +++ b/addons/godot_xterm/terminal.gd @@ -26,8 +26,8 @@ enum SelectionMode { export(UpdateMode) var update_mode = UpdateMode.AUTO setget set_update_mode -var cols = 2 -var rows = 2 +var cols = 2 setget _set_cols, _get_cols # Deprecated. +var rows = 2 setget _set_rows, _get_rows # Deprecated. # If true, text in the terminal will be copied to the clipboard when selected. export(bool) var copy_on_selection @@ -44,6 +44,9 @@ export var bell_cooldown: float = 0.1 export var blink_on_time: float = 0.6 export var blink_off_time: float = 0.3 +var _cols := 2 +var _rows := 2 + var _default_theme: Theme = preload("./themes/default.tres") var _viewport: Viewport = preload("./nodes/terminal/viewport.tscn").instance() var _native_terminal: Control = _viewport.get_node("Terminal") @@ -55,12 +58,6 @@ var _selecting := false var _selecting_mode: int = SelectionMode.NONE var _selection_timer := Timer.new() -var _dirty := false - -var buffer := StreamPeerBuffer.new() - -var times = 0 - var _buffer := [] @@ -69,12 +66,38 @@ func set_update_mode(value): _native_terminal.update_mode = value -func get_rows() -> int: - return 0 - - func get_cols() -> int: - return 0 + return _cols + + +func _get_cols() -> int: + push_warning( + "The 'cols' property of Terminal is deprecated and will be removed in a future version. Please use the `get_cols()` method instead." + ) + return get_cols() + + +func _set_cols(_value) -> void: + push_error( + "The 'cols' property of Terminal is read-only and determined by rect_size and the theme's font size." + ) + + +func get_rows() -> int: + return _rows + + +func _get_rows() -> int: + push_warning( + "The 'rows' property of Terminal is deprecated and will be removed in a future version. Please use the `get_rows()` method instead." + ) + return get_rows() + + +func _set_rows(_value) -> void: + push_error( + "The 'rows' property of Terminal is read-only and determined by rect_size and the theme's font size." + ) func write(data) -> void: @@ -277,8 +300,8 @@ func _on_key_pressed(data: PoolByteArray, event: InputEventKey): func _on_size_changed(new_size: Vector2): - cols = new_size.x - rows = new_size.y + _cols = new_size.x + _rows = new_size.y emit_signal("size_changed", new_size) @@ -291,10 +314,3 @@ func _on_bell(): func _mouse_to_cell(pos: Vector2) -> Vector2: return Vector2(pos / _native_terminal.cell_size) - - -func _set_size_warning(value): - if value: - push_warning( - "Terminal cols and rows are read only and determined by the font and rect sizes." - ) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 84ae8b2..23dbd4e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/lihop/godot-xterm/compare/v2.1.1...HEAD) +### Changed +- Deprecated the `cols` and `rows` properties of Terminal. + These properties will be removed in a future version. + Please use `get_cols()` and `get_rows()` instead. + ### Removed - Dropped support for Godot version 3.3.x. diff --git a/docs/api/terminal.md b/docs/api/terminal.md index f61fdc8..8167bbc 100644 --- a/docs/api/terminal.md +++ b/docs/api/terminal.md @@ -47,19 +47,21 @@ For example if the string `"\u001b[38;2;0;255;0;mA"` was written to the terminal |--------------|--------------------------------------|---------| | [bool] | [bell_muted](#prop-bell_muted) | `false` | | [float] | [bell_cooldown](#prop-bell_cooldown) | `0.1` | -| [int] | [cols](#prop-cols) | `2` | -| [int] | [rows](#prop-rows) | `2` | +| [int] | [cols](#prop-cols) *(deprecated)* | `2` | +| [int] | [rows](#prop-rows) *(deprecated)* | `2` | | [UpdateMode] | [update_mode](#prop-update_mode) | `AUTO` | ## Methods -| Returns | Signature | -|----------|-----------------------------------------------------------------| -| void | [clear](#mthd-clear) **()** | -| [String] | [copy_all](#mthd-copy_all) **()** | -| [String] | [copy_selection](#mthd-copy_selection) **()** | -| void | [write](#mthd-write) **(** [String]\|[PoolByteArray] data **)** | +| Returns | Signature | +|----------|-------------------------------------------------------------------| +| void | [clear](#mthd-clear) **()** | +| [String] | [copy_all](#mthd-copy_all) **()** | +| [String] | [copy_selection](#mthd-copy_selection) **()** | +| [int] | [get_cols](#mthd-get_cols) **()** | +| [int] | [get_rows](#mthd-get_rows) **()** | +| void | [write](#mthd-write) **(** [String] \| [PoolByteArray] data **)** | ## Signals @@ -105,19 +107,6 @@ For example if the string `"\u001b[38;2;0;255;0;mA"` was written to the terminal ## Property Descriptions -- [int] **rows** - - | | | - |-----------|------------| - | *Default* | `2` | - | *Setter* | None | - | *Getter* | None | - - The number of rows in the terminal's rect. - When using a monospace font, this is typically the number of characters that can fit from the top to the bottom. - It will automatically update as the Control's rect_size changes, and therefore shouldn't be used to set the size of the terminal directly. - ---- - [int] **cols** @@ -125,11 +114,23 @@ For example if the string `"\u001b[38;2;0;255;0;mA"` was written to the terminal |-----------|------------| | *Default* | `2` | | *Setter* | None | - | *Getter* | None | + | *Getter* | get_cols() | + + *Deprecated*. This property is deprecated and will be removed in a future version. + Please use [get_cols](#mthd-get_cols) instead. + +--- + +- [int] **rows** ***Deprecated*** + + | | | + |-----------|------------| + | *Default* | `2` | + | *Setter* | None | + | *Getter* | get_rows() | - The number of columns in the terminal's rect. - When using a monospace font, this is typically the number of characters that can fit from one side to another. - It will automatically update as the Control's rect_size changes, and therefore shouldn't be used to set the size of the terminal directly. + *Deprecated*. This property is deprecated and will be removed in a future version. + Please use the [get_rows](#mthd-get_rows) instead. --- @@ -195,6 +196,22 @@ For example if the string `"\u001b[38;2;0;255;0;mA"` was written to the terminal --- +- [int] **get_cols** **()** + + Returns the width of the terminal in characters. + When using a monospace font, this is the number of visible characters that can fit from one side of the terminal to the other in a single row. + It will automatically update according to the terminal's rect_size and theme's font size. + +--- + +- [int] **get_rows** **()** + + Returns the height of the terminal in characters. + When using a monospace font, this is the number of visible characters that can fit from the top of the terminal to the bottom in a single column. + It will automatically update according to the terminal's rect_size and theme's font size. + +--- + - void **write** **(** [String] \| [PoolByteArray] data **)** Writes data to the terminal emulator. Accepts either a [String] or [PoolByteArray]. diff --git a/examples/menu/menu.gd b/examples/menu/menu.gd index 6b66337..05e8db5 100644 --- a/examples/menu/menu.gd +++ b/examples/menu/menu.gd @@ -52,7 +52,7 @@ func _ready(): func draw_all(_size = Vector2.ZERO): - offset = int(floor(($Terminal.cols / 2.0) - (TITLE_WIDTH / 2.0))) + offset = int(floor(($Terminal.get_cols() / 2.0) - (TITLE_WIDTH / 2.0))) tput.reset() row = 5 tput.civis() # Hide the cursor. @@ -94,7 +94,7 @@ func draw_menu(): var item = menu_items[i] if not col_offset: - col_offset = int(floor(($Terminal.cols / 2) - (item.name.length() / 2))) + col_offset = int(floor(($Terminal.get_cols() / 2) - (item.name.length() / 2))) tput.cup(row, offset) diff --git a/test/platform/unix/unix.test.gd b/test/platform/unix/unix.test.gd index c2f8c40..692178c 100644 --- a/test/platform/unix/unix.test.gd +++ b/test/platform/unix/unix.test.gd @@ -212,12 +212,12 @@ class TestPTYSize: assert_eq( stty_rows, - terminal.rows, + terminal.get_rows(), "Expected stty to report correct number of rows for layout '%s'" % s ) assert_eq( stty_cols, - terminal.cols, + terminal.get_cols(), "Expected stty to report correct number of columns for layout '%s'" % s ) diff --git a/test/scenes/basic.gd b/test/scenes/basic.gd index 3621181..841891a 100644 --- a/test/scenes/basic.gd +++ b/test/scenes/basic.gd @@ -4,7 +4,7 @@ onready var terminal = $Terminal func _ready(): - print("terminal size; rows %d; cols %d;" % [terminal.rows, terminal.cols]) + print("terminal size; rows %d; cols %d;" % [terminal.get_rows(), terminal.get_cols()]) terminal.write("h") yield(get_tree().create_timer(1), "timeout") terminal.write(" i")