kate: add config page with 'Automatic completion' toggle

Adds a Settings → Configure Kate → Plugins → Ollie config page with a
checkbox to enable/disable automatic ghost text completion. The setting
persists via KConfig and is applied when the ghost provider is created.
This commit is contained in:
Levi Neely 2026-08-06 16:52:16 +02:00
parent 1df0daf9de
commit e4c831df89
2 changed files with 66 additions and 0 deletions

View File

@ -12,6 +12,7 @@
#endif
#include <QApplication>
#include <QCheckBox>
#include <QDir>
#include <QFileInfo>
#include <QHash>
@ -19,6 +20,7 @@
#include <QMainWindow>
#include <QMenu>
#include <QStatusBar>
#include <QVBoxLayout>
K_PLUGIN_CLASS_WITH_JSON(OllieKatePlugin, "metadata.json")
@ -54,6 +56,64 @@ void OllieKatePlugin::loadConfig()
m_completionEnabled = grp.readEntry("CompletionEnabled", true);
}
void OllieKatePlugin::saveConfig()
{
KConfigGroup grp(KSharedConfig::openConfig(), QStringLiteral("Ollie"));
grp.writeEntry("CompletionEnabled", m_completionEnabled);
grp.sync();
}
void OllieKatePlugin::setCompletionEnabled(bool enabled)
{
m_completionEnabled = enabled;
saveConfig();
}
int OllieKatePlugin::configPages() const
{
return 1;
}
KTextEditor::ConfigPage *OllieKatePlugin::configPage(int number, QWidget *parent)
{
if (number != 0) return nullptr;
class OllieConfigPage : public KTextEditor::ConfigPage
{
public:
OllieConfigPage(OllieKatePlugin *plugin, QWidget *parent)
: KTextEditor::ConfigPage(parent), m_plugin(plugin)
{
auto *layout = new QVBoxLayout(this);
m_enabledCheck = new QCheckBox(QStringLiteral("Automatic completion (ghost text)"), this);
layout->addWidget(m_enabledCheck);
layout->addStretch();
reset();
connect(m_enabledCheck, &QCheckBox::toggled, this, &ConfigPage::changed);
}
QString name() const override { return QStringLiteral("Ollie"); }
QString fullName() const override { return QStringLiteral("Ollie Settings"); }
QIcon icon() const override { return QIcon::fromTheme(QStringLiteral("system-run")); }
void apply() override {
m_plugin->setCompletionEnabled(m_enabledCheck->isChecked());
}
void reset() override {
m_enabledCheck->setChecked(m_plugin->completionEnabled());
}
void defaults() override {
m_enabledCheck->setChecked(true);
}
private:
OllieKatePlugin *m_plugin;
QCheckBox *m_enabledCheck;
};
return new OllieConfigPage(this, parent);
}
// --- View ---
OllieKateView::OllieKateView(OllieKatePlugin *plugin, KTextEditor::MainWindow *mainWindow)
@ -494,6 +554,7 @@ void OllieKateView::setupGhostProvider()
}
m_ghost = new OllieGhostProvider(view, m_plugin, this);
m_ghost->setEnabled(m_plugin->completionEnabled());
if (QWidget *proxy = view->focusProxy()) {
proxy->installEventFilter(this);

View File

@ -2,6 +2,7 @@
#define OLLIE_KATE_PLUGIN_H
#include <KTextEditor/Plugin>
#include <KTextEditor/ConfigPage>
#include <KTextEditor/MainWindow>
#include <KTextEditor/View>
#if QT_VERSION_MAJOR >= 6
@ -32,14 +33,18 @@ public:
~OllieKatePlugin() override = default;
QObject *createView(KTextEditor::MainWindow *mainWindow) override;
int configPages() const override;
KTextEditor::ConfigPage *configPage(int number, QWidget *parent) override;
// Completion config accessors
QString completionBackend() const { return m_completionBackend; }
QString completionModel() const { return m_completionModel; }
bool completionEnabled() const { return m_completionEnabled; }
void setCompletionEnabled(bool enabled);
private:
void loadConfig();
void saveConfig();
QString m_completionBackend;
QString m_completionModel;