Compare commits

..

4 Commits

Author SHA1 Message Date
Krzosa Karol
aff3403404 Add macros 2026-03-21 17:09:40 +01:00
Krzosa Karol
b04b566681 Box mouse select 2026-03-21 16:57:19 +01:00
Krzosa Karol
aa85d9420a Fix tests 2026-03-21 16:57:07 +01:00
Krzosa Karol
4c21026842 CMD_OpenFileSystemBrowser 2026-03-21 16:56:36 +01:00
7 changed files with 118 additions and 220 deletions

View File

@@ -80,7 +80,8 @@ void UpdateCoroutines(Event *event) {
#endif #endif
double took = GetTimeSeconds() - start; double took = GetTimeSeconds() - start;
if (took > (0.016666 / 3.0)) { bool dont_loop_on_coroutines_when_budget_is_ok_exit_immediately = Testing;
if (dont_loop_on_coroutines_when_budget_is_ok_exit_immediately || (took > (0.016666 / 3.0))) {
break; break;
} }
} }

View File

@@ -13,6 +13,7 @@ bool SearchWordBoundary = false;
bool BreakOnError = false; bool BreakOnError = false;
Int ErrorCount; Int ErrorCount;
bool DebugTraceBufferInits = false; bool DebugTraceBufferInits = false;
bool Testing = false;
Allocator SysAllocator = {SystemAllocatorProc}; Allocator SysAllocator = {SystemAllocatorProc};
float DPIScale = 1.0f; float DPIScale = 1.0f;
@@ -64,6 +65,8 @@ Vec2I MouseMiddleAnchor;
RandomSeed UniqueBufferNameSeed = {}; RandomSeed UniqueBufferNameSeed = {};
Array<Event> EventPlayback; Array<Event> EventPlayback;
Array<Event> MacroPlayback;
bool RecordingMacro = false;
BlockArena Perm; BlockArena Perm;
// clipboard // clipboard

View File

@@ -253,3 +253,21 @@ void CMD_ClearCarets() {
active.view->carets.len = 1; active.view->carets.len = 1;
active.view->carets[0] = MakeCaret(GetFront(active.view->carets[0])); active.view->carets[0] = MakeCaret(GetFront(active.view->carets[0]));
} RegisterCommand(CMD_ClearCarets, "escape", "Clear all carets and reset to 1 caret, also do some windowing stuff that closes things on escape"); } RegisterCommand(CMD_ClearCarets, "escape", "Clear all carets and reset to 1 caret, also do some windowing stuff that closes things on escape");
void CMD_ToggleMacroRecording() {
if (RecordingMacro) {
RecordingMacro = false;
Pop(&MacroPlayback); // Remove the ctrl-m from macro playback thing
} else {
RecordingMacro = true;
MacroPlayback.len = 0;
}
} RegisterCommand(CMD_ToggleMacroRecording, "ctrl-m", "Start recording a macro");
void CMD_PlayMacro() {
if (RecordingMacro) {
return;
}
For (MacroPlayback) Add(&EventPlayback, it);
} RegisterCommand(CMD_PlayMacro, "alt-m", "Start playing back a macro recording");

View File

