diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-04-07 21:43:55 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-04-07 23:47:50 +0100 |
| commit | ca549092462566a03ddc8b45ae05d55e702a038e (patch) | |
| tree | b87bfdea8533655d30d33ea0d6cbaf9fbcb439c6 /src | |
| parent | a9b3a8b0d6b11d96773cb579d46e3ade1d5200e3 (diff) | |
Add ClientManager::complete_client_name
Diffstat (limited to 'src')
| -rw-r--r-- | src/client_manager.cc | 18 | ||||
| -rw-r--r-- | src/client_manager.hh | 4 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc index 91cc6406..f818e226 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -166,4 +166,22 @@ void ClientManager::redraw_clients() const client->redraw_ifn(); } +CandidateList ClientManager::complete_client_name(const String& prefix, + ByteCount cursor_pos) const +{ + String real_prefix = prefix.substr(0, cursor_pos); + CandidateList result; + CandidateList subsequence_result; + for (auto& client : m_clients) + { + const String& name = client->context().name(); + + if (prefix_match(name, real_prefix)) + result.push_back(escape(name)); + if (subsequence_match(name, real_prefix)) + subsequence_result.push_back(escape(name)); + } + return result.empty() ? subsequence_result : result; +} + } diff --git a/src/client_manager.hh b/src/client_manager.hh index b20a1a69..cc5c6c0c 100644 --- a/src/client_manager.hh +++ b/src/client_manager.hh @@ -2,6 +2,7 @@ #define client_manager_hh_INCLUDED #include "client.hh" +#include "completion.hh" namespace Kakoune { @@ -38,6 +39,9 @@ public: bool validate_client_name(const String& name) const; void remove_client(Client& client); + CandidateList complete_client_name(const String& name, + ByteCount cursor_pos = -1) const; + private: String generate_name() const; |
