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"; return "locate";
} }
static QString defaultArguments() /*!
{ For the tools es [1] and locate [2], interpret space as AND operator.
if (HostOsInfo::isMacHost())
return "\"kMDItemFSName = '*%{Query:Escaped}*'c\"";
if (HostOsInfo::isWindowsHost())
return "-n 10000 -r \"%{Query:Regex}\"";
return "-i -l 10000 -r \"%{Query:Regex}\"";
}
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()) if (HostOsInfo::isMacHost())
return "\"kMDItemFSName = '*%{Query:Escaped}*'\""; return QString("\"kMDItemFSName = '*%{Query:Escaped}*'%1\"")
.arg(sens == Qt::CaseInsensitive ? QString("c") : "");
if (HostOsInfo::isWindowsHost()) if (HostOsInfo::isWindowsHost())
return "-i -n 10000 -r \"%{Query:Regex}\""; return QString("%1 -n 10000 %{Query:Escaped}")
return "-l 10000 -r \"%{Query:Regex}\""; .arg(sens == Qt::CaseInsensitive ? QString() : "-i ");
return QString("%1 -A -l 10000 %{Query:Escaped}")
.arg(sens == Qt::CaseInsensitive ? QString() : "-i ");
} }
const char kCommandKey[] = "command"; const char kCommandKey[] = "command";
@@ -230,6 +233,7 @@ static MacroExpander *createMacroExpander(const QString &query)
[query] { [query] {
QString regex = query; QString regex = query;
regex = regex.replace('*', ".*"); regex = regex.replace('*', ".*");
regex = regex.replace(' ', ".*");
return regex; return regex;
}); });
return expander; return expander;
@@ -306,7 +310,7 @@ void SpotlightLocatorFilter::saveState(QJsonObject &obj) const
obj.insert(kCommandKey, m_command); obj.insert(kCommandKey, m_command);
if (m_arguments != defaultArguments()) if (m_arguments != defaultArguments())
obj.insert(kArgumentsKey, m_arguments); obj.insert(kArgumentsKey, m_arguments);
if (m_caseSensitiveArguments != defaultCaseSensitiveArguments()) if (m_caseSensitiveArguments != defaultArguments(Qt::CaseSensitive))
obj.insert(kCaseSensitiveKey, m_caseSensitiveArguments); obj.insert(kCaseSensitiveKey, m_caseSensitiveArguments);
} }
@@ -314,14 +318,14 @@ void SpotlightLocatorFilter::restoreState(const QJsonObject &obj)
{ {
m_command = obj.value(kCommandKey).toString(defaultCommand()); m_command = obj.value(kCommandKey).toString(defaultCommand());
m_arguments = obj.value(kArgumentsKey).toString(defaultArguments()); 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() void SpotlightLocatorFilter::reset()
{ {
m_command = defaultCommand(); m_command = defaultCommand();
m_arguments = defaultArguments(); m_arguments = defaultArguments();
m_caseSensitiveArguments = defaultCaseSensitiveArguments(); m_caseSensitiveArguments = defaultArguments(Qt::CaseSensitive);
} }
} // Internal } // Internal