diff options
| author | Andrew Vos <andrew.vos@gmail.com> | 2020-11-16 16:02:13 +0000 |
|---|---|---|
| committer | Andrew Vos <andrew.vos@gmail.com> | 2020-11-20 20:00:46 +0000 |
| commit | f3f3f806243efcd15d8000b96119608dd79163ab (patch) | |
| tree | 1e261c64fcc7b2bbf2575d3e931b83b6abcff9a6 /src/insert_completer.cc | |
| parent | efd38881d3bc8fcc08bd0aa1c52489a5bfc354d3 (diff) | |
Ignore indent when completing lines
When doing line completion, we previously used to not complete the line
if it had different indent to the potential completion.
This commit changes the behaviour to ignore indentation when completing lines.
Diffstat (limited to 'src/insert_completer.cc')
| -rw-r--r-- | src/insert_completer.cc | 17 |
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() }; } } |
