Ctrl + G
This commit is contained in:
@@ -220,3 +220,29 @@ bool StartsWith(String16 a, String16 start, unsigned ignore_case = false) {
|
|||||||
bool result = AreEqual(start, a_start, ignore_case);
|
bool result = AreEqual(start, a_start, ignore_case);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// chop this - :324
|
||||||
|
String16 ChopNumberEx(String16 *string) {
|
||||||
|
String16 col = {};
|
||||||
|
for (int64_t i = string->len - 1; i >= 0; i -= 1) {
|
||||||
|
if (IsDigit(string->data[i])) {
|
||||||
|
col.data = string->data + i;
|
||||||
|
col.len += 1;
|
||||||
|
} else if (string->data[i] == L':') {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*string = Chop(*string, col.len + 1);
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
|
||||||
|
Int ChopNumber(String16 *string) {
|
||||||
|
Scratch scratch;
|
||||||
|
String16 col = ChopNumberEx(string);
|
||||||
|
if (col.len == 0) return -1;
|
||||||
|
String num_string = ToString(scratch, col);
|
||||||
|
Int result = strtoll(num_string.data, NULL, 10) - 1;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -788,6 +788,27 @@ void WindowCommand(Event event, Window *window, View *view) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Ctrl(SDLK_G)) {
|
||||||
|
Window *titlebar = window;
|
||||||
|
if (!window->is_title_bar) titlebar = GetWindow(window->title_bar_window);
|
||||||
|
View *titlebar_view = GetView(titlebar->active_view);
|
||||||
|
Buffer *titlebar_buffer = GetBuffer(titlebar_view->active_buffer);
|
||||||
|
SetActiveWindow(titlebar->id);
|
||||||
|
|
||||||
|
String16 buffer_string = GetString(*titlebar_buffer);
|
||||||
|
if (Seek(buffer_string, L" |", &buffer_string.len)) {
|
||||||
|
buffer_string = Trim(buffer_string);
|
||||||
|
String16 col = ChopNumberEx(&buffer_string);
|
||||||
|
String16 line = ChopNumberEx(&buffer_string);
|
||||||
|
if (line.len == 0) line = col;
|
||||||
|
if (line.len) {
|
||||||
|
Int min = line.data - buffer_string.data;
|
||||||
|
titlebar_view->carets[0] = MakeCaret(min + line.len, min);
|
||||||
|
titlebar_view->update_scroll = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Ctrl(SDLK_Q)) {
|
if (Ctrl(SDLK_Q)) {
|
||||||
Int p = GetFront(view->carets[0]);
|
Int p = GetFront(view->carets[0]);
|
||||||
Range enclose = EncloseLoadWord(buffer, p);
|
Range enclose = EncloseLoadWord(buffer, p);
|
||||||
|
|||||||
@@ -61,31 +61,14 @@ void ApplyTitleBarChangesToWindow(Window *window, View *view, Buffer *buffer) {
|
|||||||
buffer_string = GetString(*buffer, replace_range);
|
buffer_string = GetString(*buffer, replace_range);
|
||||||
buffer_string = Trim(buffer_string);
|
buffer_string = Trim(buffer_string);
|
||||||
|
|
||||||
String16 col = {};
|
Int column = ChopNumber(&buffer_string);
|
||||||
for (int64_t i = buffer_string.len - 1; i >= 0; i -= 1) {
|
if (column == -1) return;
|
||||||
if (IsDigit(buffer_string.data[i])) {
|
|
||||||
col.data = buffer_string.data + i;
|
|
||||||
col.len += 1;
|
|
||||||
} else if (buffer_string.data[i] == L':') {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buffer_string = Chop(buffer_string, col.len + 1);
|
|
||||||
|
|
||||||
String16 line = {};
|
Int line = ChopNumber(&buffer_string);
|
||||||
for (int64_t i = buffer_string.len - 1; i >= 0; i -= 1) {
|
if (line == -1) {
|
||||||
if (IsDigit(buffer_string.data[i])) {
|
line = column;
|
||||||
line.data = buffer_string.data + i;
|
column = 0;
|
||||||
line.len += 1;
|
|
||||||
} else if (buffer_string.data[i] == L':') {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buffer_string = Chop(buffer_string, line.len + 1);
|
|
||||||
|
|
||||||
Window *last_window = GetWindow(window->title_bar_window);
|
Window *last_window = GetWindow(window->title_bar_window);
|
||||||
View *last_view = GetActiveView(last_window);
|
View *last_view = GetActiveView(last_window);
|
||||||
@@ -99,11 +82,7 @@ void ApplyTitleBarChangesToWindow(Window *window, View *view, Buffer *buffer) {
|
|||||||
last_buffer->name = Copy(Perm, filepath);
|
last_buffer->name = Copy(Perm, filepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
String line_string = ToString(scratch, line);
|
Int buffer_pos = XYToPos(*last_buffer, {column, line});
|
||||||
String col_string = ToString(scratch, col);
|
|
||||||
Int linei = strtoll(line_string.data, NULL, 10) - 1;
|
|
||||||
Int coli = strtoll(col_string.data, NULL, 10) - 1;
|
|
||||||
Int buffer_pos = XYToPos(*last_buffer, {coli, linei});
|
|
||||||
|
|
||||||
Caret &caret = last_view->carets[0];
|
Caret &caret = last_view->carets[0];
|
||||||
if (GetFront(caret) != buffer_pos) {
|
if (GetFront(caret) != buffer_pos) {
|
||||||
|
|||||||
@@ -3,11 +3,9 @@
|
|||||||
- ctrl + delete maybe should stop on new line but it keeps on going, sublime is much more careful with deleting
|
- 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: there is a click hang when switching windows sometimes, you click after select and it doesn't switch active window
|
||||||
|
|
||||||
- WE CAN'T REALLY NOW USE POINTERS DO WE !!! WE USE DYNAMIC ARRAYS!!
|
|
||||||
|
|
||||||
- mouse execute
|
- mouse execute
|
||||||
- experiment with using multiple cursors to select command and it's input
|
- experiment with using multiple cursors to select command and it's input
|
||||||
- Ctrl + G should select the line number in bar
|
|
||||||
- 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
|
||||||
@@ -15,8 +13,6 @@ BUG: there is a click hang when switching windows sometimes, you click after sel
|
|||||||
- alt/ctrl + double click should select the exec or load word
|
- alt/ctrl + double click should select the exec or load word
|
||||||
- clean \r\n into \n on trim and load
|
- clean \r\n into \n on trim and load
|
||||||
|
|
||||||
- baked font as fallback
|
|
||||||
- expose font and font size to config
|
|
||||||
- global config and local config
|
- global config and local config
|
||||||
- load all files in a directory
|
- load all files in a directory
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Array<Int> GetWindowZOrder(Allocator allocator) {
|
|||||||
return order;
|
return order;
|
||||||
}
|
}
|
||||||
|
|
||||||
Window *CreateInfobar(Window *parent_window) {
|
Window *CreateTitlebar(Window *parent_window) {
|
||||||
Window *window = CreateWindow();
|
Window *window = CreateWindow();
|
||||||
window->draw_scrollbar = false;
|
window->draw_scrollbar = false;
|
||||||
window->dont_save_in_active_window_history = true;
|
window->dont_save_in_active_window_history = true;
|
||||||
@@ -74,7 +74,7 @@ void AddColumnWindow() {
|
|||||||
window->is_column = true;
|
window->is_column = true;
|
||||||
View *view = OpenBufferView("*scratch*");
|
View *view = OpenBufferView("*scratch*");
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
CreateInfobar(window);
|
CreateTitlebar(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddRowWindow() {
|
void AddRowWindow() {
|
||||||
@@ -83,7 +83,7 @@ void AddRowWindow() {
|
|||||||
|
|
||||||
View *view = OpenBufferView("*scratch*");
|
View *view = OpenBufferView("*scratch*");
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
CreateInfobar(window);
|
CreateTitlebar(window);
|
||||||
|
|
||||||
Window *active_window = GetActiveWindow();
|
Window *active_window = GetActiveWindow();
|
||||||
int64_t active_window_index = GetIndex(Windows, *active_window);
|
int64_t active_window_index = GetIndex(Windows, *active_window);
|
||||||
@@ -128,7 +128,7 @@ void InitWindows() {
|
|||||||
LoadUnicode(buffer);
|
LoadUnicode(buffer);
|
||||||
// LoadBigTextAndBigLine(buffer, 10000000);
|
// LoadBigTextAndBigLine(buffer, 10000000);
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
CreateInfobar(window);
|
CreateTitlebar(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,7 @@ void InitWindows() {
|
|||||||
View *view = CreateView(buffer->id);
|
View *view = CreateView(buffer->id);
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
|
|
||||||
CreateInfobar(window);
|
CreateTitlebar(window);
|
||||||
SetVisibility(window, false);
|
SetVisibility(window, false);
|
||||||
|
|
||||||
ConsoleWindowID = window->id;
|
ConsoleWindowID = window->id;
|
||||||
@@ -160,7 +160,7 @@ void InitWindows() {
|
|||||||
View *view = CreateView(buffer->id);
|
View *view = CreateView(buffer->id);
|
||||||
window->z = 2;
|
window->z = 2;
|
||||||
window->active_view = view->id;
|
window->active_view = view->id;
|
||||||
Window *titlebar = CreateInfobar(window);
|
Window *titlebar = CreateTitlebar(window);
|
||||||
titlebar->z = 2;
|
titlebar->z = 2;
|
||||||
SetVisibility(window, false);
|
SetVisibility(window, false);
|
||||||
DebugWindowID = window->id;
|
DebugWindowID = window->id;
|
||||||
@@ -182,7 +182,7 @@ void InitWindows() {
|
|||||||
w->active_view = v->id;
|
w->active_view = v->id;
|
||||||
w->z = 1;
|
w->z = 1;
|
||||||
|
|
||||||
Window *titlebar = CreateInfobar(w);
|
Window *titlebar = CreateTitlebar(w);
|
||||||
titlebar->z = 1;
|
titlebar->z = 1;
|
||||||
SetVisibility(w, false);
|
SetVisibility(w, false);
|
||||||
|
|
||||||
@@ -202,7 +202,7 @@ void InitWindows() {
|
|||||||
View *v = CreateView(b->id);
|
View *v = CreateView(b->id);
|
||||||
w->active_view = v->id;
|
w->active_view = v->id;
|
||||||
|
|
||||||
CreateInfobar(w);
|
CreateTitlebar(w);
|
||||||
SetVisibility(w, false);
|
SetVisibility(w, false);
|
||||||
|
|
||||||
SearchWindowID = w->id;
|
SearchWindowID = w->id;
|
||||||
@@ -223,7 +223,7 @@ void InitWindows() {
|
|||||||
View *v = CreateView(b->id);
|
View *v = CreateView(b->id);
|
||||||
w->active_view = v->id;
|
w->active_view = v->id;
|
||||||
|
|
||||||
Window *infobar = CreateInfobar(w);
|
Window *infobar = CreateTitlebar(w);
|
||||||
infobar->z = 2;
|
infobar->z = 2;
|
||||||
SetVisibility(w, false);
|
SetVisibility(w, false);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user