home/src/option_manager.cc

66 lines
1.5 KiB
C++
Raw Normal View History

#include "option_manager.hh"
#include <sstream>
namespace Kakoune
{
Option& OptionManager::operator[] (const String& name)
2012-04-03 20:25:27 +02:00
{
auto it = m_options.find(name);
if (it != m_options.end())
return it->second;
else
{
Option& res = m_options[name];
OptionManager* parent = m_parent;
while (parent)
{
auto parent_it = parent->m_options.find(name);
if (parent_it != parent->m_options.end())
{
res = parent_it->second;
break;
}
else
parent = parent->m_parent;
}
return res;
}
2012-04-03 20:25:27 +02:00
}
const Option& OptionManager::operator[] (const String& name) const
2012-04-03 20:25:27 +02:00
{
auto it = m_options.find(name);
if (it != m_options.end())
return it->second;
else if (m_parent)
return (*m_parent)[name];
else
throw option_not_found(name);
}
CandidateList OptionManager::complete_option_name(const String& prefix,
2012-04-03 20:25:27 +02:00
size_t cursor_pos)
{
String real_prefix = prefix.substr(0, cursor_pos);
2012-04-03 20:25:27 +02:00
CandidateList result;
if (m_parent)
result = m_parent->complete_option_name(prefix, cursor_pos);
for (auto& option : m_options)
{
if (option.first.substr(0, real_prefix.length()) == real_prefix and
not contains(result, option.first))
result.push_back(option.first);
}
return result;
}
GlobalOptionManager::GlobalOptionManager()
: OptionManager()
{
(*this)["tabstop"] = 8;
}
}