@@ -8,6 +8,16 @@ void CMD_OpenUpFolder() {
Open(name); Open(name);
} RegisterCommand(CMD_OpenUpFolder, "ctrl-o", "Open current's file directory or up directory in other cases"); } RegisterCommand(CMD_OpenUpFolder, "ctrl-o", "Open current's file directory or up directory in other cases");
void CMD_OpenSystemFileBrowser() {
Scratch scratch;
String string = GetPrimaryDirectory();
#if OS_WINDOWS
Open(Format(scratch, "!!explorer %S", string));
#else
Open(Format(scratch, "!!xdg-open %S & disown", string));
#endif
} RegisterCommand(CMD_OpenSystemFileBrowser, "ctrl-alt-r", "Opens the directory of current file in the systems file browser");
void InsertDirectoryNavigation(Buffer *buffer) { void InsertDirectoryNavigation(Buffer *buffer) {
Assert(buffer->is_dir); Assert(buffer->is_dir);
Scratch scratch; Scratch scratch;

View File

@@ -1,9 +1,10 @@
#if PLUGIN_TESTS #if PLUGIN_TESTS
bool Testing = false;
void Wait(mco_coro *co) { void Wait(mco_coro *co) {
Add(&EventPlayback, {EVENT_KIND_INVALID}); {Event ev = {};ev.kind = EVENT_KIND_INVALID; Add(&EventPlayback, ev);}
for (Event *event = Yield(co); event->kind != EVENT_KIND_INVALID; event = Yield(co)) { Event *event = NULL;
for (event = Yield(co); event->kind != EVENT_KIND_INVALID; event = Yield(co)) {
} }
} }
@@ -11,7 +12,6 @@ void Wait(mco_coro *co, int updates) {
for (int i = 0; i < updates; i += 1) { for (int i = 0; i < updates; i += 1) {
{Event ev = {};ev.kind = EVENT_UPDATE; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_UPDATE; Add(&EventPlayback, ev);}
} }
{Event ev = {};ev.kind = EVENT_KIND_INVALID; Add(&EventPlayback, ev);}
Wait(co); Wait(co);
} }
@@ -27,6 +27,7 @@ void OpenCloseCodeTest(mco_coro *co) {
void CO_RunTests(mco_coro *co) { void CO_RunTests(mco_coro *co) {
Testing = true; Testing = true;
WaitForEvents = false; WaitForEvents = false;
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
@@ -54,6 +55,7 @@ void CO_RunTests(mco_coro *co) {
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);}
Wait(co); Wait(co);
String16 result = uR"FOO( String16 result = uR"FOO(
@@ -65,211 +67,47 @@ Memes and stuff)FOO";
BSet set = GetBSet(PrimaryWindowID); BSet set = GetBSet(PrimaryWindowID);
Assert(AreEqual(result, GetString(set.buffer))); Assert(AreEqual(result, GetString(set.buffer)));
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);} // Test the box selection
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.text = "M"; Add(&EventPlayback, ev);} CMD_New();
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "e"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "m"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "e"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "s"; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_L; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_C; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.shift = 1; ev.text = "M"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "e"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "m"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "e"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "a"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "d"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "u"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);} {Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1412; ev.ywindow = 1032; ev.xmouse = 1234; ev.ymouse = 594; ev.text = "f"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_PAGEUP; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LALT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RIGHT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_C; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RIGHT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.text = "T"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "g"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_B; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.text = "A"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_COMMA; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.text = "<"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSLASH; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.shift = 1; ev.text = "|"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_V; ev.xwindow = 1920; ev.ywindow = 1061; ev.xmouse = 835; ev.ctrl = 1; Add(&EventPlayback, ev);}
Wait(co); Wait(co);
result = uR"FOO( result = uR"FOO(
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
Memes Things Memes <|
Memes
)FOO";
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "L"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "e"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_APOSTROPHE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "'"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "d"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "o"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_UP; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_DOWN; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_END; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_PAGEDOWN; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "M"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "e"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "m"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "e"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "a"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "d"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "s"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "u"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "u"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "f"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "f"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LALT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_UP; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSLASH; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "|"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_COMMA; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "<"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "T"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "g"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_SPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = " "; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "g"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_RETURN; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "t"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "g"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_ESCAPE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_UP; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_UP; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LEFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_L; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_BACKSPACE; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "N"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "o"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.text = "T"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "h"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "i"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "n"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_TEXT_INPUT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.text = "g"; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LSHIFT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LCTRL; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_LALT; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; ev.alt = 1; Add(&EventPlayback, ev);}
{Event ev = {};ev.kind = EVENT_KEY_PRESS; ev.key = SDLK_J; ev.xwindow = 1920; ev.ywindow = 2121; ev.ymouse = 1289; ev.shift = 1; ev.ctrl = 1; ev.alt = 1; Add(&EventPlayback, ev);}
Wait(co);
result = uR"FOO(Let's do this |< NoThing NoThing
NoThing
Memes and stuff |< NoThing NoThing
NoThing)FOO";
Memes and stuff)FOO";
set = GetBSet(PrimaryWindowID);
Assert(AreEqual(result, GetString(set.buffer)));
if (ErrorCount != 0) { if (ErrorCount != 0) {
Scratch scratch; Scratch scratch;
String string = AllocCharString(scratch, LogBuffer); String string = AllocCharString(scratch, LogBuffer);

View File

@@ -6,17 +6,16 @@
- [ ] KillProcess in console !!! - should also kill all the children ........... - [ ] KillProcess in console !!! - should also kill all the children ...........
- [x] ctrl-e with these short main.c:290: breaks a little, need to first click ctrl-e and then alt-e to jump - [x] ctrl-e with these short main.c:290: breaks a little, need to first click ctrl-e and then alt-e to jump
- [ ] Use command window without special fuzzy search features to type commands and stuff for executing shell etc.. - [ ] Use command window without special fuzzy search features to type commands and stuff for executing shell etc..
- [ ] I noticed WordComplete getting busted and returning cutdown words but not sure how to repro ...
## Monaco like design for familiarity ## Monaco like design for familiarity
- [x] Ctrl+Alt+- and Ctrl+Shift+- Jump back, jump forward - [x] Ctrl+Alt+- and Ctrl+Shift+- Jump back, jump forward
- [x] ctrl-shift-l select all occurences of a string - [x] ctrl-shift-l select all occurences of a string
- [x] ctrl-alt-r open containing folder (file explorer system)
- [x] ctrl-alt-MouseMove should do a box select with multiple cursors thing
- [ ] ctrl-tab - switch file lister with instant hold release semantics? - [ ] ctrl-tab - switch file lister with instant hold release semantics?
- [ ] SearchAndReplace how to do better? - [ ] SearchAndReplace how to do better?
- [ ] ctrl-alt-MouseClick should add a cursor instead of alt-MouseClick
- [ ] ctrl-t find workspace symbols? how can we do it? - [ ] ctrl-t find workspace symbols? how can we do it?
- [ ] ctrl-b what to do with this?
- [ ] ctrl-alt-r open containing folder (file explorer system)
- [ ] ctrl-alt-MouseMove should do a box select with multiple cursors thing
- [ ] Snippet design? - [ ] Snippet design?
- [ ] Make a platform layer and separate SDL stuff out - [ ] Make a platform layer and separate SDL stuff out
@@ -49,7 +48,7 @@
- [ ] Undo kinds (to enable history in fuzzy buffers) - [ ] Undo kinds (to enable history in fuzzy buffers)
- [ ] Add undo kind. Snapshot kind, so that history is possible in weird buffers without paying a huge memory cost. The idea is that we would store the exact buffer state to replace with, editor would just save history of first line etc. - [ ] Add undo kind. Snapshot kind, so that history is possible in weird buffers without paying a huge memory cost. The idea is that we would store the exact buffer state to replace with, editor would just save history of first line etc.
- [ ] Macros - [x] Macros
- [ ] Regex - [ ] Regex
- [ ] ctags based indexing - [ ] ctags based indexing
- [ ] WordComplete - [ ] WordComplete
@@ -319,6 +318,27 @@ void OnCommand(Event event) {
Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse); Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse);
Caret &caret = selected.view->carets[0]; Caret &caret = selected.view->carets[0];
caret = SetFrontWithAnchor(caret, DocumentAnchor, p); caret = SetFrontWithAnchor(caret, DocumentAnchor, p);
if (event.alt && event.shift) {
Int front = GetFront(DocumentAnchor);
XY from = PosToXY(selected.buffer, front);
XY to = ScreenSpaceToXY(selected.window, selected.view, mouse);
Int min_line = Min(from.y, to.y);
Int max_line = Max(from.y, to.y);
Int min_col = Min(from.x, to.x);
Int max_col = Max(from.x, to.x);
selected.view->carets.len = 0;
for (Int line = min_line; line <= max_line; line += 1) {
XY left_xy = {min_col, line};
XY right_xy = {max_col, line};
Int left = XYToPosWithoutNL(selected.buffer, left_xy);
Int right = XYToPosWithoutNL(selected.buffer, right_xy);
Caret new_selection = MakeCaret(left, right);
Add(&selected.view->carets, new_selection);
}
MergeCarets(selected.buffer, &selected.view->carets);
}
} }
if (ResizerSelected.id != -1 && Mouse(LEFT_UP)) { if (ResizerSelected.id != -1 && Mouse(LEFT_UP)) {
@@ -425,8 +445,11 @@ void OnCommand(Event event) {
DocumentSelected = active.window->id; DocumentSelected = active.window->id;
Int p = ScreenSpaceToBufferPos(active.window, active.view, active.buffer, mouse); Int p = ScreenSpaceToBufferPos(active.window, active.view, active.buffer, mouse);
if (event.alt) Insert(&active.view->carets, MakeCaret(p, p), 0); if (event.alt) {
if (!event.alt && !event.shift) active.view->carets.len = 1; Insert(&active.view->carets, MakeCaret(p, p), 0);
} else if (!event.alt && !event.shift) {
active.view->carets.len = 1;
}
Caret &caret = active.view->carets[0]; Caret &caret = active.view->carets[0];
if (event.shift) { if (event.shift) {
@@ -851,6 +874,9 @@ void MainLoop() {
FrameEvents.len = 0; FrameEvents.len = 0;
GetEventsForFrame(&FrameEvents); GetEventsForFrame(&FrameEvents);
For (FrameEvents) { For (FrameEvents) {
if (RecordingMacro) {
Add(&MacroPlayback, it);
}
#if PLUGIN_RECORD_EVENTS #if PLUGIN_RECORD_EVENTS
if (it.kind != EVENT_UPDATE && !Testing) { if (it.kind != EVENT_UPDATE && !Testing) {
Serialize(EventBuffer, &it); Serialize(EventBuffer, &it);

View File

@@ -176,20 +176,22 @@ Window *SwitchWindow(int direction) {
return result; return result;
} }
Int ScreenSpaceToBufferPos(Window *window, View *view, Buffer *buffer, Vec2I mouse) { XY ScreenSpaceToXY(Window *window, View *view, Vec2I mouse) {
Vec2I mworld = mouse - window->document_rect.min + view->scroll; Vec2I mworld = mouse - window->document_rect.min + view->scroll;
double px = (double)mworld.x / (double)window->font->char_spacing; double px = (double)mworld.x / (double)window->font->char_spacing;
double py = (double)mworld.y / (double)window->font->line_spacing; double py = (double)mworld.y / (double)window->font->line_spacing;
XY xy = {(Int)round(px), (Int)floor(py)}; XY xy = {(Int)round(px), (Int)floor(py)};
return xy;
}
Int ScreenSpaceToBufferPos(Window *window, View *view, Buffer *buffer, Vec2I mouse) {
XY xy = ScreenSpaceToXY(window, view, mouse);
Int result = XYToPosWithoutNL(buffer, xy); Int result = XYToPosWithoutNL(buffer, xy);
return result; return result;
} }
Int ScreenSpaceToBufferPosErrorOutOfBounds(Window *window, View *view, Buffer *buffer, Vec2I mouse) { Int ScreenSpaceToBufferPosErrorOutOfBounds(Window *window, View *view, Buffer *buffer, Vec2I mouse) {
Vec2I mworld = mouse - window->document_rect.min + view->scroll; XY xy = ScreenSpaceToXY(window, view, mouse);
double px = (double)mworld.x / (double)window->font->char_spacing;
double py = (double)mworld.y / (double)window->font->line_spacing;
XY xy = {(Int)round(px), (Int)floor(py)};
Int result = XYToPosErrorOutOfBounds(buffer, xy); Int result = XYToPosErrorOutOfBounds(buffer, xy);
return result; return result;
} }