Find all: alt-enter, alt-f3
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
- 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?
|
||||||
|
|
||||||
|
- Search
|
||||||
|
- alt + w: word search
|
||||||
|
- alt + c: case sensitive
|
||||||
|
|
||||||
- Open with seek string (open at pattern) filename:32 filename:/^Window$/
|
- Open with seek string (open at pattern) filename:32 filename:/^Window$/
|
||||||
- build console window
|
- build console window
|
||||||
- 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?)
|
||||||
@@ -21,7 +25,6 @@ backlog
|
|||||||
FEATURE Search whole words, case sensitive etc.
|
FEATURE Search whole words, case sensitive etc.
|
||||||
FEATURE Select all searched occurences
|
FEATURE Select all searched occurences
|
||||||
FEATURE commands for scrolling: center, cursor_at_bottom_of_screen, cursor_at_top
|
FEATURE commands for scrolling: center, cursor_at_bottom_of_screen, cursor_at_top
|
||||||
FEATURE Kill buffer command (it should be marked for deletion and deleted at the end of frame!)
|
|
||||||
FEATURE Some decl/function indexing in fuzzy format
|
FEATURE Some decl/function indexing in fuzzy format
|
||||||
ISSUE? Fix jump scroll, the query ends up the last line on screen, kind of wacky
|
ISSUE? Fix jump scroll, the query ends up the last line on screen, kind of wacky
|
||||||
FEATURE dump text editor state to file, restore state
|
FEATURE dump text editor state to file, restore state
|
||||||
|
|||||||
@@ -892,10 +892,9 @@ void Command_MakeFontSmaller() {
|
|||||||
void Command_Open() {
|
void Command_Open() {
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
if (active.window->id == CommandWindowID) {
|
if (active.window->id == CommandWindowID) {
|
||||||
CommandWindowOpen(active);
|
return;
|
||||||
} else {
|
|
||||||
Open(FetchLoadWord(active.view));
|
|
||||||
}
|
}
|
||||||
|
Open(FetchLoadWord(active.view));
|
||||||
} RegisterCommand(Command_Open, "ctrl-q");
|
} RegisterCommand(Command_Open, "ctrl-q");
|
||||||
|
|
||||||
void Command_KillSelectedLines() {
|
void Command_KillSelectedLines() {
|
||||||
@@ -1115,14 +1114,11 @@ void Command_InsertNewLineDown() {
|
|||||||
} RegisterCommand(Command_InsertNewLineDown, "ctrl-enter");
|
} RegisterCommand(Command_InsertNewLineDown, "ctrl-enter");
|
||||||
|
|
||||||
void Command_NewLine() {
|
void Command_NewLine() {
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
if (ActiveWindowID == CommandWindowID || ActiveWindowID == SearchWindowID) {
|
||||||
if (active.window->id == CommandWindowID) {
|
return;
|
||||||
CommandWindowOpen(active);
|
|
||||||
} else if (active.window->id == SearchWindowID) {
|
|
||||||
SearchWindowFindNext(true);
|
|
||||||
} else {
|
|
||||||
IdentedNewLine(active.view);
|
|
||||||
}
|
}
|
||||||
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
|
IdentedNewLine(active.view);
|
||||||
} RegisterCommand(Command_NewLine, "enter");
|
} RegisterCommand(Command_NewLine, "enter");
|
||||||
|
|
||||||
void Command_CreateCaretOnNextFind() {
|
void Command_CreateCaretOnNextFind() {
|
||||||
|
|||||||
@@ -159,6 +159,24 @@ Caret FindNext(Buffer *buffer, String16 needle, Caret caret) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array<Caret> FindAll(Allocator allocator, Buffer *buffer, String16 needle) {
|
||||||
|
Array<Caret> result = {allocator};
|
||||||
|
String16 string = GetString(buffer);
|
||||||
|
String16 start = string;
|
||||||
|
for (;;) {
|
||||||
|
Int index = 0;
|
||||||
|
if (Seek(string, needle, &index)) {
|
||||||
|
Int back = index + (Int)(string.data - start.data);
|
||||||
|
Int front = back + needle.len;
|
||||||
|
Add(&result, MakeCaret(front, back));
|
||||||
|
string = Skip(string, index + needle.len);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void SelectRange(View *view, Caret caret) {
|
void SelectRange(View *view, Caret caret) {
|
||||||
view->carets.len = 1;
|
view->carets.len = 1;
|
||||||
view->carets[0] = caret;
|
view->carets[0] = caret;
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ void EvalCommand(String16 command) {
|
|||||||
EvalCommand(ToString(scratch, command));
|
EvalCommand(ToString(scratch, command));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandWindowOpen(BSet active) {
|
void OpenCommand(BSet active) {
|
||||||
ProfileFunction();
|
ProfileFunction();
|
||||||
Range range = active.view->carets[0].range;
|
Range range = active.view->carets[0].range;
|
||||||
String16 string = FetchLoadWord(active.view);
|
String16 string = FetchLoadWord(active.view);
|
||||||
@@ -208,3 +208,11 @@ void CommandWindowOpen(BSet active) {
|
|||||||
Open(string);
|
Open(string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Command_OpenCommand() {
|
||||||
|
if (ActiveWindowID != CommandWindowID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
|
OpenCommand(active);
|
||||||
|
} RegisterCommand(Command_OpenCommand, "ctrl-q | enter");
|
||||||
@@ -57,13 +57,61 @@ void SearchWindowFindNext(bool forward = true) {
|
|||||||
main.window->search_bar_anchor = main.view->carets[0];
|
main.window->search_bar_anchor = main.view->carets[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Command_SearchNextInSearch() {
|
||||||
|
if (ActiveWindowID != SearchWindowID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SearchWindowFindNext(true);
|
||||||
|
} RegisterCommand(Command_SearchNextInSearch, "enter");
|
||||||
|
|
||||||
|
void Command_SearchPrevInSearch() {
|
||||||
|
if (ActiveWindowID != SearchWindowID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SearchWindowFindNext(false);
|
||||||
|
} RegisterCommand(Command_SearchPrevInSearch, "shift-enter");
|
||||||
|
|
||||||
void Command_SearchNext() {
|
void Command_SearchNext() {
|
||||||
SearchWindowFindNext(true);
|
SearchWindowFindNext(true);
|
||||||
} RegisterCommand(Command_SearchNext, "f3");
|
} RegisterCommand(Command_SearchNext, "f3");
|
||||||
|
|
||||||
void Command_SearchPrev() {
|
void Command_SearchPrev() {
|
||||||
SearchWindowFindNext(false);
|
SearchWindowFindNext(false);
|
||||||
} RegisterCommand(Command_SearchPrev, "shift-f3 | shift-enter");
|
} RegisterCommand(Command_SearchPrev, "shift-f3");
|
||||||
|
|
||||||
|
void SearchAll() {
|
||||||
|
Scratch scratch;
|
||||||
|
BSet main = GetBSet(LastActiveLayoutWindowID);
|
||||||
|
BSet set = GetBSet(SearchWindowID);
|
||||||
|
String16 needle = GetString(set.buffer, GetRange(set.buffer));
|
||||||
|
Array<Caret> all = FindAll(scratch, main.buffer, needle);
|
||||||
|
if (all.len > 0) {
|
||||||
|
main.view->carets.len = 0;
|
||||||
|
For (all) {
|
||||||
|
Add(&main.view->carets, it);
|
||||||
|
}
|
||||||
|
MergeCarets(main.buffer, &main.view->carets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Command_SearchAll() {
|
||||||
|
SearchAll();
|
||||||
|
BSet set = GetBSet(SearchWindowID);
|
||||||
|
set.window->visible = false;
|
||||||
|
ActiveWindowID = LastActiveLayoutWindowID;
|
||||||
|
} RegisterCommand(Command_SearchAll, "alt-f3");
|
||||||
|
|
||||||
|
|
||||||
|
void Command_SearchAllInSearch() {
|
||||||
|
if (ActiveWindowID != SearchWindowID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SearchAll();
|
||||||
|
BSet set = GetBSet(SearchWindowID);
|
||||||
|
set.window->visible = false;
|
||||||
|
ActiveWindowID = LastActiveLayoutWindowID;
|
||||||
|
} RegisterCommand(Command_SearchAllInSearch, "alt-enter");
|
||||||
|
|
||||||
|
|
||||||
void SearchWindowUpdate() {
|
void SearchWindowUpdate() {
|
||||||
BSet active = GetBSet(ActiveWindowID);
|
BSet active = GetBSet(ActiveWindowID);
|
||||||
|
|||||||
Reference in New Issue
Block a user