Add prefix_match function and use it instead of adhoc code
This commit is contained in:
parent
5a02d38081
commit
5ae43acf94
|
@ -103,7 +103,7 @@ CandidateList BufferManager::complete_buffername(const String& prefix,
|
||||||
for (auto& buffer : m_buffers)
|
for (auto& buffer : m_buffers)
|
||||||
{
|
{
|
||||||
String name = buffer->display_name();
|
String name = buffer->display_name();
|
||||||
if (name.substr(0, real_prefix.length()) == real_prefix)
|
if (prefix_match(name, real_prefix))
|
||||||
result.push_back(escape(name));
|
result.push_back(escape(name));
|
||||||
}
|
}
|
||||||
// no prefix completion found, check regex matching
|
// no prefix completion found, check regex matching
|
||||||
|
|
|
@ -350,11 +350,10 @@ public:
|
||||||
m_prefix = line;
|
m_prefix = line;
|
||||||
auto it = m_history_it;
|
auto it = m_history_it;
|
||||||
// search for the previous history entry matching typed prefix
|
// search for the previous history entry matching typed prefix
|
||||||
ByteCount prefix_length = m_prefix.length();
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
--it;
|
--it;
|
||||||
if (it->substr(0, prefix_length) == m_prefix)
|
if (prefix_match(*it, m_prefix))
|
||||||
{
|
{
|
||||||
m_history_it = it;
|
m_history_it = it;
|
||||||
m_line_editor.reset(*it);
|
m_line_editor.reset(*it);
|
||||||
|
@ -368,11 +367,10 @@ public:
|
||||||
{
|
{
|
||||||
if (m_history_it != history.end())
|
if (m_history_it != history.end())
|
||||||
{
|
{
|
||||||
ByteCount prefix_length = m_prefix.length();
|
|
||||||
// search for the next history entry matching typed prefix
|
// search for the next history entry matching typed prefix
|
||||||
++m_history_it;
|
++m_history_it;
|
||||||
while (m_history_it != history.end() and
|
while (m_history_it != history.end() and
|
||||||
m_history_it->substr(0, prefix_length) != m_prefix)
|
prefix_match(*m_history_it, m_prefix))
|
||||||
++m_history_it;
|
++m_history_it;
|
||||||
|
|
||||||
if (m_history_it != history.end())
|
if (m_history_it != history.end())
|
||||||
|
|
|
@ -337,7 +337,7 @@ Completions CommandManager::complete(const Context& context,
|
||||||
|
|
||||||
for (auto& command : m_commands)
|
for (auto& command : m_commands)
|
||||||
{
|
{
|
||||||
if (command.first.substr(0, prefix.length()) == prefix)
|
if (prefix_match(command.first, prefix))
|
||||||
result.candidates.push_back(command.first);
|
result.candidates.push_back(command.first);
|
||||||
}
|
}
|
||||||
std::sort(result.candidates.begin(), result.candidates.end());
|
std::sort(result.candidates.begin(), result.candidates.end());
|
||||||
|
|
|
@ -74,7 +74,7 @@ String compact_path(const String& filename)
|
||||||
char cwd[1024];
|
char cwd[1024];
|
||||||
getcwd(cwd, 1024);
|
getcwd(cwd, 1024);
|
||||||
String real_cwd = real_path(cwd) + '/';
|
String real_cwd = real_path(cwd) + '/';
|
||||||
if (real_filename.substr(0, real_cwd.length()) == real_cwd)
|
if (prefix_match(real_filename, real_cwd))
|
||||||
return real_filename.substr(real_cwd.length());
|
return real_filename.substr(real_cwd.length());
|
||||||
|
|
||||||
const char* home = getenv("HOME");
|
const char* home = getenv("HOME");
|
||||||
|
@ -302,7 +302,7 @@ std::vector<String> complete_filename(const String& prefix,
|
||||||
if (check_ignored_regex and boost::regex_match(filename.c_str(), ignored_regex))
|
if (check_ignored_regex and boost::regex_match(filename.c_str(), ignored_regex))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const bool match_prefix = (filename.substr(0, fileprefix.length()) == fileprefix);
|
const bool match_prefix = prefix_match(filename, fileprefix);
|
||||||
const bool match_regex = not file_regex.empty() and
|
const bool match_regex = not file_regex.empty() and
|
||||||
boost::regex_match(filename.c_str(), file_regex);
|
boost::regex_match(filename.c_str(), file_regex);
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
String id_str = value.first;
|
String id_str = value.first;
|
||||||
if (id_str.substr(0, real_prefix.length()) == real_prefix)
|
if (prefix_match(id_str, real_prefix))
|
||||||
result.push_back(std::move(id_str));
|
result.push_back(std::move(id_str));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -73,8 +73,7 @@ CandidateList OptionManager::complete_option_name(const String& prefix,
|
||||||
for (auto& option : m_options)
|
for (auto& option : m_options)
|
||||||
{
|
{
|
||||||
const auto& name = option->name();
|
const auto& name = option->name();
|
||||||
if (name.substr(0, real_prefix.length()) == real_prefix and
|
if (prefix_match(name, real_prefix) and not contains(result, name))
|
||||||
not contains(result, name))
|
|
||||||
result.push_back(name);
|
result.push_back(name);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -83,4 +83,15 @@ void option_from_string(const String& str, Regex& re)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool prefix_match(const String& str, const String& prefix)
|
||||||
|
{
|
||||||
|
auto it = str.begin();
|
||||||
|
for (auto& c : prefix)
|
||||||
|
{
|
||||||
|
if (it ==str.end() or *it++ != c)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,8 @@ String to_string(const StronglyTypedNumber<RealType, ValueType>& val)
|
||||||
return to_string((ValueType)val);
|
return to_string((ValueType)val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool prefix_match(const String& str, const String& prefix);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|
|
@ -136,6 +136,11 @@ void test_string()
|
||||||
|
|
||||||
String escaped = escape("youpi:matin:tchou:", ':', '\\');
|
String escaped = escape("youpi:matin:tchou:", ':', '\\');
|
||||||
kak_assert(escaped == "youpi\\:matin\\:tchou\\:");
|
kak_assert(escaped == "youpi\\:matin\\:tchou\\:");
|
||||||
|
|
||||||
|
kak_assert(prefix_match("tchou kanaky", "tchou"));
|
||||||
|
kak_assert(prefix_match("tchou kanaky", "tchou kanaky"));
|
||||||
|
kak_assert(prefix_match("tchou kanaky", "t"));
|
||||||
|
kak_assert(not prefix_match("tchou kanaky", "c"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_keys()
|
void test_keys()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user