Toying with structure, plugin_record_events, record_gc
This commit is contained in:
@@ -1410,31 +1410,6 @@ String GetUniqueBufferName(String working_dir, String prepend_name, String exten
|
|||||||
return buffer_name;
|
return buffer_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitBuffers() {
|
|
||||||
Allocator sys_allocator = GetSystemAllocator();
|
|
||||||
Scratch scratch;
|
|
||||||
Buffer *null_buffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "logs", ""));
|
|
||||||
null_buffer->special = true;
|
|
||||||
View *null_view = CreateView(null_buffer->id);
|
|
||||||
null_view->special = true;
|
|
||||||
Assert(null_buffer->id == NullBufferID && null_view->id == NullViewID);
|
|
||||||
TraceBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "trace"));
|
|
||||||
TraceBuffer->special = true;
|
|
||||||
TraceBuffer->no_history = true;
|
|
||||||
GCInfoBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "gc"));
|
|
||||||
GCInfoBuffer->special = true;
|
|
||||||
GCInfoBuffer->no_history = true;
|
|
||||||
EventBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "events"));
|
|
||||||
EventBuffer->no_history = true;
|
|
||||||
EventBuffer->special = true;
|
|
||||||
#ifdef PLUGIN_SEARCH_OPEN_BUFFERS
|
|
||||||
Buffer *search_project = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "search_project"));
|
|
||||||
search_project->no_history = true;
|
|
||||||
search_project->special = true;
|
|
||||||
SearchOpenBuffersBufferID = search_project->id;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
Int ConvertUTF8ToUTF16UnixLine(String string, char16_t *buffer, Int buffer_cap) {
|
Int ConvertUTF8ToUTF16UnixLine(String string, char16_t *buffer, Int buffer_cap) {
|
||||||
if (string.len == 0) {
|
if (string.len == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -91,6 +91,33 @@ View *GetViewForFixingWhenBufferCommand(Buffer *buffer, bool *is_active = NULL)
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MoveCursorByPageSize(Window *window, int direction, bool shift = false) {
|
||||||
|
Assert(direction == DIR_UP || direction == DIR_DOWN);
|
||||||
|
BSet set = GetBSet(window);
|
||||||
|
|
||||||
|
Rect2I visible_cells_rect = GetVisibleCells(window);
|
||||||
|
Int y = GetSize(visible_cells_rect).y - 2;
|
||||||
|
if (direction == DIR_UP) y = -y;
|
||||||
|
|
||||||
|
For(set.view->carets) {
|
||||||
|
XY xy = PosToXY(set.buffer, GetFront(it));
|
||||||
|
if (direction == DIR_DOWN && xy.line == set.buffer->line_starts.len - 1) {
|
||||||
|
Range line_range = GetLineRange(set.buffer, xy.line);
|
||||||
|
xy.col = line_range.max - line_range.min;
|
||||||
|
} else if (direction == DIR_UP && xy.line == 0) {
|
||||||
|
xy.col = 0;
|
||||||
|
}
|
||||||
|
xy.line += y;
|
||||||
|
|
||||||
|
Int pos = XYToPos(set.buffer, xy);
|
||||||
|
if (shift) {
|
||||||
|
it = SetFront(it, pos);
|
||||||
|
} else {
|
||||||
|
it = MakeCaret(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ReplaceWithoutMovingCarets(Buffer *buffer, Range range, String16 string) {
|
void ReplaceWithoutMovingCarets(Buffer *buffer, Range range, String16 string) {
|
||||||
View *view = GetViewForFixingWhenBufferCommand(buffer);
|
View *view = GetViewForFixingWhenBufferCommand(buffer);
|
||||||
Array<Caret> carets = Copy(GetSystemAllocator(), view->carets);
|
Array<Caret> carets = Copy(GetSystemAllocator(), view->carets);
|
||||||
@@ -205,12 +232,6 @@ void ReportWarningf(const char *fmt, ...) {
|
|||||||
Appendf(null_view, "%S\n", string);
|
Appendf(null_view, "%S\n", string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportDebugf(const char *fmt, ...) {
|
|
||||||
Scratch scratch;
|
|
||||||
STRING_FORMAT(scratch, fmt, string);
|
|
||||||
RawAppendf(TraceBuffer, "%S\n", string);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CenterView(WindowID window) {
|
void CenterView(WindowID window) {
|
||||||
BSet set = GetBSet(window);
|
BSet set = GetBSet(window);
|
||||||
Caret c = set.view->carets[0];
|
Caret c = set.view->carets[0];
|
||||||
@@ -436,16 +457,6 @@ void CMD_SaveAll() {
|
|||||||
}
|
}
|
||||||
} RegisterCommand(CMD_SaveAll, "ctrl-shift-s");
|
} RegisterCommand(CMD_SaveAll, "ctrl-shift-s");
|
||||||
|
|
||||||
void CMD_GotoNextInList() {
|
|
||||||
BSet main = GetBSet(PrimaryWindowID);
|
|
||||||
GotoNextInList(main.window, 1);
|
|
||||||
} RegisterCommand(CMD_GotoNextInList, "ctrl-e", "For example: when jumping from build panel to build error, a jump point is setup, user can click this button to go over to the next compiler error");
|
|
||||||
|
|
||||||
void CMD_GotoPrevInList() {
|
|
||||||
BSet main = GetBSet(PrimaryWindowID);
|
|
||||||
GotoNextInList(main.window, -1);
|
|
||||||
} RegisterCommand(CMD_GotoPrevInList, "alt-e", "For example: when jumping from build panel to build error, a jump point is setup, user can click this button to go over to the previous compiler error");
|
|
||||||
|
|
||||||
ResolvedOpen ResolveOpen(Allocator alo, String path, ResolveOpenMeta meta) {
|
ResolvedOpen ResolveOpen(Allocator alo, String path, ResolveOpenMeta meta) {
|
||||||
ResolvedOpen result = {};
|
ResolvedOpen result = {};
|
||||||
path = Trim(path);
|
path = Trim(path);
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ void DrawWindow(Window *window, Event &event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ctrl()) {
|
if (event.ctrl) {
|
||||||
if (is_active) {
|
if (is_active) {
|
||||||
if (GetSize(caret.range) == 0) {
|
if (GetSize(caret.range) == 0) {
|
||||||
Range range = EncloseLoadWord(buffer, caret.range.min);
|
Range range = EncloseLoadWord(buffer, caret.range.min);
|
||||||
|
|||||||
@@ -503,78 +503,6 @@ Array<Event> GetEventsForFrame(Allocator allocator) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Serializer {
|
|
||||||
Buffer *buffer; // for writing
|
|
||||||
};
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, EventKind *kind) {
|
|
||||||
RawAppendf(s->buffer, "ev.%S = %s; ", name, EventKindStrings[*kind]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, Int *datum) {
|
|
||||||
if (*datum == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (name == "key") {
|
|
||||||
RawAppendf(s->buffer, "ev.%S = %s; ", name, SDLKeycodeToName((SDL_Keycode)*datum));
|
|
||||||
} else {
|
|
||||||
RawAppendf(s->buffer, "ev.%S = %lld; ", name, (long long)*datum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, uint32_t *datum) {
|
|
||||||
Int d = *datum;
|
|
||||||
Serialize(s, name, &d);
|
|
||||||
*datum = (uint32_t)d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, uint8_t *datum) {
|
|
||||||
Int d = *datum;
|
|
||||||
Serialize(s, name, &d);
|
|
||||||
*datum = (uint8_t)d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, int16_t *datum) {
|
|
||||||
Int d = *datum;
|
|
||||||
Serialize(s, name, &d);
|
|
||||||
*datum = (int16_t)d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, float *datum) {
|
|
||||||
if (*datum == 0.f) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RawAppendf(s->buffer, "ev.%S = %f; ", name, *datum);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serialize(Serializer *s, String name, char **text) {
|
|
||||||
String str = *text;
|
|
||||||
if (str.len == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RawAppendf(s->buffer, "ev.%S = \"%S\"; ", name, str);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerializeBegin(Serializer *s) {
|
|
||||||
RawAppendf(s->buffer, "{Event ev = {};");
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerializeEnd(Serializer *s) {
|
|
||||||
RawAppendf(s->buffer, "Add(&EventPlayback, ev);}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// :Event
|
|
||||||
void Serialize(Serializer *s, Event *e) {
|
|
||||||
SerializeBegin(s);
|
|
||||||
#define X(TYPE, KIND, NAME) Serialize(s, #NAME, &e->NAME);
|
|
||||||
EVENT_FIELDS
|
|
||||||
#undef X
|
|
||||||
SerializeEnd(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define Ctrl() event.ctrl
|
|
||||||
#define Alt() event.alt
|
|
||||||
#define Shift() event.shift
|
|
||||||
|
|
||||||
#define Press(KEY) (event.key == KEY)
|
#define Press(KEY) (event.key == KEY)
|
||||||
#define CtrlPress(KEY) (event.key == KEY && event.ctrl)
|
#define CtrlPress(KEY) (event.key == KEY && event.ctrl)
|
||||||
@@ -583,10 +511,8 @@ void Serialize(Serializer *s, Event *e) {
|
|||||||
#define CtrlShiftPress(KEY) (event.key == KEY && event.ctrl && event.shift)
|
#define CtrlShiftPress(KEY) (event.key == KEY && event.ctrl && event.shift)
|
||||||
#define CtrlAltPress(KEY) (event.key == KEY && event.ctrl && event.alt)
|
#define CtrlAltPress(KEY) (event.key == KEY && event.ctrl && event.alt)
|
||||||
#define AltShiftPress(KEY) (event.key == KEY && event.shift && event.alt)
|
#define AltShiftPress(KEY) (event.key == KEY && event.shift && event.alt)
|
||||||
#define MouseVec2() \
|
#define MouseVec2() Vec2 { (float)event.xmouse, (float)event.ymouse }
|
||||||
Vec2 { (float)event.xmouse, (float)event.ymouse }
|
#define MouseVec2I() Vec2I { (Int) event.xmouse, (Int)event.ymouse }
|
||||||
#define MouseVec2I() \
|
|
||||||
Vec2I { (Int) event.xmouse, (Int)event.ymouse }
|
|
||||||
#define Mouse(x) (event.kind == EVENT_MOUSE_##x)
|
#define Mouse(x) (event.kind == EVENT_MOUSE_##x)
|
||||||
#define MousePress() (Mouse(LEFT) || Mouse(RIGHT) || Mouse(MIDDLE))
|
#define MousePress() (Mouse(LEFT) || Mouse(RIGHT) || Mouse(MIDDLE))
|
||||||
#define MouseUp() (Mouse(LEFT_UP) || Mouse(RIGHT_UP) || Mouse(MIDDLE_UP))
|
#define MouseUp() (Mouse(LEFT_UP) || Mouse(RIGHT_UP) || Mouse(MIDDLE_UP))
|
||||||
|
|||||||
@@ -59,10 +59,6 @@ WindowID NullWindowID;
|
|||||||
BufferID BuildBufferID;
|
BufferID BuildBufferID;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PLUGIN_SEARCH_OPEN_BUFFERS
|
|
||||||
BufferID SearchOpenBuffersBufferID;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BufferID GlobalConfigBufferID;
|
BufferID GlobalConfigBufferID;
|
||||||
|
|
||||||
WindowID NextActiveWindowID;
|
WindowID NextActiveWindowID;
|
||||||
@@ -75,11 +71,6 @@ WindowID ResizerHover = {-1};
|
|||||||
Caret DocumentAnchor;
|
Caret DocumentAnchor;
|
||||||
Vec2I MouseMiddleAnchor;
|
Vec2I MouseMiddleAnchor;
|
||||||
|
|
||||||
Buffer *GCInfoBuffer;
|
|
||||||
Buffer *EventBuffer;
|
|
||||||
Buffer *TraceBuffer;
|
|
||||||
View *TraceView;
|
|
||||||
|
|
||||||
RandomSeed UniqueBufferNameSeed = {};
|
RandomSeed UniqueBufferNameSeed = {};
|
||||||
Array<Event> EventPlayback;
|
Array<Event> EventPlayback;
|
||||||
BlockArena Perm;
|
BlockArena Perm;
|
||||||
@@ -193,6 +184,7 @@ RegisterVariable(String, OpenCodeExcludePatterns, "");
|
|||||||
RegisterVariable(Int, TrimTrailingWhitespace, 1);
|
RegisterVariable(Int, TrimTrailingWhitespace, 1);
|
||||||
|
|
||||||
// PROJECT_MANAGEMENT
|
// PROJECT_MANAGEMENT
|
||||||
|
// Set at the beginning of the program to current directory
|
||||||
RegisterVariable(String, ProjectDirectory, "");
|
RegisterVariable(String, ProjectDirectory, "");
|
||||||
|
|
||||||
// PLUGIN_REMEDYBG
|
// PLUGIN_REMEDYBG
|
||||||
|
|||||||
@@ -1,30 +1,3 @@
|
|||||||
void MoveCursorByPageSize(Window *window, int direction, bool shift = false) {
|
|
||||||
Assert(direction == DIR_UP || direction == DIR_DOWN);
|
|
||||||
BSet set = GetBSet(window);
|
|
||||||
|
|
||||||
Rect2I visible_cells_rect = GetVisibleCells(window);
|
|
||||||
Int y = GetSize(visible_cells_rect).y - 2;
|
|
||||||
if (direction == DIR_UP) y = -y;
|
|
||||||
|
|
||||||
For(set.view->carets) {
|
|
||||||
XY xy = PosToXY(set.buffer, GetFront(it));
|
|
||||||
if (direction == DIR_DOWN && xy.line == set.buffer->line_starts.len - 1) {
|
|
||||||
Range line_range = GetLineRange(set.buffer, xy.line);
|
|
||||||
xy.col = line_range.max - line_range.min;
|
|
||||||
} else if (direction == DIR_UP && xy.line == 0) {
|
|
||||||
xy.col = 0;
|
|
||||||
}
|
|
||||||
xy.line += y;
|
|
||||||
|
|
||||||
Int pos = XYToPos(set.buffer, xy);
|
|
||||||
if (shift) {
|
|
||||||
it = SetFront(it, pos);
|
|
||||||
} else {
|
|
||||||
it = MakeCaret(pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMD_Redo() {
|
void CMD_Redo() {
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
RedoEdit(active.buffer, &active.view->carets);
|
RedoEdit(active.buffer, &active.view->carets);
|
||||||
|
|||||||
67
src/text_editor/plugin_record_events.cpp
Normal file
67
src/text_editor/plugin_record_events.cpp
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#define PLUGIN_RECORD_EVENTS
|
||||||
|
Buffer *EventBuffer;
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, EventKind *kind) {
|
||||||
|
RawAppendf(buffer, "ev.%S = %s; ", name, EventKindStrings[*kind]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, Int *datum) {
|
||||||
|
if (*datum == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (name == "key") {
|
||||||
|
RawAppendf(buffer, "ev.%S = %s; ", name, SDLKeycodeToName((SDL_Keycode)*datum));
|
||||||
|
} else {
|
||||||
|
RawAppendf(buffer, "ev.%S = %lld; ", name, (long long)*datum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, uint32_t *datum) {
|
||||||
|
Int d = *datum;
|
||||||
|
Serialize(buffer, name, &d);
|
||||||
|
*datum = (uint32_t)d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, uint8_t *datum) {
|
||||||
|
Int d = *datum;
|
||||||
|
Serialize(buffer, name, &d);
|
||||||
|
*datum = (uint8_t)d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, int16_t *datum) {
|
||||||
|
Int d = *datum;
|
||||||
|
Serialize(buffer, name, &d);
|
||||||
|
*datum = (int16_t)d;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, float *datum) {
|
||||||
|
if (*datum == 0.f) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RawAppendf(buffer, "ev.%S = %f; ", name, *datum);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Serialize(Buffer *buffer, String name, char **text) {
|
||||||
|
String str = *text;
|
||||||
|
if (str.len == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RawAppendf(buffer, "ev.%S = \"%S\"; ", name, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerializeBegin(Buffer *buffer) {
|
||||||
|
RawAppendf(buffer, "{Event ev = {};");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerializeEnd(Buffer *buffer) {
|
||||||
|
RawAppendf(buffer, "Add(&EventPlayback, ev);}\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// :Event
|
||||||
|
void Serialize(Buffer *buffer, Event *e) {
|
||||||
|
SerializeBegin(buffer);
|
||||||
|
#define X(TYPE, KIND, NAME) Serialize(buffer, #NAME, &e->NAME);
|
||||||
|
EVENT_FIELDS
|
||||||
|
#undef X
|
||||||
|
SerializeEnd(buffer);
|
||||||
|
}
|
||||||
2
src/text_editor/plugin_record_gc.cpp
Normal file
2
src/text_editor/plugin_record_gc.cpp
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#define PLUGIN_RECORD_GC
|
||||||
|
Buffer *GCInfoBuffer;
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
#define PLUGIN_SEARCH_OPEN_BUFFERS
|
||||||
|
BufferID SearchOpenBuffersBufferID;
|
||||||
|
|
||||||
struct SearchOpenBuffersParams {
|
struct SearchOpenBuffersParams {
|
||||||
String16 needle;
|
String16 needle;
|
||||||
BufferID buffer;
|
BufferID buffer;
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
#define PLUGIN_SEARCH_OPEN_BUFFERS
|
|
||||||
@@ -56,3 +56,13 @@ void CMD_NewWindow() {
|
|||||||
void CMD_CloseWindow() {
|
void CMD_CloseWindow() {
|
||||||
Close(PrimaryWindowID);
|
Close(PrimaryWindowID);
|
||||||
} RegisterCommand(CMD_CloseWindow, "", "Close the last active primary window");
|
} RegisterCommand(CMD_CloseWindow, "", "Close the last active primary window");
|
||||||
|
|
||||||
|
void CMD_GotoNextInList() {
|
||||||
|
BSet main = GetBSet(PrimaryWindowID);
|
||||||
|
GotoNextInList(main.window, 1);
|
||||||
|
} RegisterCommand(CMD_GotoNextInList, "ctrl-e", "For example: when jumping from build panel to build error, a jump point is setup, user can click this button to go over to the next compiler error");
|
||||||
|
|
||||||
|
void CMD_GotoPrevInList() {
|
||||||
|
BSet main = GetBSet(PrimaryWindowID);
|
||||||
|
GotoNextInList(main.window, -1);
|
||||||
|
} RegisterCommand(CMD_GotoPrevInList, "alt-e", "For example: when jumping from build panel to build error, a jump point is setup, user can click this button to go over to the previous compiler error");
|
||||||
@@ -15,7 +15,7 @@ void UpdateProcesses() {
|
|||||||
Append(view, poll, it.scroll_to_end);
|
Append(view, poll, it.scroll_to_end);
|
||||||
}
|
}
|
||||||
if (!IsValid(&it)) {
|
if (!IsValid(&it)) {
|
||||||
ReportDebugf("process %lld exit code = %d", it.id, it.exit_code);
|
ReportConsolef("process %lld exit code = %d", it.id, it.exit_code);
|
||||||
remove_item = true;
|
remove_item = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ void UpdateProcesses() {
|
|||||||
|
|
||||||
void Exec(ViewID view, bool scroll_to_end, String cmd, String working_dir) {
|
void Exec(ViewID view, bool scroll_to_end, String cmd, String working_dir) {
|
||||||
Process process = SpawnProcess(cmd, working_dir, {}, ProcessEnviroment);
|
Process process = SpawnProcess(cmd, working_dir, {}, ProcessEnviroment);
|
||||||
ReportDebugf("process %lld start. is_valid = %d cmd = %S working_dir = %S", process.id, process.is_valid, cmd, working_dir);
|
ReportConsolef("process %lld start. is_valid = %d cmd = %S working_dir = %S", process.id, process.is_valid, cmd, working_dir);
|
||||||
process.view_id = view.id;
|
process.view_id = view.id;
|
||||||
process.scroll_to_end = scroll_to_end;
|
process.scroll_to_end = scroll_to_end;
|
||||||
if (process.is_valid) {
|
if (process.is_valid) {
|
||||||
@@ -43,7 +43,7 @@ struct ExecResult {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ExecResult ExecAndWait(Allocator allocator, String cmd, String working_dir, String stdin_string = {}) {
|
ExecResult ExecAndWait(Allocator allocator, String cmd, String working_dir, String stdin_string = {}) {
|
||||||
ReportDebugf("ExecAndWait cmd = %S working_dir = %S stdin_string = %S", cmd, working_dir, stdin_string);
|
ReportConsolef("ExecAndWait cmd = %S working_dir = %S stdin_string = %S", cmd, working_dir, stdin_string);
|
||||||
|
|
||||||
Buffer *scratch_buff = CreateScratchBuffer(allocator, 4096 * 4);
|
Buffer *scratch_buff = CreateScratchBuffer(allocator, 4096 * 4);
|
||||||
Process process = SpawnProcess(cmd, working_dir, stdin_string, ProcessEnviroment);
|
Process process = SpawnProcess(cmd, working_dir, stdin_string, ProcessEnviroment);
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#include "plugin_status_window.h"
|
#include "plugin_status_window.h"
|
||||||
#include "plugin_build_window.h"
|
#include "plugin_build_window.h"
|
||||||
#include "plugin_project_management.h"
|
#include "plugin_project_management.h"
|
||||||
#include "plugin_search_open_buffers.h"
|
|
||||||
#if OS_WINDOWS
|
#if OS_WINDOWS
|
||||||
#include "plugin_remedybg.h"
|
#include "plugin_remedybg.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -36,12 +35,12 @@
|
|||||||
#include "event.cpp"
|
#include "event.cpp"
|
||||||
#include "config.cpp"
|
#include "config.cpp"
|
||||||
#include "commands.cpp"
|
#include "commands.cpp"
|
||||||
|
#include "commands_clipboard.cpp"
|
||||||
#include "scratch.cpp"
|
#include "scratch.cpp"
|
||||||
#include "draw.cpp"
|
#include "draw.cpp"
|
||||||
#include "test/tests.cpp"
|
#include "test/tests.cpp"
|
||||||
|
|
||||||
#include "commands_window_management.cpp"
|
#include "plugin_window_management.cpp"
|
||||||
#include "commands_clipboard.cpp"
|
|
||||||
#include "plugin_directory_navigation.cpp"
|
#include "plugin_directory_navigation.cpp"
|
||||||
#include "plugin_search_open_buffers.cpp"
|
#include "plugin_search_open_buffers.cpp"
|
||||||
#include "plugin_project_management.cpp"
|
#include "plugin_project_management.cpp"
|
||||||
@@ -51,6 +50,8 @@
|
|||||||
#include "plugin_status_window.cpp"
|
#include "plugin_status_window.cpp"
|
||||||
#include "plugin_build_window.cpp"
|
#include "plugin_build_window.cpp"
|
||||||
#include "plugin_debug_window.cpp"
|
#include "plugin_debug_window.cpp"
|
||||||
|
#include "plugin_record_gc.cpp"
|
||||||
|
#include "plugin_record_events.cpp"
|
||||||
#if OS_WINDOWS
|
#if OS_WINDOWS
|
||||||
#include "plugin_remedybg.cpp"
|
#include "plugin_remedybg.cpp"
|
||||||
#endif
|
#endif
|
||||||
@@ -322,7 +323,7 @@ void OnCommand(Event event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ctrl() && Mouse(RIGHT)) {
|
if (event.ctrl && Mouse(RIGHT)) {
|
||||||
Vec2I mouse = MouseVec2I();
|
Vec2I mouse = MouseVec2I();
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
bool mouse_in_document = AreOverlapping(mouse, active.window->document_rect);
|
bool mouse_in_document = AreOverlapping(mouse, active.window->document_rect);
|
||||||
@@ -367,7 +368,7 @@ void OnCommand(Event event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (Ctrl() && Mouse(LEFT)) {
|
if (event.ctrl && Mouse(LEFT)) {
|
||||||
MouseLoadWord(event);
|
MouseLoadWord(event);
|
||||||
} else if (Mouse(LEFT)) { // Uses Alt and shift
|
} else if (Mouse(LEFT)) { // Uses Alt and shift
|
||||||
Vec2I mouse = MouseVec2I();
|
Vec2I mouse = MouseVec2I();
|
||||||
@@ -382,11 +383,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 (Alt()) Insert(&active.view->carets, MakeCaret(p, p), 0);
|
if (event.alt) Insert(&active.view->carets, MakeCaret(p, p), 0);
|
||||||
if (!Alt() && !Shift()) active.view->carets.len = 1;
|
if (!event.alt && !event.shift) active.view->carets.len = 1;
|
||||||
|
|
||||||
Caret &caret = active.view->carets[0];
|
Caret &caret = active.view->carets[0];
|
||||||
if (Shift()) {
|
if (event.shift) {
|
||||||
if (p <= caret.range.min) {
|
if (p <= caret.range.min) {
|
||||||
caret.range.min = p;
|
caret.range.min = p;
|
||||||
caret.ifront = 0;
|
caret.ifront = 0;
|
||||||
@@ -545,10 +546,12 @@ void GarbageCollect() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PLUGIN_RECORD_GC
|
||||||
RawAppendf(GCInfoBuffer, "View %d %S\n", (int)it->id.id, buffer ? buffer->name : String{"NULL"});
|
RawAppendf(GCInfoBuffer, "View %d %S\n", (int)it->id.id, buffer ? buffer->name : String{"NULL"});
|
||||||
remove_item = true;
|
#endif
|
||||||
Dealloc(&it->commands);
|
Dealloc(&it->commands);
|
||||||
Dealloc(it);
|
Dealloc(it);
|
||||||
|
remove_item = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
IterRemove(Buffers) {
|
IterRemove(Buffers) {
|
||||||
@@ -569,7 +572,9 @@ void GarbageCollect() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PLUGIN_RECORD_GC
|
||||||
RawAppendf(GCInfoBuffer, "Buff %d %S\n", (int)it->id.id, it->name);
|
RawAppendf(GCInfoBuffer, "Buff %d %S\n", (int)it->id.id, it->name);
|
||||||
|
#endif
|
||||||
remove_item = true;
|
remove_item = true;
|
||||||
DeallocBuffer(it);
|
DeallocBuffer(it);
|
||||||
}
|
}
|
||||||
@@ -581,7 +586,9 @@ void GarbageCollect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (it->close) {
|
if (it->close) {
|
||||||
|
#ifdef PLUGIN_RECORD_GC
|
||||||
RawAppendf(GCInfoBuffer, "Wind %d %d %d %d %d\n", (int)it->id.id, (int)it->total_rect.min.x, (int)it->total_rect.min.y, (int)it->total_rect.max.x, (int)it->total_rect.max.y);
|
RawAppendf(GCInfoBuffer, "Wind %d %d %d %d %d\n", (int)it->id.id, (int)it->total_rect.min.x, (int)it->total_rect.min.y, (int)it->total_rect.max.x, (int)it->total_rect.max.y);
|
||||||
|
#endif
|
||||||
Dealloc(&it->goto_history);
|
Dealloc(&it->goto_history);
|
||||||
Dealloc(&it->goto_redo);
|
Dealloc(&it->goto_redo);
|
||||||
Dealloc(&it->commands);
|
Dealloc(&it->commands);
|
||||||
@@ -776,11 +783,13 @@ void MainLoop() {
|
|||||||
Scratch scratch;
|
Scratch scratch;
|
||||||
FrameID += 1;
|
FrameID += 1;
|
||||||
Array<Event> frame_events = GetEventsForFrame(scratch);
|
Array<Event> frame_events = GetEventsForFrame(scratch);
|
||||||
Serializer ser = {EventBuffer};
|
|
||||||
For(frame_events) {
|
For(frame_events) {
|
||||||
if (it.kind != 1) {
|
|
||||||
if (!Testing) Serialize(&ser, &it);
|
#ifdef PLUGIN_RECORD_EVENTS
|
||||||
|
if (it.kind != EVENT_UPDATE && !Testing) {
|
||||||
|
Serialize(EventBuffer, &it);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (it.xwindow == 0 || it.ywindow == 0) {
|
if (it.xwindow == 0 || it.ywindow == 0) {
|
||||||
int xwindow, ywindow;
|
int xwindow, ywindow;
|
||||||
@@ -944,7 +953,36 @@ int main(int argc, char **argv)
|
|||||||
if (scale != 1.0f) DPIScale = scale;
|
if (scale != 1.0f) DPIScale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
InitBuffers();
|
// Init buffers
|
||||||
|
{
|
||||||
|
Allocator sys_allocator = GetSystemAllocator();
|
||||||
|
Scratch scratch;
|
||||||
|
Buffer *null_buffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "logs", ""));
|
||||||
|
null_buffer->special = true;
|
||||||
|
View *null_view = CreateView(null_buffer->id);
|
||||||
|
null_view->special = true;
|
||||||
|
Assert(null_buffer->id == NullBufferID && null_view->id == NullViewID);
|
||||||
|
|
||||||
|
#ifdef PLUGIN_RECORD_GC
|
||||||
|
GCInfoBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "gc"));
|
||||||
|
GCInfoBuffer->special = true;
|
||||||
|
GCInfoBuffer->no_history = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PLUGIN_RECORD_EVENTS
|
||||||
|
EventBuffer = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "events"));
|
||||||
|
EventBuffer->no_history = true;
|
||||||
|
EventBuffer->special = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PLUGIN_SEARCH_OPEN_BUFFERS
|
||||||
|
Buffer *search_project = CreateBuffer(sys_allocator, GetUniqueBufferName(ProjectDirectory, "search_project"));
|
||||||
|
search_project->no_history = true;
|
||||||
|
search_project->special = true;
|
||||||
|
SearchOpenBuffersBufferID = search_project->id;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
InitRender();
|
InitRender();
|
||||||
ReloadFont(PathToFont, (U32)FontSize);
|
ReloadFont(PathToFont, (U32)FontSize);
|
||||||
CreateWind();
|
CreateWind();
|
||||||
|
|||||||
@@ -306,7 +306,6 @@ BSet GetBSet(WindowID window_id);
|
|||||||
void Append(View *view, String16 string, bool scroll_to_end_if_cursor_on_last_line);
|
void Append(View *view, String16 string, bool scroll_to_end_if_cursor_on_last_line);
|
||||||
void Append(View *view, String string, bool scroll_to_end_if_cursor_on_last_line);
|
void Append(View *view, String string, bool scroll_to_end_if_cursor_on_last_line);
|
||||||
void ReplaceWithoutMovingCarets(Buffer *buffer, Range range, String16 string);
|
void ReplaceWithoutMovingCarets(Buffer *buffer, Range range, String16 string);
|
||||||
void ReportDebugf(const char *fmt, ...);
|
|
||||||
void ReportConsolef(const char *fmt, ...);
|
void ReportConsolef(const char *fmt, ...);
|
||||||
void ReportErrorf(const char *fmt, ...);
|
void ReportErrorf(const char *fmt, ...);
|
||||||
void ReportWarningf(const char *fmt, ...);
|
void ReportWarningf(const char *fmt, ...);
|
||||||
|
|||||||
Reference in New Issue
Block a user