summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2020-11-22 16:52:37 +1100
committerMaxime Coste <mawww@kakoune.org>2020-11-22 16:52:37 +1100
commita8d43ce6ce310463052d00501bd7092ef56b390c (patch)
tree2cb6269d7746443ff5c2f1250879c6e81c6c6997 /src
parent644660f65f42c25c594cbd804efabcb16bb67242 (diff)
parentf3f3f806243efcd15d8000b96119608dd79163ab (diff)
Merge remote-tracking branch 'AndrewVos/ignore-indent-on-line-completion'
Diffstat (limited to 'src')
-rw-r--r--src/insert_completer.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/insert_completer.cc b/src/insert_completer.cc
index ca6b08a1..43a4fc61 100644
--- a/src/insert_completer.cc
+++ b/src/insert_completer.cc
@@ -348,7 +348,8 @@ InsertCompletion complete_line(const SelectionList& sels,
const ColumnCount tabstop = options["tabstop"].get<int>();
const ColumnCount column = get_column(buffer, tabstop, cursor_pos);
- StringView prefix = buffer[cursor_pos.line].substr(0_byte, cursor_pos.column);
+ StringView prefix = trim_indent(buffer[cursor_pos.line].substr(0_byte, cursor_pos.column));
+ BufferCoord replace_begin = buffer.advance(cursor_pos, -prefix.length());
InsertCompletion::CandidateList candidates;
auto add_candidates = [&](const Buffer& buf) {
@@ -356,12 +357,16 @@ InsertCompletion complete_line(const SelectionList& sels,
{
if (buf.name() == buffer.name() && l == cursor_pos.line)
continue;
- const StringView line = buf[l];
+
+ const StringView line = trim_indent(buf[l]);
+
+ if (line.length() == 0)
+ continue;
+
if (prefix == line.substr(0_byte, prefix.length()))
{
- StringView candidate = line.substr(0_byte, line.length()-1);
- candidates.push_back({candidate.str(), "",
- {expand_tabs(candidate, tabstop, column), {}}});
+ StringView candidate = trim_indent(line.substr(0_byte, line.length()));
+ candidates.push_back({candidate.str(), "", {expand_tabs(candidate, tabstop, column), {}} });
// perf: it's unlikely the user intends to search among >10 candidates anyway
if (candidates.size() == 100)
break;
@@ -384,7 +389,7 @@ InsertCompletion complete_line(const SelectionList& sels,
return {};
std::sort(candidates.begin(), candidates.end());
candidates.erase(std::unique(candidates.begin(), candidates.end()), candidates.end());
- return { std::move(candidates), cursor_pos.line, cursor_pos, buffer.timestamp() };
+ return { std::move(candidates), replace_begin, cursor_pos, buffer.timestamp() };
}
}