diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2011-11-26 19:05:49 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2011-11-26 19:05:49 +0000 |
| commit | e36153f0353c16e41483dc4fd2ee94eac3e3a4dd (patch) | |
| tree | 0045618c9212d871485aedda18af8ff65535fbcd /src/command_manager.cc | |
| parent | a00961da9945757927c28558b797242b6fce6361 (diff) | |
CommandManager: fix complete and style tweak
Diffstat (limited to 'src/command_manager.cc')
| -rw-r--r-- | src/command_manager.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc index 7c3606a7..5d5e4e69 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -41,7 +41,8 @@ static TokenList split(const std::string& line) size_t token_start = pos; - while((line[pos] != delimiter or line[pos-1] == '\\') and pos != line.length()) + while ((line[pos] != delimiter or line[pos-1] == '\\') and + pos != line.length()) ++pos; result.push_back(std::make_pair(token_start, pos)); @@ -97,7 +98,7 @@ Completions CommandManager::complete(const std::string& command_line, size_t cur { TokenList tokens = split(command_line); - size_t token_to_complete = -1; + size_t token_to_complete = tokens.size(); for (size_t i = 0; i < tokens.size(); ++i) { if (tokens[i].first <= cursor_pos and tokens[i].second >= cursor_pos) @@ -138,8 +139,11 @@ Completions CommandManager::complete(const std::string& command_line, size_t cur params.push_back(command_line.substr(it->first, it->second - it->first)); } - Completions result(tokens[token_to_complete].first, cursor_pos); - size_t cursor_pos_in_token = cursor_pos - tokens[token_to_complete].first; + + size_t start = token_to_complete < tokens.size() ? + tokens[token_to_complete].first : cursor_pos; + Completions result(start , cursor_pos); + size_t cursor_pos_in_token = cursor_pos - start; result.candidates = command_it->second.completer(params, token_to_complete - 1, |
