This commit is contained in:
Krzosa Karol
2024-08-05 21:03:19 +02:00
parent e514c29de4
commit f7100ae8ee
6 changed files with 45 additions and 40 deletions

View File

@@ -117,6 +117,13 @@ Rect2 Rect2FromSize(Vec2 pos, Vec2 size) {
return result; return result;
} }
Rect2 Rect2MidHalf(Vec2 mid, Vec2 half_size) {
Rect2 result = {};
result.min = mid - half_size;
result.max = mid + half_size;
return result;
}
Rect2 Shrink(Rect2 result, float v) { Rect2 Shrink(Rect2 result, float v) {
result.min.x += v; result.min.x += v;
result.max.x -= v; result.max.x -= v;

View File

@@ -37,6 +37,16 @@ bool IsLoadWord(wchar_t w) {
return result; return result;
} }
bool IsBrace(wchar_t c) {
bool result = c == '{' || c == '}';
return result;
}
bool IsParen(wchar_t c) {
bool result = c == '(' || c == ')';
return result;
}
bool IsAlphabetic(wchar_t a) { bool IsAlphabetic(wchar_t a) {
bool result = (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z'); bool result = (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
return result; return result;

View File

@@ -355,12 +355,18 @@ bool GlobalCommand(Event event) {
} else if (event.clicks >= 2) { } else if (event.clicks >= 2) {
view->carets.len = 1; view->carets.len = 1;
// @todo: consider simplifying this, is enclosing a paren even useful?
// like it's pretty hard to actually hit with mouse...
if (InBounds({caret.range.min - 1, caret.range.max + 1}, p)) { if (InBounds({caret.range.min - 1, caret.range.max + 1}, p)) {
Range range = EncloseWord(buffer, p); Range range = EncloseWord(buffer, p);
wchar_t scope = GetChar(buffer, p); wchar_t scope = GetChar(buffer, p);
if (scope == '{' || scope == '}') { if (!IsParen(scope) && !IsBrace(scope)) {
scope = GetChar(buffer, p);
}
if (IsBrace(scope)) {
range = EncloseScope(buffer, p, '{', '}'); range = EncloseScope(buffer, p, '{', '}');
} else if (scope == '(' || scope == ')') { } else if (IsParen(scope)) {
range = EncloseScope(buffer, p, '(', ')'); range = EncloseScope(buffer, p, '(', ')');
} else { } else {
if (event.clicks == 3) { if (event.clicks == 3) {

View File

@@ -303,7 +303,6 @@ void ReloadLuaConfig() {
String16 EvalString(Allocator allocator, String16 string16) { String16 EvalString(Allocator allocator, String16 string16) {
Scratch scratch((Arena *)allocator.object); Scratch scratch((Arena *)allocator.object);
String string = ToString(scratch, string16); String string = ToString(scratch, string16);
string = Format(scratch, "return %.*s", FmtString(string));
if (luaL_dostring(LuaState, string.data) != LUA_OK) { if (luaL_dostring(LuaState, string.data) != LUA_OK) {
const char *error_message = lua_tostring(LuaState, -1); const char *error_message = lua_tostring(LuaState, -1);
ReportWarningf("Execution error! %s", error_message); ReportWarningf("Execution error! %s", error_message);
@@ -325,19 +324,5 @@ String16 EvalString(Allocator allocator, String16 string16) {
void Command_EvalLua(View *view, String16 string) { void Command_EvalLua(View *view, String16 string) {
Scratch scratch; Scratch scratch;
Buffer *buffer = GetBuffer(view->active_buffer); Buffer *buffer = GetBuffer(view->active_buffer);
String16 eval_result = EvalString(scratch, string); EvalString(scratch, string);
if (eval_result.len) {
Command_SelectEntireBuffer(view);
Command_Replace(view, eval_result);
Command_SelectRangeOneCursor(view, {});
Command_Replace(view, L"\n");
Command_SelectRangeOneCursor(view, {});
}
else {
Range range = GetLineRangeWithoutNL(*buffer, 0);
Command_SelectRangeOneCursor(view, range);
Command_Replace(view, {});
}
} }

View File

@@ -1,32 +1,26 @@
- page up and down should also scroll and leave you in exactly same scroll BUG: when redo and ctrl pressed a bugged enclosure rect is shown - we probably want to pass the event to render and just do everything there!
- I think the way sublime text and we display line highlights is confusing with multiple cursors (line highlight can be confused with selection)
- ctrl + delete maybe should stop on new line but it keeps on going, sublime is much more careful with deleting
BUG: there is a click hang when switching windows sometimes, you click after select and it doesn't switch active window
BUG: when redo and ctrl pressed a bugged enclosure rect is shown
- mouse execute - we should be able to execute selection using mouse and keyboard (for now only main cursor)
- experiment with using multiple cursors to select command and it's input - we should be able to execute a buffer (even scratch
- search as a command to execute which is going to be in the title bar - search as a command to execute which is going to be in the title bar
- each buffer needs a directory even the special ones: C:\a\b\c\+errors? - each buffer needs a directory even the special ones: C:\a\b\c\+errors?
- open directories - resulting in buffer with dir listing and proper buffer name - open directories - resulting in buffer with dir listing and proper buffer name
- clean \r\n into \n on trim and load - clean \r\n into \n on trim and load
- search backwards
- Dump editor state to file - draw indentation levels like in sublime (those lines)
- make the editor replayable, store events and then replay, be careful about globals
- global config and local config
- load all files in a directory - load all files in a directory
- search backwards - word complete
- Search all buffers in 10X style, incrementally searched results popping up on every key press (maybe we need coroutine library in C so this is easier?) - Search all buffers in 10X style, incrementally searched results popping up on every key press (maybe we need coroutine library in C so this is easier?)
- Implement shell interaction (here we also could use the coroutine library)
- Search and replace - Search and replace
- select space between parens,braces but make it good - global config and local config
- Implement shell interaction (here we also could use the coroutine library) - page up and down should also scroll and leave you in exactly same scroll
- word complete - I think the way sublime text and we display line highlights is confusing with multiple cursors (line highlight can be confused with selection)
- ctrl + delete maybe should stop on new line but it keeps on going, sublime is much more careful with deleting
BUG: there is a click hang when switching windows sometimes, you click after select and it doesn't switch active window
- Windows - Windows
@@ -39,6 +33,7 @@ BUG: when redo and ctrl pressed a bugged enclosure rect is shown
backlog backlog
- make the editor replayable, store events and then replay, be careful about globals
- maybe open should return multiple options if there are many more? (like in sublime if many symbols you get a window and you choose and it automatically jumps you to the symbol in the background) - maybe open should return multiple options if there are many more? (like in sublime if many symbols you get a window and you choose and it automatically jumps you to the symbol in the background)
- we could rewrite kill lines with simpler commands - extend selection to encompass lines->replace - we could rewrite kill lines with simpler commands - extend selection to encompass lines->replace
- I want a way to assign flags to buffers/views/windows from user perspective so that console window concept can be created from user space - I want a way to assign flags to buffers/views/windows from user perspective so that console window concept can be created from user space

View File

@@ -318,7 +318,9 @@ void LayoutWindows() {
Window *window = GetWindow(CommandWindowID); Window *window = GetWindow(CommandWindowID);
if (window->visible) { if (window->visible) {
Rect2 screen_rect = GetScreenRectF(); Rect2 screen_rect = GetScreenRectF();
Vec2 size = GetSize(screen_rect); Vec2 size = GetSize(screen_rect);
CutTop(&screen_rect, size.y * 0.05f); CutTop(&screen_rect, size.y * 0.05f);
CutLeft(&screen_rect, size.x * 0.2f); CutLeft(&screen_rect, size.x * 0.2f);
CutRight(&screen_rect, size.x * 0.2f); CutRight(&screen_rect, size.x * 0.2f);