oh-my-git/terminal.gd
Sebastian Morr 579f18736a Introduce Shell class with a cd method and a run method
game.exec is now the only point in the code that calls OS.execute.
shell.run is the only point that refers to /bin/sh.
2020-09-08 16:08:40 +02:00

40 lines
1.1 KiB
GDScript

extends Control
var thread
var history = []
var history_position = 0
onready var input = $Control/Input
onready var output = $Control/Output
onready var repo = $"../Repositories/ActiveRepository"
func _input(event):
if history.size() > 0:
if event.is_action_pressed("ui_up"):
if history_position > 0:
history_position -= 1
input.text = history[history_position]
input.caret_position = input.text.length()
# This prevents the Input taking the arrow as a "skip to beginning" command.
get_tree().set_input_as_handled()
if event.is_action_pressed("ui_down"):
if history_position < history.size()-1:
history_position += 1
input.text = history[history_position]
input.caret_position = input.text.length()
get_tree().set_input_as_handled()
func send_command(command):
history.push_back(command)
history_position = history.size()
thread = Thread.new()
thread.start(self, "run_command_in_a_thread", command)
func run_command_in_a_thread(command):
var o = repo.shell.run(command)
input.text = ""
output.text = output.text + "$ " + command + "\n" + o
repo.update_everything() # FIXME