mirror of
https://github.com/git-learning-game/oh-my-git.git
synced 2024-12-22 20:32:38 +01:00
Basic completion framework
This commit is contained in:
parent
df0215a8ab
commit
ed56385d14
2 changed files with 79 additions and 9 deletions
55
terminal.gd
55
terminal.gd
|
@ -5,11 +5,12 @@ var thread
|
|||
var history = []
|
||||
var history_position = 0
|
||||
|
||||
onready var input = $Control/InputLine/Input
|
||||
onready var output = $Control/Output
|
||||
onready var input = $VBoxContainer/InputLine/Input
|
||||
onready var output = $VBoxContainer/TopHalf/Output
|
||||
onready var completions = $VBoxContainer/TopHalf/Completions
|
||||
export(NodePath) var repository_path
|
||||
onready var repository = get_node(repository_path)
|
||||
onready var command_dropdown = $Control/InputLine/CommandDropdown
|
||||
onready var command_dropdown = $VBoxContainer/InputLine/CommandDropdown
|
||||
onready var main = get_tree().get_root().get_node("Main")
|
||||
|
||||
var premade_commands = [
|
||||
|
@ -89,3 +90,51 @@ func editor_closed():
|
|||
func check_win_condition():
|
||||
if repository.shell.run("bash /tmp/win 2>/dev/null >/dev/null && echo yes || echo no") == "yes\n":
|
||||
main.show_win_status()
|
||||
|
||||
func regenerate_completions_menu(new_text):
|
||||
var comp = generate_completions(new_text)
|
||||
|
||||
completions.clear()
|
||||
|
||||
var filtered_comp = []
|
||||
for c in comp:
|
||||
if c != new_text:
|
||||
filtered_comp.push_back(c)
|
||||
|
||||
if filtered_comp.size() == 0:
|
||||
completions.hide()
|
||||
else:
|
||||
completions.show()
|
||||
|
||||
var _root = completions.create_item()
|
||||
for c in filtered_comp:
|
||||
var child = completions.create_item()
|
||||
child.set_text(0, c)
|
||||
|
||||
func generate_completions(command):
|
||||
if command.substr(0, 4) == "git ":
|
||||
var rest = command.substr(4)
|
||||
var subcommands = [
|
||||
"commit",
|
||||
"status",
|
||||
"diff",
|
||||
]
|
||||
|
||||
var results = []
|
||||
for sc in subcommands:
|
||||
if sc.substr(0, rest.length()) == rest:
|
||||
results.push_back("git "+sc)
|
||||
|
||||
return results
|
||||
return []
|
||||
|
||||
func _input_changed(new_text):
|
||||
call_deferred("regenerate_completions_menu", new_text)
|
||||
|
||||
func _completion_selected():
|
||||
var item = completions.get_selected()
|
||||
input.text = item.get_text(0)
|
||||
input.emit_signal("text_changed", input.text)
|
||||
#completions.hide()
|
||||
input.grab_focus()
|
||||
input.caret_position = input.text.length()
|
||||
|
|
|
@ -27,27 +27,46 @@ __meta__ = {
|
|||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Control" type="VBoxContainer" parent="."]
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Output" type="RichTextLabel" parent="Control"]
|
||||
[node name="TopHalf" type="Control" parent="VBoxContainer"]
|
||||
margin_right = 1920.0
|
||||
margin_bottom = 1045.0
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Output" type="RichTextLabel" parent="VBoxContainer/TopHalf"]
|
||||
margin_top = 4.0
|
||||
margin_right = 1920.0
|
||||
margin_bottom = 1045.0
|
||||
size_flags_vertical = 3
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
custom_fonts/normal_font = ExtResource( 4 )
|
||||
scroll_following = true
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="InputLine" type="HBoxContainer" parent="Control"]
|
||||
[node name="Completions" type="Tree" parent="VBoxContainer/TopHalf"]
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_top = -223.0
|
||||
hide_root = true
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="InputLine" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 1049.0
|
||||
margin_right = 1920.0
|
||||
margin_bottom = 1080.0
|
||||
|
||||
[node name="Input" type="LineEdit" parent="Control/InputLine"]
|
||||
[node name="Input" type="LineEdit" parent="VBoxContainer/InputLine"]
|
||||
margin_right = 1892.0
|
||||
margin_bottom = 31.0
|
||||
size_flags_horizontal = 3
|
||||
|
@ -56,7 +75,7 @@ __meta__ = {
|
|||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="CommandDropdown" type="MenuButton" parent="Control/InputLine"]
|
||||
[node name="CommandDropdown" type="MenuButton" parent="VBoxContainer/InputLine"]
|
||||
margin_left = 1896.0
|
||||
margin_right = 1920.0
|
||||
margin_bottom = 31.0
|
||||
|
@ -86,6 +105,8 @@ mouse_filter = 1
|
|||
syntax_highlighting = false
|
||||
|
||||
[node name="TCPServer" parent="." instance=ExtResource( 3 )]
|
||||
[connection signal="text_entered" from="Control/InputLine/Input" to="." method="send_command"]
|
||||
[connection signal="item_selected" from="VBoxContainer/TopHalf/Completions" to="." method="_completion_selected"]
|
||||
[connection signal="text_changed" from="VBoxContainer/InputLine/Input" to="." method="_input_changed"]
|
||||
[connection signal="text_entered" from="VBoxContainer/InputLine/Input" to="." method="send_command"]
|
||||
[connection signal="pressed" from="ClearButton" to="." method="clear"]
|
||||
[connection signal="data_received" from="TCPServer" to="." method="receive_output"]
|
||||
|
|
Loading…
Reference in a new issue