Format files using GDScript Toolkit

https://github.com/Scony/godot-gdscript-toolkit
This commit is contained in:
Leroy Hopson 2021-05-26 10:39:48 +07:00 committed by Leroy Hopson
parent a0237bb5d5
commit f43149f204
10 changed files with 64 additions and 64 deletions

4
.gitignore vendored
View file

@ -1,4 +1,3 @@
# Godot-specific ignores # Godot-specific ignores
.import/ .import/
export.cfg export.cfg
@ -7,3 +6,6 @@ export_presets.cfg
# Mono-specific ignores # Mono-specific ignores
.mono/ .mono/
data_*/ data_*/
# Python-specific ignores
.venv

View file

@ -37,40 +37,34 @@ func import(source_file, save_path, options, r_platform_variant, r_gen_files):
var err = file.open(source_file, File.READ) var err = file.open(source_file, File.READ)
if err != OK: if err != OK:
return err return err
var header = file.get_line() var header = file.get_line()
var asciicast = Asciicast.new() var asciicast = Asciicast.new()
asciicast.add_track(Animation.TYPE_METHOD, 0) asciicast.add_track(Animation.TYPE_METHOD, 0)
asciicast.track_set_path(0, ".") asciicast.track_set_path(0, ".")
var frame = { var frame = {"time": 0.0, "data": {"method": "write", "args": [PoolByteArray()]}}
"time": 0.0,
"data": {
"method": "write",
"args": [PoolByteArray()]
}
}
while not file.eof_reached(): while not file.eof_reached():
var line = file.get_line() var line = file.get_line()
if line == "": if line == "":
continue continue
var p = JSON.parse(line) var p = JSON.parse(line)
if typeof(p.result) != TYPE_ARRAY: if typeof(p.result) != TYPE_ARRAY:
continue continue
var event_type: String = p.result[1] var event_type: String = p.result[1]
var event_data: PoolByteArray = p.result[2].to_utf8() var event_data: PoolByteArray = p.result[2].to_utf8()
# Asciicast recordings have a resolution of 0.000001, however animation # Asciicast recordings have a resolution of 0.000001, however animation
# track keys only have a resolution of 0.01, therefore we must combine # track keys only have a resolution of 0.01, therefore we must combine
# events that would occur in the same keyframe, otherwise only the last # events that would occur in the same keyframe, otherwise only the last
# event is inserted and the previous events are overwritten. # event is inserted and the previous events are overwritten.
var time = stepify(p.result[0], 0.01) var time = stepify(p.result[0], 0.01)
if event_type == "o": if event_type == "o":
if time == frame.time: if time == frame.time:
asciicast.track_remove_key_at_position(0, time) asciicast.track_remove_key_at_position(0, time)
@ -78,9 +72,9 @@ func import(source_file, save_path, options, r_platform_variant, r_gen_files):
else: else:
frame.time = time frame.time = time
frame.data.args = [event_data] frame.data.args = [event_data]
asciicast.track_insert_key(0, frame.time, frame.data) asciicast.track_insert_key(0, frame.time, frame.data)
asciicast.length = frame.time asciicast.length = frame.time
return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], asciicast) return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], asciicast)

View file

