Locator: Space character in file name index

For the tools es and locate, interpret space as AND operator.

Change-Id: I62692ee0d3afed096173bbb789ea1c6b93ce543c
Fixes: QTCREATORBUG-26064
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Alp Öz
2021-07-29 16:40:17 +02:00
parent d3b6777d12
commit eb54c77ebb

View File

@@ -186,22 +186,25 @@ static QString defaultCommand()
return "locate";
}
static QString defaultArguments()
{
if (HostOsInfo::isMacHost())
return "\"kMDItemFSName = '*%{Query:Escaped}*'c\"";
if (HostOsInfo::isWindowsHost())
return "-n 10000 -r \"%{Query:Regex}\"";
return "-i -l 10000 -r \"%{Query:Regex}\"";
}
/*!
For the tools es [1] and locate [2], interpret space as AND operator.
static QString defaultCaseSensitiveArguments()
Currently doesn't support fine picking a file with a space in the path by escaped space.
[1]: https://www.voidtools.com/support/everything/command_line_interface/
[2]: https://www.gnu.org/software/findutils/manual/html_node/find_html/Invoking-locate.html
*/
static QString defaultArguments(Qt::CaseSensitivity sens = Qt::CaseInsensitive)
{
if (HostOsInfo::isMacHost())
return "\"kMDItemFSName = '*%{Query:Escaped}*'\"";
return QString("\"kMDItemFSName = '*%{Query:Escaped}*'%1\"")
.arg(sens == Qt::CaseInsensitive ? QString("c") : "");
if (HostOsInfo::isWindowsHost())
return "-i -n 10000 -r \"%{Query:Regex}\"";
return "-l 10000 -r \"%{Query:Regex}\"";
return QString("%1 -n 10000 %{Query:Escaped}")
.arg(sens == Qt::CaseInsensitive ? QString() : "-i ");
return QString("%1 -A -l 10000 %{Query:Escaped}")
.arg(sens == Qt::CaseInsensitive ? QString() : "-i ");
}
const char kCommandKey[] = "command";
@@ -230,6 +233,7 @@ static MacroExpander *createMacroExpander(const QString &query)
[query] {
QString regex = query;
regex = regex.replace('*', ".*");
regex = regex.replace(' ', ".*");
return regex;
});
return expander;
@@ -306,7 +310,7 @@ void SpotlightLocatorFilter::saveState(QJsonObject &obj) const
obj.insert(kCommandKey, m_command);
if (m_arguments != defaultArguments())
obj.insert(kArgumentsKey, m_arguments);
if (m_caseSensitiveArguments != defaultCaseSensitiveArguments())
if (m_caseSensitiveArguments != defaultArguments(Qt::CaseSensitive))
obj.insert(kCaseSensitiveKey, m_caseSensitiveArguments);
}
@@ -314,14 +318,14 @@ void SpotlightLocatorFilter::restoreState(const QJsonObject &obj)
{
m_command = obj.value(kCommandKey).toString(defaultCommand());
m_arguments = obj.value(kArgumentsKey).toString(defaultArguments());
m_caseSensitiveArguments = obj.value(kCaseSensitiveKey).toString(defaultCaseSensitiveArguments());
m_caseSensitiveArguments = obj.value(kCaseSensitiveKey).toString(defaultArguments(Qt::CaseSensitive));
}
void SpotlightLocatorFilter::reset()
{
m_command = defaultCommand();
m_arguments = defaultArguments();
m_caseSensitiveArguments = defaultCaseSensitiveArguments();
m_caseSensitiveArguments = defaultArguments(Qt::CaseSensitive);
}
} // Internal