Compare commits

..

4 Commits

Author SHA1 Message Date
Krzosa Karol
20d71722ea GC temp buffers after they are 25th in history 2026-03-22 10:12:36 +01:00
Krzosa Karol
cf383c9772 Update todos 2026-03-22 10:12:18 +01:00
Krzosa Karol
82dceaca68 Missing include 2026-03-22 10:12:07 +01:00
Krzosa Karol
4f4940bcd3 Add memory usage in debug window 2026-03-22 10:11:25 +01:00
6 changed files with 74 additions and 61 deletions

View File

@@ -18,6 +18,8 @@ typedef void OSErrorReport(const char *, ...);
#include <poll.h> #include <poll.h>
#include <execinfo.h> #include <execinfo.h>
#include <backtrace.h> #include <backtrace.h>
#include <sys/resource.h>
API void (*Error)(const char *, ...); API void (*Error)(const char *, ...);

View File

@@ -48,7 +48,13 @@ void UpdateDebugWindow() {
return; return;
} }
RawReplaceText(set.buffer, GetRange(set.buffer), u"Active buffers and views:\n"); RawReplaceText(set.buffer, GetRange(set.buffer), u"");
#if OS_POSIX
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
RawAppendf(set.buffer, "MemoryUsage: %lld\n", usage.ru_maxrss);
#endif
For (Views) { For (Views) {
Buffer *buffer = GetBuffer(it->active_buffer); Buffer *buffer = GetBuffer(it->active_buffer);
RawAppendf(set.buffer, "view->id:%lld, buffer->id:%lld, buffer->name:%S\n", (long long)it->id.id, (long long)buffer->id.id, buffer->name); RawAppendf(set.buffer, "view->id:%lld, buffer->id:%lld, buffer->name:%S\n", (long long)it->id.id, (long long)buffer->id.id, buffer->name);

View File

@@ -15,6 +15,7 @@ void New(Window *window, String name = "") {
name = GetUniqueBufferName(dir, "new"); name = GetUniqueBufferName(dir, "new");
} }
WindowOpenBufferView(window, name); WindowOpenBufferView(window, name);
RunGCThisFrame = true;
} }
void CMD_New() { void CMD_New() {

View File

@@ -1,71 +1,57 @@
/* /*
- [x] list_functions.sh and rg in general in the color mode is prinitng differently from terminal as well as output is truncated!
- [ ] Syntax for executing commands from root of project, or maybe commands should be executed from root of the CurrentDirectory and there should be a cd command instead of OpenProject ## Basics
- [ ] Fuzzy search over executed command ouput - [ ] Ctrl+Shift+ArrowDown at the end of buffer, doesn't capture characters on last line without new line, same at the top
- [ ] When inserting parenthesis and selection is there, put the parens on both sides? - [ ] When inserting parenthesis and selection is there, put the parens on both sides?
- [ ] KillProcess in console !!! - should also kill all the children ........... - [ ] I noticed WordComplete getting busted after using editor for a while and returning cutdown words but not sure how to repro ...
- [x] ctrl-e with these short main.c:290: breaks a little, need to first click ctrl-e and then alt-e to jump - [ ] Rewrite WordComplete to use CoroutineCreate, maybe try reducing globals to just the coroutine itself
- [ ] Use command window without special fuzzy search features to type commands and stuff for executing shell etc.. - [ ] WorkComplete, Bounded search, after a while it becomes problematic with many buffers
- [ ] I noticed WordComplete getting busted and returning cutdown words but not sure how to repro ...
## Monaco like design for familiarity ## Monaco like design for familiarity
- [x] Ctrl+Alt+- and Ctrl+Shift+- Jump back, jump forward
- [x] ctrl-shift-l select all occurences of a string
- [x] ctrl-alt-r open containing folder (file explorer system)
- [x] ctrl-alt-MouseMove should do a box select with multiple cursors thing
- [ ] ctrl-tab - switch file lister with instant hold release semantics? - [ ] ctrl-tab - switch file lister with instant hold release semantics?
- [ ] SearchAndReplace how to do better? - [ ] SearchAndReplace how to do better?
- [ ] ctrl-t find workspace symbols? how can we do it? - [ ] ctrl-t find workspace symbols? how can we do it?
- [ ] Snippet design? - [ ] Snippet design?
## Refactor
- [ ] Make a platform layer and separate SDL stuff out - [ ] Make a platform layer and separate SDL stuff out
- [x] ReplaceAll - heap-use-after-free address, how to debug? I think would be nice to iterate all buffer ids and their addresses along with the state - [ ] Report a regression in SDL in newer versions that make it so that events are doubled when unpressing the held button
- [x] BRO, the caret teleports on linux when I press the arrow for too long
- [ ] Report SDL newest vs SDL previous version on wayland
- [ ] Ctrl+Shift+ArrowDown at the end of buffer, doesn't capture characters on last line without new line
- [ ] Remove -lbacktrace and add my backtrace library thing - [ ] Remove -lbacktrace and add my backtrace library thing
- [ ] Refactor build.sh to accept commands and remove build_web.sh - [ ] Refactor build.sh to accept commands and remove build_web.sh
- [ ] GetWindowZOrder to IterateWindowsInZOrder
- [ ] Investigate reworking history API, tagging modification blocks with carets?
- [ ] How to enable framerate to be unlimited and not break scrolling?
- [ ] When 2 views of same buffer are open, the view with caret below the caret which modifies the view - starts moving and getting messed up
- [ ] The lexing / parsing code for config / bindings appears sloppy would be nice to clean it up but I don't have any ideas
- [ ] Redesign `:QueryFile`
- [ ] Cleanups ## Features
- [ ] How to enable framerate to be unlimited and not break scrolling? - [ ] KillProcess in console !!! - should also kill all the children ...........
- [x] When dragging a file into the editor, would be nice if the file opened in the window user dropped the file into. Not the active window. - [ ] BeginLog and EndLog, show all logs in the UI thing at the end
- [ ] When 2 views of same buffer are open, the view with caret below the caret which modifies the view - starts moving and getting messed up - [ ] Fuzzy search over executed command ouput
- [ ] Reduce number of created buffers to one per window, should be enough - [ ] Command window but for executing commands without special fuzzy stuff?
- [ ] GetWindowZOrder to IterateWindowsInZOrder - [ ] Implement Regex and jumps using regex so as to allow for using ctags
- [ ] Rework history API, tagging modification blocks with carets? - [ ] Add UndoKinds (SnapshotUndo, DiffUndo), I want to enable history in fuzzy search buffers without a huge memory cost
- [ ] The lexing / parsing code for config / bindings appears sloppy would be nice to clean it up but I don't have any ideas - [ ] General parser / data description thing, rewrite other parsers using this, rewrite env handling
- [ ] Directory tree doesn't make much sense! Maybe just consolidate into one folder? create nice names - the raddbg idea didn't pan out well here - [ ] DirNav, update lister when files change on disk
- [ ] Investigate ways to bind "open" commands to keys from config
- [ ] Ability to access and set clipboard as well as affect selection in the open scripts
- [ ] Syntax for executing commands from root of project, or maybe commands should be executed from root of the CurrentDirectory
## Test
- [ ] Test BlockArena correctnsess - random allocations, writes and undos, try to crash - [ ] Test BlockArena correctnsess - random allocations, writes and undos, try to crash
- [ ] General parser / data description thing ## Low
- [ ] Rewrite other parsers using this
- [ ] Rewrite Env handling (to not be OS specific)
- New error mechanism - we were losing errors when ReportError was called multiple times, I still want that but I don't want to lose errors, so turn it into a summary list of errors
- [ ] BeginLog EndLog, and then show all logs as a list in the UI thing
- [ ] Undo kinds (to enable history in fuzzy buffers)
- [ ] Add undo kind. Snapshot kind, so that history is possible in weird buffers without paying a huge memory cost. The idea is that we would store the exact buffer state to replace with, editor would just save history of first line etc.
- [x] Macros
- [ ] Regex
- [ ] ctags based indexing
- [ ] WordComplete
- [ ] Rewrite WordComplete to use CoroutineCreate, maybe try reducing globals to just the coroutine itself
- [ ] More bounded? seems like it might be problematic on a bigger project but so far it isn't (even for SDL or raddbg)
- [ ] Shell / terminal buffer plugin (keep the shell alive and talk with it) - [ ] Shell / terminal buffer plugin (keep the shell alive and talk with it)
- [ ] Directory Navigation - [ ] Fix somehow OpenCode hanging the editor on big files
- [ ] Remake lister when files change on disk
- [ ] When saving apply all the modifications instead (like deleting files, renaming etc.) or maybe that's not even needed considering we are integrating shell commands -----------------------------------------------------------------------
- [ ] OpenCode
- [ ] Hangs the editor on big files ## :QueryFile problems
- [ ] Open - User doesn't see that he in a special mode
- [ ] Way to bind "open" commands to keys from config - Coroutine is boundless here and the boundries of the mode are too lossely defined, it makes it strange when you learn that you are still in this mode
- [ ] Ability to access and set clipboard as well as affect selection in the open scripts - How do we kill all the views/buffers we entered? Do we care?
- [ ] QueryFile
- [ ] Indicate to user that he is choosing a file
- [ ] Define clear rules for opt out (like switching to different window) and kill or views that were for choosing?
*/ */
#define PLUGIN_PROFILER 1 #define PLUGIN_PROFILER 1
@@ -581,6 +567,7 @@ void GarbageCollect() {
return; return;
} }
RunGCThisFrame = false; RunGCThisFrame = false;
ReportConsolef("GarbageCollect");
ProfileFunction(); ProfileFunction();
Allocator sys_allocator = GetSystemAllocator(); Allocator sys_allocator = GetSystemAllocator();
@@ -602,8 +589,8 @@ void GarbageCollect() {
continue; continue;
} }
bool ref = ViewIsReferenced(it); Int ref = ViewIsReferenced(it);
if (ref) { if (ref < 25) {
continue; continue;
} }

