RevBank 5

RevBank is bij versie 5 aangekomen, met een paar wijzigingen om de “geavanceerde” modus nog wat meer op een unix shell te laten lijken. In de “simpele” modus waarbij je na een commando op enter drukt, merk je niks van de veranderingen.

  • Je kan nu quotes en escapes gebruiken, en dus spaties in omschrijvingen doen: give lasercutter 12,50 "onmeunig gelaserd" of give lasercutter 12.50 onmeunig\ gelaserd. Om een letterlijke \ in een tekst te krijgen, moet je die nu escapen met nog eentje: \\. (Er is geen betekenisverschil tussen '' en "".)
  • Tussen commando’s op dezelfde regel wordt nu een ; verwacht als een commando parameters heeft (deposit 10 cash; Juerd).
  • Er wordt ook een ; verwacht als je meerdere transacties doet (bbq foo; bbq bar; bbq baz).
  • Je moet nu een reden opgeven bij give, maar de reden mag leeg zijn (opgeven als x of "").
  • (Eigenlijk al in 4.3.0) Je kunt nu simpele rekensommetjes met + en - gebruiken op plekken waar een bedrag wordt verwacht: donate 40+2. Dat is vooral handig als je een take doet voor avondeten dat bij verschillende winkels is ingekocht.

;

De puntkomma is er om sommige gebruikersfouten op te vangen, zoals wanneer je 2 takes op 1 regel doet en de omschrijving vergeet (bijv. take foo 42 take bar 42 baz betekent take foo 42 "take"; bar; 42; baz waardoor er 42 € van foo naar bar wordt overgemaakt in plaats van 42 € van foo naar baz en 42 € van bar naar baz. (En vroeger deed dat ook nog een donatie van 42 € vanaf de account van baz.)

Als je de oude manier zonder puntkomma gebruikt, krijg je een melding en een extra prompt. Hopelijk hebben mensen zo sneller door dat er iets anders dreigt te gaan gebeuren dan bedoeld.

In principe mag na elk commando een puntkomma, maar op z’n Javascripts mag je het in sommige situaties weglaten. Zo kun je MagnumAlmond; goedbezig; doen, maar MagnumAlmond goedbezig blijft ook gewoon werken.

sysadmins opgelet

Intern verandert er nog iets meer. Beheer je een RevBank-installatie, check dan absoluut https://github.com/revspace/revbank/blob/master/UPGRADING.md voordat je upgradet. (Moet je sowieso altijd even bekijken.)

Overigens heb ik er heel bewust voor gekozen om de invoer niet daadwerkelijk als een klassieke unix-shell te parsen. “Werkt niet zoals ik van 'n shell verwacht” is dus een feature, geen een bug :slight_smile:

In RevBank wordt quoting alleen ondersteund rondom een compleet argument, niet in het midden ergens van. Quotes tussen ongequote woorden doen namelijk overal wat anders, en zijn daarom verwarrend. Terwijl het met spaties rondom de aanhalingstekens overal hetzelfde werkt:

taal foo"bar"baz foo "bar" baz
(geen)¹ "foo" "bar" "baz" "foo" "bar" "baz"
sh "foobarbaz" "foo" "bar" "baz"
tcl "foo\"bar\"baz" "foo" "bar" "baz"
revbank foutmelding en herkansing "foo" "bar" "baz"

¹ O.a. C, Awk, en Haskell werken qua syntaxis wel zo dat foo"bar"baz hetzelfde is als foo "bar" baz, maar foo en baz zijn dan variabelen.

Verder is er geen betekenisverschil tussen enkele en dubbele aanhalingstekens in RevBank.

Tot slot worden escapes zoals \n totaal genegeerd, dat is gewoon een n. Er is in RevBank geen (geldige :P) reden voor newlines en andere control characters. Hackalot heeft een plausibele use case voor escapes zoals \n (labels printen met newlines), en nu is \n wel een newline, \r een carriage return, \t een tab, \a een piepje (alarm), en \0 een nullbyte. In principe wordt alle invoer met deze tekens geweigerd om ellende te voorkomen; een plugin die ermee kan dealen kan dat expliciet aangeven met een vooralsnog ongedocumenteerde feature.