4fb27f4

Pinchord · pinchord.git · Tickets · Changelog

Branches > v29.0 > 4fb27f4 > files

Add undo to Javelin script

Grahp, 2026-05-12

Commit: 4fb27f4d2c0e44a024e9f8911f778231dd65dcb6
Parent: f9e38f3

1 changed file:

javelin-script.javelin-script modified (view file)

@@ -7,6 +7,13 @@ // Bitset of the current keys pressed down var current_keys; +const undo_stack_underflow = 234890; // Random number that couldn't be a byte idk+const undo_stack_size = 256;+var undo_stack = createBuffer(undo_stack_size * 2); // Each entry is 16 bits or 2 bytes+var undo_ptr = 0;+var undo_size = 0;++ const key_masks = [[   00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00@@ -20,6 +27,7 @@               17 18    19 1a ]]; +// Could these be made into array maps for easier editing? const starter_bits = [[03 0f 04 10 05 11 06 ff]]; const starters = [<   "", "t", "s", "st", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127"@@ -45,7 +53,51 @@ //                           "A",  "O",    "I", "U" // >]; +func strlen(string) var {+  var i = 0;+  while (string[i] != 0) {+    i += 1;+  }+  return i;+} +func undo_push(count) {+  undo_stack[<undo_ptr>] = count;+  undo_ptr = (undo_ptr + 1) % undo_stack_size;+  if (undo_size < undo_stack_size) {+    undo_size += 1;+  }+}++func undo_pop() var {+  // TODO this accounts for the size rolling over right?+  if (undo_size > 0) {+    // why would you add something and then mod it?+    undo_ptr = (undo_ptr - 1 + undo_stack_size) % undo_stack_size;+    undo_size -= 1;+    return undo_stack[<undo_ptr>];+  } else {+    return undo_stack_underflow;+  }+}++const SC_BACKSPACE = 0x2a;++func backspace(n) {+  var i = 0;+  while (i < n) {+    tapScanCode(SC_BACKSPACE);+    i += 1;+  }+}++func undo() {+  var count = undo_pop();+  printValue("count is", count);+  if (count != undo_stack_underflow) {+    backspace(count + 1);+  }+}  // Key is an index, I guess from gemini? func press(key) {@@ -63,16 +115,26 @@     var vowel_letters = get_from_bank(vowel_bits, pressed_keys, vowels);     var final_letters = get_from_bank(final_bits, pressed_keys, finals); +    // Check for undo and call undo()?+    // How can you even get the text count, ugh.     if (starter_letters && vowel_letters && final_letters) {-      sendText(" ");-      sendText(starter_letters);-      sendText(vowel_letters);-      sendText(final_letters);+      // Eventually don't hard code this obviously :p+      // Make it into a stroke check however that would work+      if (starter_letters == "" && vowel_letters == "" && final_letters == "3") {+        undo();+      } else {+        sendText(" ");+        sendText(starter_letters);+        sendText(vowel_letters);+        sendText(final_letters);+        undo_push(strlen(starter_letters) + strlen(vowel_letters) + strlen(final_letters));+      }     } else {       // If it's an invalid stroke, I think just send it to Javelin to look up?       // That does mean that you couldn't override script stuff... 

Show all 105 lines