void Session::CompletePath(const Path &path, CompletionResult &result) { std::string filePrefix; mtp::u32 parent = ResolvePath(path, filePrefix); std::string dir = GetDirname(path); auto objectList = _session->GetObjectHandles(_cs, mtp::Session::AllFormats, parent); for(auto object : objectList.ObjectHandles) { std::string name = _session->GetObjectStringProperty(object, mtp::ObjectProperty::ObjectFilename); if (BeginsWith(name, filePrefix)) { if (!dir.empty()) name = dir + '/' + name; mtp::ObjectFormat format = (mtp::ObjectFormat)_session->GetObjectIntegerProperty(object, mtp::ObjectProperty::ObjectFormat); if (format == mtp::ObjectFormat::Association) name += '/'; if (name.find(' ') != name.npos) result.push_back('"' + name +'"'); else result.push_back(name); } } }
void AddToCompletion(CompletionResult& res, Str::StringRef prefix, std::initializer_list<CompletionItem> list) { for (auto item: list) { if (Str::IsIPrefix(prefix, item.first)) { res.push_back({item.first, item.second}); } } }
CompletionResult CompleteCommandNames(Str::StringRef prefix) { CommandMap& commands = GetCommandMap(); CompletionResult res; for (auto& entry: commands) { if (Str::IsIPrefix(prefix, entry.first)) { res.push_back({entry.first, entry.second.description}); } } return res; }