@ -1,21 +1,20 @@
tool tool
extends EditorPlugin extends EditorPlugin
var asciicast_import_plugin var asciicast_import_plugin
func _enter_tree(): func _enter_tree():
asciicast_import_plugin = preload("res://addons/godot_xterm/import_plugins/asciicast_import_plugin.gd").new() asciicast_import_plugin = preload("res://addons/godot_xterm/import_plugins/asciicast_import_plugin.gd").new()
add_import_plugin(asciicast_import_plugin) add_import_plugin(asciicast_import_plugin)
var asciicast_script = preload("res://addons/godot_xterm/resources/asciicast.gd") var asciicast_script = preload("res://addons/godot_xterm/resources/asciicast.gd")
add_custom_type("Asciicast", "Animation", asciicast_script, null) add_custom_type("Asciicast", "Animation", asciicast_script, null)
var terminal_script = preload("res://addons/godot_xterm/nodes/terminal/terminal.gdns") var terminal_script = preload("res://addons/godot_xterm/nodes/terminal/terminal.gdns")
var terminal_icon = preload("res://addons/godot_xterm/nodes/terminal/terminal_icon.svg") var terminal_icon = preload("res://addons/godot_xterm/nodes/terminal/terminal_icon.svg")
add_custom_type("Terminal", "Control", terminal_script, terminal_icon) add_custom_type("Terminal", "Control", terminal_script, terminal_icon)
var pseudoterminal_script = preload("res://addons/godot_xterm/nodes/pseudoterminal/pseudoterminal.gdns") var pseudoterminal_script = preload("res://addons/godot_xterm/nodes/pseudoterminal/pseudoterminal.gdns")
var pseudoterminal_icon = preload("res://addons/godot_xterm/nodes/pseudoterminal/pseudoterminal_icon.svg") var pseudoterminal_icon = preload("res://addons/godot_xterm/nodes/pseudoterminal/pseudoterminal_icon.svg")
add_custom_type("Pseudoterminal", "Node", pseudoterminal_script, pseudoterminal_icon) add_custom_type("Pseudoterminal", "Node", pseudoterminal_script, pseudoterminal_icon)
@ -24,7 +23,7 @@ func _enter_tree():
func _exit_tree(): func _exit_tree():
remove_import_plugin(asciicast_import_plugin) remove_import_plugin(asciicast_import_plugin)
asciicast_import_plugin = null asciicast_import_plugin = null
remove_custom_type("Asciicast") remove_custom_type("Asciicast")
remove_custom_type("Terminal") remove_custom_type("Terminal")
remove_custom_type("Psuedoterminal") remove_custom_type("Psuedoterminal")

View file

@ -1,14 +1,13 @@
extends Animation extends Animation
signal data_written(data) signal data_written(data)
signal data_read(data) signal data_read(data)
export(int) var version: int = 2 export (int) var version: int = 2
# Initial terminal width (number of columns). # Initial terminal width (number of columns).
export(int) var width: int export (int) var width: int
# Initial terminal height (number of rows). # Initial terminal height (number of rows).
export(int) var height: int export (int) var height: int
func get_class() -> String: func get_class() -> String:
@ -20,4 +19,4 @@ func is_class(name) -> bool:
func _init(): func _init():
step = 0.01 # Parent override. step = 0.01 # Parent override.

View file

@ -11,7 +11,6 @@ const CURSOR_LEFT = "\u001b[D"
const DEFAULT_FOREGROUND_COLOR = "\u001b[0m" const DEFAULT_FOREGROUND_COLOR = "\u001b[0m"
var terminal var terminal
@ -24,12 +23,13 @@ func write_string(string: String, color: Color = Color.white) -> void:
if color: if color:
var fg = "\u001b[38;2;%d;%d;%dm" % [color.r8, color.g8, color.b8] var fg = "\u001b[38;2;%d;%d;%dm" % [color.r8, color.g8, color.b8]
terminal.write(fg.to_utf8()) terminal.write(fg.to_utf8())
terminal.write(string.to_utf8()) terminal.write(string.to_utf8())
# Reset color back to default. # Reset color back to default.
terminal.write("\u001b[0m".to_utf8()) terminal.write("\u001b[0m".to_utf8())
# tput_* functions based on the tput command. # tput_* functions based on the tput command.
# See: https://man7.org/linux/man-pages/man1/tput.1.html for more info. # See: https://man7.org/linux/man-pages/man1/tput.1.html for more info.

View file

