feat(editor): make editor terminal functional

This commit is contained in:
Leroy Hopson 2024-04-07 12:28:00 +12:00
parent ad2dc46414
commit 5c151c3244
No known key found for this signature in database
GPG key ID: D2747312A6DB51AA
2 changed files with 28 additions and 27 deletions

View file

@ -13,7 +13,8 @@ var editor_settings: EditorSettings
func _set_terminal_colors(color_map: Dictionary) -> void: func _set_terminal_colors(color_map: Dictionary) -> void:
for key in color_map.keys(): for key in color_map.keys():
var val: String = color_map[key] var val: String = color_map[key]
var color: Color = editor_settings.get_setting("text_editor/highlighting/%s" % val) var editor_color = editor_settings.get_setting("text_editor/theme/highlighting/%s" % val)
var color: Color = editor_color if editor_color else Color.BLACK
add_theme_color_override(key, color) add_theme_color_override(key, color)
@ -26,35 +27,35 @@ func _ready():
# better to use a dedicated terminal theme, rather than relying on this. # better to use a dedicated terminal theme, rather than relying on this.
_set_terminal_colors( _set_terminal_colors(
{ {
"ansi_0_color": "completion_background_color",
"ansi_1_color": "keyword_color",
"ansi_2_color": "gdscript/node_path_color",
"ansi_3_color": "string_color",
"ansi_4_color": "function_color",
"ansi_5_color": "symbol_color",
"ansi_6_color": "gdscript/function_definition_color",
"ansi_7_color": "text_color",
"ansi_8_color": "comment_color",
"ansi_9_color": "breakpoint_color",
"ansi_10_color": "base_type_color",
"ansi_11_color": "search_result_color",
"ansi_12_color": "member_variable_color",
"ansi_13_color": "code_folding_color",
"ansi_14_color": "user_type_color",
"ansi_15_color": "text_selected_color",
"background_color": "background_color", "background_color": "background_color",
"foreground_color": "caret_color", "foreground_color": "text_color",
"ansi_0_color": "caret_background_color",
"ansi_1_color": "brace_mismatch_color",
"ansi_2_color": "gdscript/node_reference_color",
"ansi_3_color": "executing_line_color",
"ansi_4_color": "bookmark_color",
"ansi_5_color": "control_flow_keyword_color",
"ansi_6_color": "engine_type_color",
"ansi_7_color": "comment_color",
"ansi_8_color": "completion_background_color",
"ansi_9_color": "keyword_color",
"ansi_10_color": "base_type_color",
"ansi_11_color": "string_color",
"ansi_12_color": "function_color",
"ansi_13_color": "gdscript/global_function_color",
"ansi_14_color": "gdscript/function_definition_color",
"ansi_15_color": "caret_color",
} }
) )
func _input(event): func _input(event):
if has_focus() and event is InputEventKey and event.is_pressed(): if has_focus() and event is InputEventKey and event.is_pressed():
if event.ctrl_pressed and event.scancode in [KEY_PAGEUP, KEY_PAGEDOWN]: if event.ctrl_pressed and event.keycode in [KEY_PAGEUP, KEY_PAGEDOWN]:
# Handled by switch tabs shortcut. # Handled by switch tabs shortcut.
return return
if event.control and event.shift: if event.ctrl_pressed and event.shift_pressed:
# Not handled by terminal. # Not handled by terminal.
return return
@ -70,8 +71,6 @@ func _input(event):
# "propagated shortcuts" consisting of an array of shortcut editor setting strings. # "propagated shortcuts" consisting of an array of shortcut editor setting strings.
# For example "editor/save_scene" which saves the scene and by default maps to 'Ctrl + S'. # For example "editor/save_scene" which saves the scene and by default maps to 'Ctrl + S'.
# Then any shortcut events listed here can be handled by the terminal *and* the editor. # Then any shortcut events listed here can be handled by the terminal *and* the editor.
get_tree().set_input_as_handled()
_gui_input(event)
func _on_PTY_exited(exit_code: int, signum: int): func _on_PTY_exited(exit_code: int, signum: int):

View file

@ -1,8 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://bkcyv0w3setep"] [gd_scene load_steps=3 format=3 uid="uid://bkcyv0w3setep"]
[ext_resource type="Script" path="res://addons/godot_xterm/editor_plugins/terminal/editor_terminal.gd" id="1"] [ext_resource type="Script" path="res://addons/godot_xterm/editor_plugins/terminal/editor_terminal.gd" id="1"]
[ext_resource type="Theme" uid="uid://0gk8swmcldbg" path="res://themes/demo.tres" id="1_h7osn"] [ext_resource type="Theme" uid="uid://0gk8swmcldbg" path="res://themes/demo.tres" id="1_h7osn"]
[ext_resource type="Script" path="res://addons/godot_xterm/pty.gd" id="2"]
[node name="Terminal" type="Terminal"] [node name="Terminal" type="Terminal"]
anchors_preset = 15 anchors_preset = 15
@ -16,10 +15,13 @@ focus_mode = 1
theme = ExtResource("1_h7osn") theme = ExtResource("1_h7osn")
script = ExtResource("1") script = ExtResource("1")
[node name="PTY" type="Node" parent="."] [node name="PTY" type="PTY" parent="."]
script = ExtResource("2") cols = 128
rows = 32
terminal_path = NodePath("..") terminal_path = NodePath("..")
[node name="Bell" type="AudioStreamPlayer" parent="."] [node name="Bell" type="AudioStreamPlayer" parent="."]
[connection signal="exited" from="PTY" to="." method="_on_PTY_exited"] [connection signal="data_sent" from="." to="PTY" method="write"]
[connection signal="size_changed" from="." to="PTY" method="resizev"]
[connection signal="data_received" from="PTY" to="." method="write"]