As cols and rows are read only (i.e. automatically determined by rect
and font size) there is no need for the properties to be exposed.
Instead, users can get the calculated cols and rows using the get_cols()
and get_rows() methods.
Changes `write()` method of native pipe and terminal to accept a
PoolByteArray rather than String. This means that `get_string_from_utf8()`
is no longer called on data coming from PTY and being sent to Terminal.
The terminal state machine already has a UTF8 parser which maintains
its state across calls to `write()`. This means that we can write half
the bytes of a single unicode character in one call and the remaining half
in the next call and the state machine will parse it correctly.
On the other hand, the `get_string_from_utf8()` method of Godot's
PoolByteArray requires that the array contains completely valid UTF8,
otherwise we get errors such as "Unicode error: invalid skip".
The data coming from PTY can be arbitrarily split in the middle of a
unicode character meaning that we will sometimes get errors when calling
`get_string_from_utf8()` on it. This is more likely to occur when there
is a large amount of output (i.e. it's more likely to be split). In other
cases, the data might intentionally contain invalid unicode such as when
printing binary files or random data (e.g. `cat /bin/sh`, `cat /dev/random`).
We avoid these errors by passing the PoolByteArray data directly to the terminal
state machine.
In addition to fixing unicode errors, this commit:
- Prevents repeated calls to pipes `_read_cb()` method that would block Godot
and result in a crash with the message "ERROR: All memory pool allocations
are in use" that resulted from writing data to an ever-increasing number of
PoolByteArrays before any of them could be freed. This could be triggered by
running the `cat /dev/urandom` command after making the change to `write()`
mentioned above.
- Prevents memory leaks by freeing libuv buffers after they have been copied
to PoolByteArrays.
Fixes#55.
If a PTY has a terminal_path set to a valid Terminal, then ensure that
the initial cols and rows of PTY match the cols and rows of the Terminal
when calling fork() or open(), otherwise PTY will output wrong-sized
data for the Terminal until resized.
Fixes#56.
PTY now provides a public interface to an underlying instance of
PTYNative. The PTYNative class can be extended as appropriate for
each platform and the platform-specific implementation will be
selected by PTY at runtime.
Prevents scrollback buffer reset (i.e. scrolling to the bottom of
terminal output) when pressing modifier keys in isolation or when
copying text using the shortcut Ctrl+Shift+C.
Fixes error that would sometimes occur when closing the Terminal after
calling write() but before the VisualServer had finished drawing the
current frame.
De-references pty_baton's exit callback after it is called so it can be
automatically released, preventing leaked instances.
Adds basic implementation for Pipe's get_status() method and forces PTY
to wait for child process to exit to ensure exit callback is cleaned up.
Adds a test to check that exit callback is still called as usual.
Commit GUT directly to the git repo and remove gd-plug as it is no
longer required to install GUT.
Modify GUT to be used by command-line only.
For example:
```
cp test/.gutconfig.ci.json .gutconfig.json
godot --no-window -s addons/gut/gut_cmdln.gd
```
Often when closing a terminal in the terminal panel the error message
'Condition "!obj" is true.' would be printed to console.
This was due to the call_funcv() method being called on an invalid
FuncRef instance (invalid because it had already been deleted or queued
for delection).
Now we check the instance is valid before calling the method.
There is no current public use for this type and it would appear in every
resource dropdown.
While this type is no longer exposed publically by the plugin it is still
used internally by terminal_panel.
Adds support for building Linux binaries inside a docker container in
order to target an older version of GLIBC.
Updates GitHub Actions workflow to use it.
As a result the minimum version of GLIBC that Linux users need to have
installed on their system is 2.17 which was released in 2012.
Makes for pretty paths when extending scripts:
`extends "res://addons/godot_xterm/terminal.gd"`
vs.
`extends "res://addons/godot_xterm/nodes/terminal/terminal.gd"`
Currently "res://addons/godot_xterm/pty.gd" is acutally `pty_unix.gd`.
This is okay for now as the PTY node is only supported on Unix
platforms. However, we will need to sort it out when adding Windows
support as part of #25.
Also remove the GDXterm namespace.
- Don't add the bell to the archive to keep it small a simplify
licensing. Also bells seem to be rarely used with terminal emulators.
- Don't play the bell directly from the Terminal node by adding an
AudioStreamPlayer, but make it easy to tune the "bell" signal behavior
from the Terminal node so that only an AudioStreamPlayer node's play()
method needs to be connected to it.
- Keep the bell.wav sound around for testing/demo.
Keeps the archive small and licensing simpler.
Keep around the fancy fonts such as Noto Color Emoji and Unifont as they
are useful for testing.
With the xrdb import plugin making it easy to import themes, there is
little point in keeping other pre-defined themes around, so remove
these.
Will fallback to using Regular Terminal font for Bold, Italic, and Bold
Italic styles if they are not defined. Will only fallback to using the
default theme font if even Regular is not defined.
Replaces default.tres, default_dark.tres, and default_light.tres, with
default.tres and default_light.tres based on Godot's default dark and
light editor themes respectively.
Closes#44
Currently tests only run on X11.64 platform.
But other platforms can be supported with a bit of effort.
Remove default bell sound as it does not play nicely with CI environment
that does not have sound card.
Currently only works when building with debug target. On GitHub actions
target release results in linking errors. So disable PTY for release
builds.
Part of #25.