Skip to content
This repository has been archived by the owner on Sep 20, 2023. It is now read-only.

[waiting] Add scripting support #262

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

Akida31
Copy link
Contributor

@Akida31 Akida31 commented Jun 14, 2021

Status

Dieser PR ist zur Zeit stillgelegt. In einer zukünftigen Version wird der scripting support wahrscheinlich hinzugefügt.

Hintergrund

Cryptic soll ein Spiel sein, in dem einerseits die Grundlagen, andererseits auch (teilweise) realistische erweiterte Kenntnisse erworben werden können.
Da eine Shell/ das Terminal normalerweise sehr viele Möglichkeiten bietet und in manchen Fällen auch vor grafischen Oberflächen bevorzugt wird, ist es sinnvoll, eine realitätsnahe Shell zur Verfügung zu stellen, damit erlernte Fähigkeiten auf die Wirklichkeit übertragen werden können.
Die derzeitige Implementation hat nur einige Nachteile, die effektives Scripting verhindern. Diese Nachteile sollen abgebaut werden, sodass die Shell mehr Möglichkeiten bietet.

Orientierung

Die Veränderungen sind an der POSIX shell und der derzeitigen Implementation orientiert.

Änderungen

Zur Zeit sind folgenden Änderungen gemacht worden:

  • Es können nun mehrere Commands hintereinander ausgeführt werden. Dafür müssen diese durch ; oder eine neuen Zeile getrennt sein
  • Alle Commands enden nun mit einem Exit-Code, der angibt, ob der Command erfolgreich ausgeführt wurde
  • Variablen: Variablen können mit set (siehe unten) gesetzt werden und werden im Folgenden ersetzt: $variable wird zu variableWert (wenn der Wert von variable variableWert ist)
  • Spezielle Variablen (zur Zeit für Skripte):
    • $#: Anzahl der Argumente
    • $0: Programmname
    • $1 bis $9: Argumente 1 bis maximal 9
    • $* oder $@: Alle Argumente, getrennt mit
    • $?: Exit-Code des vorigen Programmes
  • Command run hinzugefügt; führt eine Datei zeilenweise aus
  • Command set hinzugefügt: setzt eine Variable
  • Command read hinzugefügt: liest input in eine Variable ein
  • Command echo hinzugefügt: gibt Text aus
  • Statt normalem Output gibt es nun Stdout (für normale Ausgabe) und Stderr (für Fehler)
  • Commands können nun Nutzer-Eingaben durch Stdin erhalten
  • Piping:
    • Commands können mit | getrennt werden, dann wird der Stdout des vorigen Commands nicht ausgegeben, sondern zum Stdin des folgenden Commands
    • Beispiel: echo 1 | read a. Echo gibt 1 aus, das wird der Stdin für read, das dann in die Variable a eingelesen wird

WIP

  • Die derzeitige Lösung mit dem Warten auf das Ende des Commands ist nicht wirklich elegant, einfacher wäre es, die Commands als async fn umzuschreiben und den Exit-Code als Rückgabewert der Funktion zu sehen. Dies erfordert aber ein Umschreiben von sehr vielen Commands
  • Refactoring aus der einen großen Datei in mehrere kleinere
  • Die bisher verwendete Möglichkeit von Subcommands und Argumenten ist nicht schön. Deswegen sollten die Commands einen Argparser verwenden können.

geplante Änderungen/ TODO

  • Stdout ist zur Zeit nervig, zu benutzen, da es mehrere Ausgabemöglichkeiten gibt (Raw, Html, Text, Node). Deswegen sollen die Ausgabemöglichkeiten auf Text reduziert werden. Damit das möglich ist, müssen folgende Voraussetzungen geschaffen werden:
    • Unterstützung spezieller Characters wie \t (kann für Formatierungen benutzt werden)
    • Escape Sequenzen: Zur Formatierung von Text wie Schrifttyp (Kursiv, Fett) und Farben. Das sollte eine einfache Ersetzung von Sequenz zu HTML sein
  • Hinzufügen von Kontrollstrukturen wie Schleifen und Vergleichen

@Tristan-H11 Tristan-H11 linked an issue Mar 6, 2022 that may be closed by this pull request
@Tristan-H11
Copy link
Member

There were many updates on the master branch. Including the Angular 13 Update! Consider updating your Pull Request. :)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

autocomplete after the first word
2 participants