Improve ctrl movement, fix delete indent bug
This commit is contained in:
@@ -333,26 +333,28 @@ Int GetNextWordEnd(Buffer *buffer, Int pos) {
|
|||||||
// too early and we cannot establish the proper range
|
// too early and we cannot establish the proper range
|
||||||
// semantics - proper max is one past last index
|
// semantics - proper max is one past last index
|
||||||
if (!(i < buffer->len)) break;
|
if (!(i < buffer->len)) break;
|
||||||
if ((prev && prev != buffer->str[i]) || IsWord(buffer->str[i])) {
|
if (prev == L'\n' || (prev && prev != buffer->str[i]) || IsWord(buffer->str[i])) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
prev = buffer->str[i];
|
prev = buffer->str[i];
|
||||||
}
|
}
|
||||||
Int result = GetWordEnd(buffer, pos);
|
Int result = prev == L'\n' ? pos : GetWordEnd(buffer, pos);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Int GetPrevWordStart(Buffer *buffer, Int pos) {
|
Int GetPrevWordStart(Buffer *buffer, Int pos) {
|
||||||
pos = Clamp(pos, (Int)0, buffer->len);
|
pos = Clamp(pos, (Int)0, buffer->len);
|
||||||
wchar_t prev = 0;
|
wchar_t prev = 0;
|
||||||
for (Int i = pos - 1; i >= 0; i -= 1) {
|
Int i = pos - 1;
|
||||||
if ((prev && prev != buffer->str[i]) || IsWord(buffer->str[i])) {
|
for (; i >= 0; i -= 1) {
|
||||||
|
if (prev == L'\n' || (prev && prev != buffer->str[i]) || IsWord(buffer->str[i])) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pos = i;
|
pos = i;
|
||||||
prev = buffer->str[i];
|
prev = buffer->str[i];
|
||||||
}
|
}
|
||||||
Int result = GetWordStart(buffer, pos);
|
bool new_line = prev == L'\n';
|
||||||
|
Int result = new_line ? pos : GetWordStart(buffer, pos);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -415,13 +415,13 @@ void Command_Delete(View *view, int direction, bool ctrl = false) {
|
|||||||
|
|
||||||
// Delete indent in multiple of IndentSize
|
// Delete indent in multiple of IndentSize
|
||||||
Range indent_range = GetIndentRangeAtPos(buffer, it.range.min);
|
Range indent_range = GetIndentRangeAtPos(buffer, it.range.min);
|
||||||
if (it.range.min > indent_range.min && it.range.max <= indent_range.max) {
|
if (ctrl == false && it.range.min > indent_range.min && it.range.max <= indent_range.max) {
|
||||||
Int offset = it.range.min - indent_range.min;
|
Int offset = it.range.min - indent_range.min;
|
||||||
Int to_delete = (offset % (StyleIndentSize));
|
Int to_delete = (offset % (StyleIndentSize));
|
||||||
if (to_delete == 0) to_delete = StyleIndentSize;
|
if (to_delete == 0) to_delete = StyleIndentSize;
|
||||||
to_delete = Clamp(to_delete, (Int)1, StyleIndentSize);
|
to_delete = Clamp(to_delete, (Int)1, StyleIndentSize);
|
||||||
for (Int i = 0; i < to_delete; i += 1) {
|
for (Int i = 0; i < to_delete; i += 1) {
|
||||||
it = MoveCaret(buffer, it, direction, ctrl, SHIFT_PRESSED);
|
it = MoveCaret(buffer, it, direction, false, SHIFT_PRESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
- Remove pointers and use ViewIDs (enable array debug while doing this)
|
- Remove pointers and use ViewIDs (enable array debug while doing this)
|
||||||
- try using git grep for search for now, combine with fuzzy search buffer
|
- try using git grep for search for now, combine with fuzzy search buffer
|
||||||
- lua maybe try heuristic matching paths from left?
|
- lua maybe try heuristic matching paths from left?
|
||||||
- win32: change all stack buffers to arena
|
|
||||||
|
|
||||||
- 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
|
||||||
- search backwards
|
- search backwards
|
||||||
- braces enclose should be performed even if we put the mouse out of bounds!
|
|
||||||
- some split selection commands
|
- some split selection commands
|
||||||
- assign commands or lua functions to F1-F12 keys
|
- assign commands or lua functions to F1-F8 keys
|
||||||
|
|
||||||
- word complete
|
- 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?)
|
||||||
|
|||||||
Reference in New Issue
Block a user