Implement new search window
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
- 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?
|
||||||
|
|
||||||
|
- 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)
|
||||||
|
- I THINK WE NEED A SPECIAL VIEW, this is too slow
|
||||||
- Move to the top so that it can be progressively expanded using coroutines by appending at the end
|
- Move to the top so that it can be progressively expanded using coroutines by appending at the end
|
||||||
- Maybe 2 windows?
|
- Maybe 2 windows?
|
||||||
- Guide on the first page for new users with links to configs, tutorials
|
- Guide on the first page for new users with links to configs, tutorials
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ struct HistoryEntry {
|
|||||||
struct Buffer {
|
struct Buffer {
|
||||||
BufferID id;
|
BufferID id;
|
||||||
String name;
|
String name;
|
||||||
|
Int begin_frame_change_id;
|
||||||
Int change_id;
|
Int change_id;
|
||||||
Int user_change_id;
|
Int user_change_id;
|
||||||
Int file_mod_time;
|
Int file_mod_time;
|
||||||
|
|||||||
@@ -1063,6 +1063,8 @@ void Command_NewLine() {
|
|||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
if (active.window->id == CommandWindowID) {
|
if (active.window->id == CommandWindowID) {
|
||||||
CommandWindowOpen(active);
|
CommandWindowOpen(active);
|
||||||
|
} else if (active.window->id == SearchWindowID) {
|
||||||
|
SearchWindowFindNext(true);
|
||||||
} else {
|
} else {
|
||||||
IdentedNewLine(active.view);
|
IdentedNewLine(active.view);
|
||||||
}
|
}
|
||||||
@@ -1108,7 +1110,6 @@ void Command_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]));
|
||||||
|
|
||||||
// @todo: move to hook post command???
|
|
||||||
if (active.window->lose_focus_on_escape && active.window->id == ActiveWindowID) {
|
if (active.window->lose_focus_on_escape && active.window->id == ActiveWindowID) {
|
||||||
if (active.window->layout) {
|
if (active.window->layout) {
|
||||||
//
|
//
|
||||||
@@ -1116,4 +1117,13 @@ void Command_ClearCarets() {
|
|||||||
ActiveWindowID = LastActiveLayoutWindowID;
|
ActiveWindowID = LastActiveLayoutWindowID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
For (Windows) {
|
||||||
|
if (it->lose_visibility_on_escape && it->visible) {
|
||||||
|
if (ActiveWindowID == it->id) {
|
||||||
|
ActiveWindowID = LastActiveLayoutWindowID;
|
||||||
|
}
|
||||||
|
it->visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
} RegisterCommand(Command_ClearCarets, "escape");
|
} RegisterCommand(Command_ClearCarets, "escape");
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ BufferID DebugBufferID;
|
|||||||
|
|
||||||
WindowID CommandWindowID;
|
WindowID CommandWindowID;
|
||||||
WindowID StatusBarWindowID;
|
WindowID StatusBarWindowID;
|
||||||
WindowID SearchBarWindowID;
|
WindowID SearchWindowID;
|
||||||
ViewID SearchViewID;
|
ViewID SearchViewID;
|
||||||
BufferID SearchBufferID;
|
BufferID SearchBufferID;
|
||||||
|
|
||||||
|
|||||||
@@ -388,7 +388,6 @@ void OnCommand(Event event) {
|
|||||||
|
|
||||||
BSet main = GetBSet(LastActiveLayoutWindowID);
|
BSet main = GetBSet(LastActiveLayoutWindowID);
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
Int buffer_change_id = active.buffer->change_id;
|
|
||||||
|
|
||||||
For (CommandFunctions) {
|
For (CommandFunctions) {
|
||||||
if (it.trigger && MatchEvent(it.trigger, &event)) {
|
if (it.trigger && MatchEvent(it.trigger, &event)) {
|
||||||
@@ -514,12 +513,15 @@ void Update(Event event) {
|
|||||||
view->update_scroll = true;
|
view->update_scroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OnCommand(event);
|
OnCommand(event);
|
||||||
StatusWindowUpdate();
|
StatusWindowUpdate();
|
||||||
DebugWindowUpdate();
|
DebugWindowUpdate();
|
||||||
CommandWindowUpdate();
|
CommandWindowUpdate();
|
||||||
|
SearchWindowUpdate();
|
||||||
UpdateProcesses();
|
UpdateProcesses();
|
||||||
CoUpdate(&event);
|
CoUpdate(&event);
|
||||||
|
For (Buffers) it->begin_frame_change_id = it->change_id; // after last place we modify
|
||||||
|
|
||||||
{
|
{
|
||||||
ProfileScope(WindowEndOfFrameVisibilityAndLastActive);
|
ProfileScope(WindowEndOfFrameVisibilityAndLastActive);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ struct Window {
|
|||||||
double mouse_scroller_offset;
|
double mouse_scroller_offset;
|
||||||
int z;
|
int z;
|
||||||
double weight;
|
double weight;
|
||||||
Int status_bar_last_buffer_change_id;
|
Caret search_bar_anchor;
|
||||||
|
|
||||||
Array<GotoCrumb> goto_history;
|
Array<GotoCrumb> goto_history;
|
||||||
Array<GotoCrumb> goto_redo;
|
Array<GotoCrumb> goto_redo;
|
||||||
@@ -33,6 +33,7 @@ struct Window {
|
|||||||
bool close : 1;
|
bool close : 1;
|
||||||
bool sync_visibility_with_focus : 1;
|
bool sync_visibility_with_focus : 1;
|
||||||
bool lose_focus_on_escape : 1;
|
bool lose_focus_on_escape : 1;
|
||||||
|
bool lose_visibility_on_escape : 1;
|
||||||
bool jump_history : 1;
|
bool jump_history : 1;
|
||||||
bool eval_command : 1;
|
bool eval_command : 1;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
void SearchWindowInit() {
|
void SearchWindowInit() {
|
||||||
Window *window = CreateWind();
|
Window *window = CreateWind();
|
||||||
SearchBarWindowID = window->id;
|
SearchWindowID = window->id;
|
||||||
Buffer *buffer = CreateBuffer(SysAllocator, "search_bar");
|
Buffer *buffer = CreateBuffer(SysAllocator, "search_bar");
|
||||||
buffer->special = true;
|
buffer->special = true;
|
||||||
SearchBufferID = buffer->id;
|
SearchBufferID = buffer->id;
|
||||||
@@ -14,11 +14,11 @@ void SearchWindowInit() {
|
|||||||
window->draw_line_highlight = false;
|
window->draw_line_highlight = false;
|
||||||
window->layout = false;
|
window->layout = false;
|
||||||
window->visible = false;
|
window->visible = false;
|
||||||
window->lose_focus_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 *n = GetWindow(SearchBarWindowID);
|
Window *n = GetWindow(SearchWindowID);
|
||||||
Rect2I copy_rect = *rect;
|
Rect2I copy_rect = *rect;
|
||||||
if (!n->visible) {
|
if (!n->visible) {
|
||||||
rect = ©_rect;
|
rect = ©_rect;
|
||||||
@@ -28,6 +28,35 @@ void SearchWindowLayout(Rect2I *rect, Int wx, Int wy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Command_Search() {
|
void Command_Search() {
|
||||||
Window *window = GetWindow(SearchBarWindowID);
|
BSet set = GetBSet(SearchWindowID);
|
||||||
window->visible = !window->visible;
|
set.window->visible = true;
|
||||||
|
ActiveWindowID = SearchWindowID;
|
||||||
|
SelectEntireBuffer(set.view);
|
||||||
} RegisterCommand(Command_Search, "ctrl-f");
|
} RegisterCommand(Command_Search, "ctrl-f");
|
||||||
|
|
||||||
|
void SearchWindowFindNext(bool forward = true) {
|
||||||
|
BSet main = GetBSet(LastActiveLayoutWindowID);
|
||||||
|
BSet set = GetBSet(SearchWindowID);
|
||||||
|
String16 seek = GetString(set.buffer, GetRange(set.buffer));
|
||||||
|
Find(main.view, seek, forward);
|
||||||
|
main.window->search_bar_anchor = main.view->carets[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void Command_SearchNext() {
|
||||||
|
SearchWindowFindNext(true);
|
||||||
|
} RegisterCommand(Command_SearchNext, "f3");
|
||||||
|
|
||||||
|
void Command_SearchPrev() {
|
||||||
|
SearchWindowFindNext(false);
|
||||||
|
} RegisterCommand(Command_SearchPrev, "shift-f3 | shift-enter");
|
||||||
|
|
||||||
|
void SearchWindowUpdate() {
|
||||||
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
|
if (active.window->id == SearchWindowID && active.buffer->begin_frame_change_id != active.buffer->change_id) {
|
||||||
|
BSet main = GetBSet(LastActiveLayoutWindowID);
|
||||||
|
BSet set = GetBSet(SearchWindowID);
|
||||||
|
main.view->carets[0] = main.window->search_bar_anchor;
|
||||||
|
String16 seek = GetString(set.buffer, GetRange(set.buffer));
|
||||||
|
Find(main.view, seek, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void StatusWindowUpdate() {
|
|||||||
|
|
||||||
// Parse the title and line
|
// Parse the title and line
|
||||||
if (title.window->id == ActiveWindowID) {
|
if (title.window->id == ActiveWindowID) {
|
||||||
if (title.buffer->change_id == title.window->status_bar_last_buffer_change_id) {
|
if (title.buffer->change_id == title.buffer->begin_frame_change_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String16 buffer_name = GetString(title.buffer, replace_range);
|
String16 buffer_name = GetString(title.buffer, replace_range);
|
||||||
@@ -63,7 +63,6 @@ void StatusWindowUpdate() {
|
|||||||
if (GetFront(caret) != buffer_pos) {
|
if (GetFront(caret) != buffer_pos) {
|
||||||
caret = MakeCaret(buffer_pos);
|
caret = MakeCaret(buffer_pos);
|
||||||
}
|
}
|
||||||
title.window->status_bar_last_buffer_change_id = title.buffer->change_id;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user