Fix indenting, dedenting
This commit is contained in:
@@ -62,6 +62,9 @@ void CWSLexIdentifiers(Array<StringAndDistance> *out_idents, Buffer *buffer) {
|
|||||||
}
|
}
|
||||||
if (StartsWith(token, CWS.prefix_string) && token != CWS.prefix_string) {
|
if (StartsWith(token, CWS.prefix_string) && token != CWS.prefix_string) {
|
||||||
Int pos = token.data - buffer->str;
|
Int pos = token.data - buffer->str;
|
||||||
|
// Here we are computing distance based on position from currently open
|
||||||
|
// buffer but should be fine. We are sorting then putting into the array
|
||||||
|
// and it doesn't displace the original ones so it's fine
|
||||||
Int distance = Absolute(CWS.original_caret_pos - pos);
|
Int distance = Absolute(CWS.original_caret_pos - pos);
|
||||||
int64_t value_index = FindValueIndex(&idents, token);
|
int64_t value_index = FindValueIndex(&idents, token);
|
||||||
if (value_index != -1) {
|
if (value_index != -1) {
|
||||||
|
|||||||
@@ -618,11 +618,19 @@ void IndentSelectedLines(View *view, bool shift = false) {
|
|||||||
indent_string.len = IndentSize;
|
indent_string.len = IndentSize;
|
||||||
if (!shift) {
|
if (!shift) {
|
||||||
AddEdit(&edits, {pos_range_of_line.min, pos_range_of_line.min}, indent_string);
|
AddEdit(&edits, {pos_range_of_line.min, pos_range_of_line.min}, indent_string);
|
||||||
|
For (saved_xy) {
|
||||||
|
if (it.front.y == i) it.front.x += indent_string.len;
|
||||||
|
if (it.back.y == i) it.back.x += indent_string.len;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Int whitespace_len = 0;
|
Int whitespace_len = 0;
|
||||||
for (Int i = 0; i < IndentSize && i < string.len && string.data[i] == u' '; i += 1) {
|
for (Int i = 0; i < IndentSize && i < string.len && string.data[i] == u' '; i += 1) {
|
||||||
whitespace_len += 1;
|
whitespace_len += 1;
|
||||||
}
|
}
|
||||||
|
For (saved_xy) {
|
||||||
|
if (it.front.y == i) it.front.x -= whitespace_len;
|
||||||
|
if (it.back.y == i) it.back.x -= whitespace_len;
|
||||||
|
}
|
||||||
|
|
||||||
AddEdit(&edits, {pos_range_of_line.min, pos_range_of_line.min + whitespace_len}, u"");
|
AddEdit(&edits, {pos_range_of_line.min, pos_range_of_line.min + whitespace_len}, u"");
|
||||||
}
|
}
|
||||||
@@ -633,13 +641,6 @@ void IndentSelectedLines(View *view, bool shift = false) {
|
|||||||
for (Int i = 0; i < saved_xy.len; i += 1) {
|
for (Int i = 0; i < saved_xy.len; i += 1) {
|
||||||
Caret &caret = view->carets[i];
|
Caret &caret = view->carets[i];
|
||||||
XYPair &xypair = saved_xy[i];
|
XYPair &xypair = saved_xy[i];
|
||||||
if (!shift) {
|
|
||||||
xypair.front.x += IndentSize;
|
|
||||||
xypair.back.x += IndentSize;
|
|
||||||
} else {
|
|
||||||
xypair.front.x -= IndentSize;
|
|
||||||
xypair.back.x -= IndentSize;
|
|
||||||
}
|
|
||||||
Int front = XYToPos(buffer, xypair.front);
|
Int front = XYToPos(buffer, xypair.front);
|
||||||
Int back = XYToPos(buffer, xypair.back);
|
Int back = XYToPos(buffer, xypair.back);
|
||||||
caret = MakeCaret(front, back);
|
caret = MakeCaret(front, back);
|
||||||
|
|||||||
Reference in New Issue
Block a user