@ -5,7 +5,7 @@ extends Container
const ESCAPE = 27 const ESCAPE = 27
const BACKSPACE = 8 const BACKSPACE = 8
const BEEP = 7 const BEEP = 7
const SPACE = 32 const SPACE = 32
const LEFT_BRACKET = 91 const LEFT_BRACKET = 91
const ENTER = 10 const ENTER = 10
@ -13,6 +13,7 @@ const BACKSPACE_ALT = 127
onready var viewport = get_viewport() onready var viewport = get_viewport()
func _ready(): func _ready():
viewport.connect("size_changed", self, "_resize") viewport.connect("size_changed", self, "_resize")
_resize() _resize()
@ -24,9 +25,9 @@ func _input(event):
if event is InputEventKey and event.pressed: if event is InputEventKey and event.pressed:
var data = PoolByteArray([]) var data = PoolByteArray([])
accept_event() accept_event()
# TODO: Handle more of these. # TODO: Handle more of these.
if (event.control and event.scancode == KEY_C): if event.control and event.scancode == KEY_C:
data.append(3) data.append(3)
elif event.unicode: elif event.unicode:
data.append(event.unicode) data.append(event.unicode)

View file

@ -17,9 +17,9 @@ const TITLE = """
const TITLE_WIDTH = 42 const TITLE_WIDTH = 42
var menu_items := [ var menu_items := [
{ "name": "Asciicast", "scene": preload("../asciicast/asciicast.tscn") }, {"name": "Asciicast", "scene": preload("../asciicast/asciicast.tscn")},
{ "name": "Terminal", "scene": preload("../terminal/terminal.tscn") }, {"name": "Terminal", "scene": preload("../terminal/terminal.tscn")},
{ "name": "Exit"} {"name": "Exit"}
] ]
var selected_index := 0 var selected_index := 0
@ -42,7 +42,7 @@ func draw_all(_size = Vector2.ZERO):
offset = int(floor(($Terminal.cols / 2.0) - (TITLE_WIDTH / 2.0))) offset = int(floor(($Terminal.cols / 2.0) - (TITLE_WIDTH / 2.0)))
tput.reset() tput.reset()
row = 5 row = 5
tput.civis() # Hide the cursor. tput.civis() # Hide the cursor.
draw_title() draw_title()
draw_menu() draw_menu()
tput.sgr0() tput.sgr0()
@ -51,55 +51,54 @@ func draw_all(_size = Vector2.ZERO):
func draw_title(): func draw_title():
tput.cup(row, 0) tput.cup(row, 0)
for line in TITLE.split("\r"): for line in TITLE.split("\r"):
row += 1 row += 1
tput.cup(row, offset) tput.cup(row, offset)
$Terminal.write(line) $Terminal.write(line)
# Get the plugin version from the plugin's config file. # Get the plugin version from the plugin's config file.
var config = ConfigFile.new() var config = ConfigFile.new()
var err = config.load("res://addons/godot_xterm/plugin.cfg") var err = config.load("res://addons/godot_xterm/plugin.cfg")
if err == OK: if err == OK:
$Terminal.write("\n") $Terminal.write("\n")
$Terminal.write("Version: %s" % config.get_value("plugin", "version", $Terminal.write("Version: %s" % config.get_value("plugin", "version", "unknown"))
"unknown"))
row += 2 row += 2
func draw_menu(): func draw_menu():
if not menu_start_row: if not menu_start_row:
menu_start_row = row + 1 menu_start_row = row + 1
row = menu_start_row row = menu_start_row
var col_offset: int var col_offset: int
for i in range(menu_items.size()): for i in range(menu_items.size()):
row += 1 row += 1
var item = menu_items[i] var item = menu_items[i]
if not col_offset: if not col_offset:
col_offset = int(floor(($Terminal.cols / 2) - (item.name.length() / 2))) col_offset = int(floor(($Terminal.cols / 2) - (item.name.length() / 2)))
tput.cup(row, offset) tput.cup(row, offset)
if selected_index == i: if selected_index == i:
tput.setab(Color("#FF7500")) tput.setab(Color("#FF7500"))
tput.setaf(Color.black) tput.setaf(Color.black)
$Terminal.write("%s. %s" % [i + 1, item.name]) $Terminal.write("%s. %s" % [i + 1, item.name])
if selected_index == i: if selected_index == i:
tput.sgr0() tput.sgr0()
func _on_Terminal_key_pressed(data: String, event: InputEventKey) -> void: func _on_Terminal_key_pressed(data: String, event: InputEventKey) -> void:
match(data): match data:
TPut.CURSOR_UP: # Up arrow key TPut.CURSOR_UP: # Up arrow key
selected_index = int(clamp(selected_index - 1, 0, menu_items.size() - 1)) selected_index = int(clamp(selected_index - 1, 0, menu_items.size() - 1))
draw_menu() draw_menu()
TPut.CURSOR_DOWN: # Down arrow key TPut.CURSOR_DOWN: # Down arrow key
selected_index = int(clamp(selected_index + 1, 0, menu_items.size() - 1)) selected_index = int(clamp(selected_index + 1, 0, menu_items.size() - 1))
draw_menu() draw_menu()
"1": "1":
@ -111,17 +110,16 @@ func _on_Terminal_key_pressed(data: String, event: InputEventKey) -> void:
"3": "3":
selected_index = 2 selected_index = 2
draw_menu() draw_menu()
# We can also match against the raw InputEventKey. # We can also match against the raw InputEventKey.
if event.scancode == KEY_ENTER: if event.scancode == KEY_ENTER:
var item = menu_items[selected_index] var item = menu_items[selected_index]
match item.name: match item.name:
"Asciicast": "Asciicast":
var scene = item.scene.instance() var scene = item.scene.instance()
var animation_player: AnimationPlayer = scene.get_node("AnimationPlayer") var animation_player: AnimationPlayer = scene.get_node("AnimationPlayer")
scene.connect("key_pressed", self, "_on_Asciicast_key_pressed", scene.connect("key_pressed", self, "_on_Asciicast_key_pressed", [animation_player])
[animation_player])
get_tree().get_root().add_child(scene) get_tree().get_root().add_child(scene)
visible = false visible = false
scene.grab_focus() scene.grab_focus()
@ -132,9 +130,15 @@ func _on_Terminal_key_pressed(data: String, event: InputEventKey) -> void:
scene.queue_free() scene.queue_free()
"Terminal": "Terminal":
if OS.get_name() == "Windows": if OS.get_name() == "Windows":
return OS.call_deferred("alert", "Psuedoterminal node currently" return OS.call_deferred(
"alert",
(
"Psuedoterminal node currently"
+ " uses pty.h but needs to use either winpty or conpty" + " uses pty.h but needs to use either winpty or conpty"
+ " to work on Windows.", "Terminal not Supported on Windows") + " to work on Windows."
),
"Terminal not Supported on Windows"
)
var scene = item.scene.instance() var scene = item.scene.instance()
var pty = scene.get_node("Pseudoterminal") var pty = scene.get_node("Pseudoterminal")
get_tree().get_root().add_child(scene) get_tree().get_root().add_child(scene)
@ -148,7 +152,8 @@ func _on_Terminal_key_pressed(data: String, event: InputEventKey) -> void:
get_tree().quit() get_tree().quit()
func _on_Asciicast_key_pressed(data: String, _event: InputEventKey, func _on_Asciicast_key_pressed(
animation_player: AnimationPlayer) -> void: data: String, _event: InputEventKey, animation_player: AnimationPlayer
) -> void:
if data == "\u001b": if data == "\u001b":
animation_player.emit_signal("animation_finished") animation_player.emit_signal("animation_finished")

View file

@ -25,4 +25,5 @@ __meta__ = {
} }
rows = 31 rows = 31
cols = 102 cols = 102
[connection signal="key_pressed" from="Terminal" to="." method="_on_Terminal_key_pressed"] [connection signal="key_pressed" from="Terminal" to="." method="_on_Terminal_key_pressed"]

View file

@ -1,7 +1,6 @@
extends Node extends Node
func _on_Terminal_key_pressed(event: InputEventKey, data: PoolByteArray): func _on_Terminal_key_pressed(event: InputEventKey, data: PoolByteArray):
print(data as Array) print(data as Array)
print(event.scancode) print(event.scancode)