Improving the design
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
- What precise workflow do I need for me to be viable to use this?
|
- What precise workflow do I need for me to be viable to use this?
|
||||||
- From a user (novice) point of view, how does it look like?
|
- From a user (novice) point of view, how does it look like?
|
||||||
|
|
||||||
- Optimization:
|
|
||||||
- Show what process/coroutines are running and allow to kill (active process buffer?)
|
- Show what process/coroutines are running and allow to kill (active process buffer?)
|
||||||
- ctrl + p like in VSCode (without special buffers)
|
- ctrl + p like in VSCode (without special buffers)
|
||||||
- Maybe 2 windows?
|
- Maybe 2 windows?
|
||||||
|
|||||||
@@ -658,6 +658,7 @@ void Coro_OpenCode(mco_coro *co) {
|
|||||||
if (it.filename == ".git") {
|
if (it.filename == ".git") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
ProfileScopeEx(it.filename);
|
||||||
|
|
||||||
if (it.is_directory) {
|
if (it.is_directory) {
|
||||||
Add(&dirs, it.absolute_path);
|
Add(&dirs, it.absolute_path);
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
typedef void CoroutineProc(mco_coro *co);
|
typedef void CoroutineProc(mco_coro *co);
|
||||||
|
|
||||||
|
void CoRemove(String name) {
|
||||||
|
IterRemove(ActiveCoroutines) {
|
||||||
|
IterRemovePrepare(ActiveCoroutines);
|
||||||
|
if (it.name == name) {
|
||||||
|
mco_destroy(it.co);
|
||||||
|
remove_item = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define CoAdd(x) CoAddEx(x, #x)
|
#define CoAdd(x) CoAddEx(x, #x)
|
||||||
mco_coro *CoAddEx(CoroutineProc *proc, String name) {
|
mco_coro *CoAddEx(CoroutineProc *proc, String name) {
|
||||||
|
CoRemove(name);
|
||||||
mco_desc desc = mco_desc_init(proc, 0);
|
mco_desc desc = mco_desc_init(proc, 0);
|
||||||
|
|
||||||
mco_coro *coro = NULL;
|
mco_coro *coro = NULL;
|
||||||
@@ -56,13 +68,3 @@ Event *CoYield(mco_coro *co) {
|
|||||||
|
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoRemove(String name) {
|
|
||||||
IterRemove(ActiveCoroutines) {
|
|
||||||
IterRemovePrepare(ActiveCoroutines);
|
|
||||||
if (it.name == name) {
|
|
||||||
mco_destroy(it.co);
|
|
||||||
remove_item = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -119,25 +119,20 @@ void DrawWindow(Window *window, Event &event) {
|
|||||||
Color color_text = ColorText;
|
Color color_text = ColorText;
|
||||||
|
|
||||||
if (window->draw_darker) {
|
if (window->draw_darker) {
|
||||||
if (is_active) {
|
color_background = ColorTitleBarBackground;
|
||||||
color_background = ColorTitleBarActiveBackground;
|
|
||||||
} else {
|
|
||||||
color_background = ColorTitleBarBackground;
|
|
||||||
}
|
|
||||||
color_selection = ColorTitleBarSelection;
|
color_selection = ColorTitleBarSelection;
|
||||||
color_text = ColorTitleBarText;
|
color_text = ColorTitleBarText;
|
||||||
color_line_highlight = ColorTitleBarBackground;
|
color_line_highlight = ColorTitleBarLineHighlight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DrawRect(window->total_rect, color_background);
|
DrawRect(window->total_rect, color_background);
|
||||||
if (window->draw_darker) {
|
|
||||||
Rect2I rect = window->total_rect;
|
|
||||||
DrawRect(CutTop(&rect, 1), ColorResizerOutline);
|
|
||||||
}
|
|
||||||
|
|
||||||
Rect2I combined_document_line_number = window->document_rect;
|
Rect2I combined_document_line_number = window->document_rect;
|
||||||
if (window->draw_line_numbers) combined_document_line_number.min.x = window->line_numbers_rect.min.x;
|
if (window->draw_line_numbers) {
|
||||||
|
combined_document_line_number.min.x = window->line_numbers_rect.min.x;
|
||||||
|
}
|
||||||
SetScissor(combined_document_line_number);
|
SetScissor(combined_document_line_number);
|
||||||
BeginProfileScope(draw_caret_selection);
|
BeginProfileScope(draw_caret_selection);
|
||||||
Rect2I visible = GetVisibleCells(window);
|
Rect2I visible = GetVisibleCells(window);
|
||||||
@@ -287,6 +282,12 @@ void DrawWindow(Window *window, Event &event) {
|
|||||||
DrawRect(window->total_rect, {255, 255, 255, 25});
|
DrawRect(window->total_rect, {255, 255, 255, 25});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (window->draw_darker) {
|
||||||
|
SetScissor(window->total_rect);
|
||||||
|
Rect2I rect = window->total_rect;
|
||||||
|
DrawRect(CutTop(&rect, 1), ColorTitleBarOutline);
|
||||||
|
}
|
||||||
|
|
||||||
// darken the inactive windows
|
// darken the inactive windows
|
||||||
if (!is_active) {
|
if (!is_active) {
|
||||||
ProfileScope(DarkenInactiveRect);
|
ProfileScope(DarkenInactiveRect);
|
||||||
@@ -295,8 +296,9 @@ void DrawWindow(Window *window, Event &event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw resizer rect
|
// Draw resizer rect
|
||||||
{
|
if (GetSize(window->resizer_rect).x > 0){
|
||||||
Rect2I rect = window->resizer_rect;
|
Rect2I rect = window->resizer_rect;
|
||||||
|
SetScissor(window->resizer_rect);
|
||||||
DrawRect(rect, ColorResizerBackground);
|
DrawRect(rect, ColorResizerBackground);
|
||||||
DrawRect(CutRight(&rect, 1), ColorResizerOutline);
|
DrawRect(CutRight(&rect, 1), ColorResizerOutline);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ Color GruvboxFadedOrange = {0xaf, 0x3a, 0x03, 0xff};
|
|||||||
RegisterVariable(Color, ColorText, GruvboxDark0Hard);
|
RegisterVariable(Color, ColorText, GruvboxDark0Hard);
|
||||||
RegisterVariable(Color, ColorLoadTextHighlight, {0x00, 0x00, 0x00, 0x0F});
|
RegisterVariable(Color, ColorLoadTextHighlight, {0x00, 0x00, 0x00, 0x0F});
|
||||||
RegisterVariable(Color, ColorBackground, GruvboxLight0Hard);
|
RegisterVariable(Color, ColorBackground, GruvboxLight0Hard);
|
||||||
RegisterVariable(Color, ColorInactiveWindow, {0x00, 0x00, 0x00, 0x0F});
|
RegisterVariable(Color, ColorInactiveWindow, {0x00, 0x00, 0x00, 0x1F});
|
||||||
RegisterVariable(Color, ColorTextLineNumbers, GruvboxDark4);
|
RegisterVariable(Color, ColorTextLineNumbers, GruvboxDark4);
|
||||||
RegisterVariable(Color, ColorLineHighlight, GruvboxLight0Soft);
|
RegisterVariable(Color, ColorLineHighlight, GruvboxLight0Soft);
|
||||||
RegisterVariable(Color, ColorMainCaret, GruvboxDark0Hard);
|
RegisterVariable(Color, ColorMainCaret, GruvboxDark0Hard);
|
||||||
@@ -137,14 +137,14 @@ RegisterVariable(Color, ColorSelection, GruvboxLight1);
|
|||||||
RegisterVariable(Color, ColorWhitespaceDuringSelection, GruvboxLight4);
|
RegisterVariable(Color, ColorWhitespaceDuringSelection, GruvboxLight4);
|
||||||
RegisterVariable(Color, ColorMouseUnderline, GruvboxDark0Hard);
|
RegisterVariable(Color, ColorMouseUnderline, GruvboxDark0Hard);
|
||||||
RegisterVariable(Color, ColorCaretUnderline, GruvboxGray245);
|
RegisterVariable(Color, ColorCaretUnderline, GruvboxGray245);
|
||||||
RegisterVariable(Color, ColorFuzzySearchLineHighlight, GruvboxDark0);
|
|
||||||
RegisterVariable(Color, ColorScrollbarBackground, GruvboxLight2);
|
RegisterVariable(Color, ColorScrollbarBackground, GruvboxLight2);
|
||||||
RegisterVariable(Color, ColorScrollbarScroller, GruvboxLight1);
|
RegisterVariable(Color, ColorScrollbarScroller, GruvboxLight1);
|
||||||
RegisterVariable(Color, ColorScrollbarScrollerSelected, GruvboxLight0Hard);
|
RegisterVariable(Color, ColorScrollbarScrollerSelected, GruvboxLight0Hard);
|
||||||
RegisterVariable(Color, ColorTitleBarText, GruvboxDark2);
|
RegisterVariable(Color, ColorTitleBarText, GruvboxDark0Hard);
|
||||||
RegisterVariable(Color, ColorTitleBarBackground, GruvboxLight1);
|
RegisterVariable(Color, ColorTitleBarBackground, GruvboxLight0Hard);
|
||||||
RegisterVariable(Color, ColorTitleBarActiveBackground, {0xfe, 0xfe, 0xfe, 0xfe});
|
|
||||||
RegisterVariable(Color, ColorTitleBarSelection, GruvboxLight3);
|
RegisterVariable(Color, ColorTitleBarSelection, GruvboxLight3);
|
||||||
|
RegisterVariable(Color, ColorTitleBarLineHighlight, GruvboxLight0Soft);
|
||||||
|
RegisterVariable(Color, ColorTitleBarOutline, GruvboxLight3);
|
||||||
RegisterVariable(Color, ColorResizerBackground, GruvboxLight0Hard);
|
RegisterVariable(Color, ColorResizerBackground, GruvboxLight0Hard);
|
||||||
RegisterVariable(Color, ColorResizerOutline, GruvboxLight3);
|
RegisterVariable(Color, ColorResizerOutline, GruvboxLight3);
|
||||||
RegisterVariable(Int, ConfigWaitForEvents, 1);
|
RegisterVariable(Int, ConfigWaitForEvents, 1);
|
||||||
|
|||||||
@@ -121,9 +121,9 @@ void InitWindows() {
|
|||||||
|
|
||||||
CreateWind();
|
CreateWind();
|
||||||
CommandWindowInit();
|
CommandWindowInit();
|
||||||
SearchWindowInit();
|
|
||||||
StatusWindowInit();
|
StatusWindowInit();
|
||||||
DebugWindowInit();
|
DebugWindowInit();
|
||||||
|
SearchWindowInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CalcNiceties(Window *n) {
|
void CalcNiceties(Window *n) {
|
||||||
@@ -151,9 +151,9 @@ void LayoutWindows(int16_t wx, int16_t wy) {
|
|||||||
Rect2I screen_rect = RectI0Size(wx, wy);
|
Rect2I screen_rect = RectI0Size(wx, wy);
|
||||||
|
|
||||||
CommandWindowLayout(&screen_rect, wx, wy);
|
CommandWindowLayout(&screen_rect, wx, wy);
|
||||||
SearchWindowLayout(&screen_rect, wx, wy);
|
|
||||||
StatusWindowLayout(&screen_rect, wx, wy);
|
StatusWindowLayout(&screen_rect, wx, wy);
|
||||||
DebugWindowLayout(&screen_rect, wx, wy);
|
DebugWindowLayout(&screen_rect, wx, wy);
|
||||||
|
SearchWindowLayout(&screen_rect, wx, wy);
|
||||||
|
|
||||||
// Column layout
|
// Column layout
|
||||||
Int c = 0;
|
Int c = 0;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ void CommandWindowInit() {
|
|||||||
window->draw_line_numbers = false;
|
window->draw_line_numbers = false;
|
||||||
window->draw_scrollbar = false;
|
window->draw_scrollbar = false;
|
||||||
window->draw_darker = true;
|
window->draw_darker = true;
|
||||||
window->draw_line_highlight = false;
|
window->draw_line_highlight = true;
|
||||||
window->layout = false;
|
window->layout = false;
|
||||||
window->visible = false;
|
window->visible = false;
|
||||||
window->sync_visibility_with_focus = true;
|
window->sync_visibility_with_focus = true;
|
||||||
@@ -27,8 +27,6 @@ void CommandWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
|||||||
n->document_rect = n->total_rect = CutBottom(rect, barsize);
|
n->document_rect = n->total_rect = CutBottom(rect, barsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Int FuzzyCloserWordBegin = 5;
|
|
||||||
const Int FuzzyConsecutiveMultiplier = 3;
|
|
||||||
Int FuzzyRate(String16 string, String16 with) {
|
Int FuzzyRate(String16 string, String16 with) {
|
||||||
ProfileFunction();
|
ProfileFunction();
|
||||||
if (with.len == 0) return 0;
|
if (with.len == 0) return 0;
|
||||||
@@ -36,20 +34,18 @@ Int FuzzyRate(String16 string, String16 with) {
|
|||||||
Int consecutive = 0;
|
Int consecutive = 0;
|
||||||
Int with_i = 0;
|
Int with_i = 0;
|
||||||
for (Int i = 0; i < string.len; i++) {
|
for (Int i = 0; i < string.len; i++) {
|
||||||
if (string.data[i] == with[with_i]) {
|
if (ToLowerCase(string.data[i]) == ToLowerCase(with[with_i])) {
|
||||||
Int closer_begin = ClampBottom((Int)0, FuzzyCloserWordBegin - i);
|
consecutive += 1;
|
||||||
points += closer_begin;
|
|
||||||
consecutive++;
|
|
||||||
with_i += 1;
|
with_i += 1;
|
||||||
} else {
|
} else {
|
||||||
points += consecutive * FuzzyConsecutiveMultiplier;
|
with_i = 0;
|
||||||
|
points += consecutive * consecutive;
|
||||||
consecutive = 0;
|
consecutive = 0;
|
||||||
with_i = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (with_i >= with.len) with_i = 0;
|
if (with_i >= with.len) with_i = 0;
|
||||||
}
|
}
|
||||||
points += consecutive * FuzzyConsecutiveMultiplier;
|
points += consecutive * consecutive;
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +141,7 @@ void Command_ShowDebugBufferList() {
|
|||||||
ActiveWindowID = command_bar.window->id;
|
ActiveWindowID = command_bar.window->id;
|
||||||
ResetBuffer(command_bar.buffer);
|
ResetBuffer(command_bar.buffer);
|
||||||
For (Buffers) {
|
For (Buffers) {
|
||||||
RawAppendf(command_bar.buffer, "\n%-80S || %S", SkipToLastSlash(it->name), it->name);
|
RawAppendf(command_bar.buffer, "\n%S", it->name);
|
||||||
}
|
}
|
||||||
command_bar.view->update_scroll = true;
|
command_bar.view->update_scroll = true;
|
||||||
SelectRange(command_bar.view, GetBufferBeginAsRange(command_bar.buffer));
|
SelectRange(command_bar.view, GetBufferBeginAsRange(command_bar.buffer));
|
||||||
@@ -167,7 +163,7 @@ void Command_ShowBufferList() {
|
|||||||
if (it->special) {
|
if (it->special) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
RawAppendf(command_bar.buffer, "\n%-80S || %S", SkipToLastSlash(it->name), it->name);
|
RawAppendf(command_bar.buffer, "\n%S", it->name);
|
||||||
}
|
}
|
||||||
command_bar.view->update_scroll = true;
|
command_bar.view->update_scroll = true;
|
||||||
SelectRange(command_bar.view, GetBufferBeginAsRange(command_bar.buffer));
|
SelectRange(command_bar.view, GetBufferBeginAsRange(command_bar.buffer));
|
||||||
|
|||||||
@@ -11,13 +11,17 @@ void SearchWindowInit() {
|
|||||||
window->draw_line_numbers = false;
|
window->draw_line_numbers = false;
|
||||||
window->draw_scrollbar = false;
|
window->draw_scrollbar = false;
|
||||||
window->draw_darker = true;
|
window->draw_darker = true;
|
||||||
window->draw_line_highlight = false;
|
window->draw_line_highlight = true;
|
||||||
window->layout = false;
|
window->layout = false;
|
||||||
window->visible = false;
|
window->visible = false;
|
||||||
window->lose_visibility_on_escape = true;
|
window->lose_visibility_on_escape = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SearchWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
void SearchWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
||||||
|
Window *command_window = GetWindow(CommandWindowID);
|
||||||
|
if (command_window->visible) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Window *n = GetWindow(SearchWindowID);
|
Window *n = GetWindow(SearchWindowID);
|
||||||
Rect2I copy_rect = *rect;
|
Rect2I copy_rect = *rect;
|
||||||
if (!n->visible) {
|
if (!n->visible) {
|
||||||
|
|||||||
@@ -6,15 +6,21 @@ void StatusWindowInit() {
|
|||||||
View *view = CreateView(buffer->id);
|
View *view = CreateView(buffer->id);
|
||||||
view->special = true;
|
view->special = true;
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
window->font = &SecondaryFont;
|
// window->font = &SecondaryFont;
|
||||||
window->draw_line_numbers = false;
|
window->draw_line_numbers = false;
|
||||||
window->draw_scrollbar = false;
|
window->draw_scrollbar = false;
|
||||||
window->draw_line_highlight = false;
|
window->draw_line_highlight = true;
|
||||||
window->draw_darker = true;
|
window->draw_darker = true;
|
||||||
window->layout = false;
|
window->layout = false;
|
||||||
|
window->jump_history = false;
|
||||||
|
window->lose_focus_on_escape = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatusWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
void StatusWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
||||||
|
Window *command_window = GetWindow(CommandWindowID);
|
||||||
|
if (command_window->visible) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Window *n = GetWindow(StatusBarWindowID);
|
Window *n = GetWindow(StatusBarWindowID);
|
||||||
Rect2I copy_rect = *rect;
|
Rect2I copy_rect = *rect;
|
||||||
if (!n->visible) {
|
if (!n->visible) {
|
||||||
|
|||||||
Reference in New Issue
Block a user