From 45e5887f5b33e5f30d3c16187bb5d6e707983804 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 3 Aug 2026 20:53:49 +0200 Subject: feat(config): add completion_on_focus and extra_mimetypes Mimetypes are the one completion list with no enumerator, so the user can extend it. Entries append to the built-ins and a malformed one is skipped with a problem recorded rather than dropping the whole list. Co-Authored-By: Claude Opus 5 --- src/config.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/config.cpp') diff --git a/src/config.cpp b/src/config.cpp index e92c7f3..1a8f322 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -87,6 +87,38 @@ void Config::load(const QString &path) } } + // A [general] key, so no prefix, per the note at the top of load(). + m_completionOnFocus = + settings.value(QStringLiteral("completion_on_focus"), false).toBool(); + + // [completion] is an ordinary section, so this one DOES take its prefix. + // ',' separates entries and '|' separates a value from its description: + // two different characters because QSettings splits comma lists itself, + // so a description holding a comma would otherwise become two entries. + // Neither character is legal in a mimetype. + const QStringList rawMimetypes = + settings.value(QStringLiteral("completion/extra_mimetypes")).toStringList(); + for (const QString &raw : rawMimetypes) { + const QString entry = raw.trimmed(); + if (entry.isEmpty()) + continue; + + const int bar = entry.indexOf(QLatin1Char('|')); + const QString value = (bar < 0 ? entry : entry.left(bar)).trimmed(); + const QString description = + (bar < 0 ? QString() : entry.mid(bar + 1)).trimmed(); + + // Skip only the bad entry: one typo must not cost the user the rest + // of the list, and the built-ins are appended to regardless. + if (value.isEmpty()) { + addProblem(QStringLiteral("[completion] extra_mimetypes: entry '%1' " + "has no mimetype; ignoring it.") + .arg(entry)); + continue; + } + m_extraMimetypes.append({ value, description }); + } + m_syncCommand = settings.value(QStringLiteral("sync/command")).toString(); if (m_syncCommand.isEmpty()) { // Not a problem: sync is optional, and nothing the user asked for is -- cgit v1.2.3