View File

@@ -5,6 +5,7 @@ void JumpTempBuffer(BSet *set, String buffer_name) {
set->view = WindowOpenBufferView(set->window, buffer_name); set->view = WindowOpenBufferView(set->window, buffer_name);
set->buffer = GetBuffer(set->view->active_buffer); set->buffer = GetBuffer(set->view->active_buffer);
set->buffer->temp = true; set->buffer->temp = true;
RunGCThisFrame = true;
} }
void AddCommand(Array<Command> *arr, String name, Trigger *trigger, CMDFunction *function) { void AddCommand(Array<Command> *arr, String name, Trigger *trigger, CMDFunction *function) {

View File

@@ -103,6 +103,22 @@ API bool ViewIsCrumb(ViewID view_id) {
return false; return false;
} }
API Int GetViewReferencedInHistoryRating(ViewID view_id) {
ForItem (window, Windows) {
For (window->goto_redo) if (it.view_id == view_id) return 1;
Int i = 0;
For (window->goto_history) {
i += 1;
if (it.view_id == view_id) {
return i;
}
}
}
return 0;
}
bool ViewIsActive(ViewID id) { bool ViewIsActive(ViewID id) {
For (Windows) { For (Windows) {
if (it->active_view == id) { if (it->active_view == id) {
@@ -112,16 +128,16 @@ bool ViewIsActive(ViewID id) {
return false; return false;
} }
API bool ViewIsReferenced(View *view) { API Int ViewIsReferenced(View *view) {
if (view->special) { if (view->special) {
return true; return 1;
} }
if (ViewIsCrumb(view->id)) { if (ViewIsActive(view->id)) {
return true; return 1;
} }
return ViewIsActive(view->id); return GetViewReferencedInHistoryRating(view->id);
} }
bool BufferIsReferenced(Buffer *buffer) { bool BufferIsReferenced(Buffer *buffer) {