Skip to content

Commit e6397f2

Browse files
committed
Allow toggling auto bracket insertion
1 parent c269bde commit e6397f2

7 files changed

+47
-3
lines changed

core/katvan_aboutdialog.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ AboutDialog::AboutDialog(QWidget* parent)
5757
"<h3>Katvan</h3>"
5858
"<a href=\"%1\">%1</a>"
5959
"<p>A bare-bones editor for <i>Typst</i> files, with a bias for RTL</p>"
60-
"<p>Version %2 (Qt %3; Typst %4), on %5</p>"
60+
"<p>Version %2 (Qt %3; Typst %4) on %5</p>"
6161
)
6262
.arg(
6363
QStringLiteral("https://katvan.app"),

core/katvan_editor.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ void Editor::keyPressEvent(QKeyEvent* event)
703703
return;
704704
}
705705
}
706-
if (OPENING_BRACKETS->contains(event->text())) {
706+
if (OPENING_BRACKETS->contains(event->text()) && d_effectiveSettings.autoBrackets()) {
707707
QTextCursor cursor = textCursor();
708708
if (cursor.hasSelection() || cursor.atBlockEnd() || !cursor.block().text().at(cursor.positionInBlock()).isLetterOrNumber()) {
709709
auto closingBracket = d_codeModel->getMatchingCloseBracket(textCursor(), event->text().at(0));

core/katvan_editorsettings.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ void EditorSettings::parseModeLine(QString mode, EditorSettings::ModeSource sour
116116
else if (variable == QStringLiteral("show-control-chars")) {
117117
d_showControlChars = parseModeLineBool(rest);
118118
}
119+
else if (variable == QStringLiteral("auto-brackets")) {
120+
d_autoBrackets = parseModeLineBool(rest);
121+
}
119122
else if (variable == QStringLiteral("backup-interval") && source == ModeSource::SETTINGS) {
120123
bool ok = false;
121124
int interval = rest.toInt(&ok);
@@ -184,6 +187,14 @@ QString EditorSettings::toModeLine() const
184187
result += QLatin1String("show-control-chars off; ");
185188
}
186189
}
190+
if (d_autoBrackets) {
191+
if (d_autoBrackets.value()) {
192+
result += QLatin1String("auto-brackets on; ");
193+
}
194+
else {
195+
result += QLatin1String("auto-brackets off; ");
196+
}
197+
}
187198
if (d_autoBackupInterval) {
188199
result += QLatin1String("backup-interval %1; ").arg(QString::number(d_autoBackupInterval.value()));
189200
}
@@ -242,6 +253,11 @@ bool EditorSettings::showControlChars() const
242253
return d_showControlChars.value_or(true);
243254
}
244255

256+
bool EditorSettings::autoBrackets() const
257+
{
258+
return d_autoBrackets.value_or(true);
259+
}
260+
245261
int EditorSettings::autoBackupInterval() const
246262
{
247263
return d_autoBackupInterval.value_or(15);
@@ -273,6 +289,9 @@ void EditorSettings::mergeSettings(const EditorSettings& other)
273289
if (other.d_showControlChars) {
274290
d_showControlChars = other.d_showControlChars;
275291
}
292+
if (other.d_autoBrackets) {
293+
d_autoBrackets = other.d_autoBrackets;
294+
}
276295
}
277296

278297
}

core/katvan_editorsettings.h

+5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ class EditorSettings
7676
LineNumberStyle lineNumberStyle() const;
7777
bool showControlChars() const;
7878

79+
bool autoBrackets() const;
80+
7981
int autoBackupInterval() const;
8082

8183
void setFontFamily(const QString& fontFamily) { d_fontFamily = fontFamily; }
@@ -86,6 +88,7 @@ class EditorSettings
8688
void setTabWidth(int tabWidth) { d_tabWidth = tabWidth; }
8789
void setLineNumberStyle(LineNumberStyle style) { d_lineNumberStyle = style; }
8890
void setShowControlChars(bool show) { d_showControlChars = show; }
91+
void setAutoBrackets(bool enable) { d_autoBrackets = enable; }
8992
void setAutoBackupInterval(int interval) { d_autoBackupInterval = interval; }
9093

9194
bool hasFontFamily() const { return d_fontFamily.has_value(); }
@@ -96,6 +99,7 @@ class EditorSettings
9699
bool hasTabWidth() const { return d_tabWidth.has_value(); }
97100
bool hasLineNumberStyle() const { return d_lineNumberStyle.has_value(); }
98101
bool hasShowControlChars() const { return d_showControlChars.has_value(); }
102+
bool hasAutoBrackets() const { return d_autoBrackets.has_value(); }
99103
bool hasAutoBackupInterval() const { return d_autoBackupInterval.has_value(); }
100104

101105
void mergeSettings(const EditorSettings& other);
@@ -111,6 +115,7 @@ class EditorSettings
111115
std::optional<int> d_tabWidth;
112116
std::optional<LineNumberStyle> d_lineNumberStyle;
113117
std::optional<bool> d_showControlChars;
118+
std::optional<bool> d_autoBrackets;
114119
std::optional<int> d_autoBackupInterval;
115120
};
116121

shell/katvan_settingsdialog.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ EditorSettings EditorSettingsTab::settings() const
124124

125125
settings.setIndentWidth(d_indentWidth->value());
126126
settings.setTabWidth(d_tabWidth->value());
127+
settings.setAutoBrackets(d_autoBrackets->isChecked());
127128
settings.setAutoBackupInterval(d_backupInterval->value());
128129

129130
return settings;
@@ -152,6 +153,7 @@ void EditorSettingsTab::setSettings(const EditorSettings& settings)
152153

153154
d_indentWidth->setValue(settings.indentWidth());
154155
d_tabWidth->setValue(settings.tabWidth());
156+
d_autoBrackets->setChecked(settings.autoBrackets());
155157
d_backupInterval->setValue(settings.autoBackupInterval());
156158

157159
updateControlStates();
@@ -172,7 +174,7 @@ void EditorSettingsTab::setupUI()
172174
d_lineNumberStyle->addItem(tr("On Primary Side"), QVariant::fromValue(EditorSettings::LineNumberStyle::PRIMARY_ONLY));
173175
d_lineNumberStyle->addItem(tr("Don't Show"), QVariant::fromValue(EditorSettings::LineNumberStyle::NONE));
174176

175-
d_showControlChars = new QCheckBox(tr("Show Control Characters"));
177+
d_showControlChars = new QCheckBox(tr("Show BiDi Control Characters"));
176178
if (QLibraryInfo::version() < QVersionNumber(6, 9)) {
177179
d_showControlChars->setEnabled(false);
178180
d_showControlChars->setToolTip(tr("Requires Qt version 6.9 or above"));
@@ -203,6 +205,8 @@ void EditorSettingsTab::setupUI()
203205
QLabel* tabWidthLabel = new QLabel(tr("Tab &Display Width:"));
204206
tabWidthLabel->setBuddy(d_tabWidth);
205207

208+
d_autoBrackets = new QCheckBox(tr("Automatically insert &closing brackets"));
209+
206210
d_backupInterval = new QSpinBox();
207211
d_backupInterval->setSuffix(tr(" seconds"));
208212
d_backupInterval->setSpecialValueText(tr("Disabled"));
@@ -240,6 +244,10 @@ void EditorSettingsTab::setupUI()
240244
indentationLayout->addLayout(indentationTopLayout);
241245
indentationLayout->addLayout(indentationStyleLayout);
242246

247+
QGroupBox* behaviourGroup = new QGroupBox(tr("Behaviour"));
248+
QVBoxLayout* behaviourLayout = new QVBoxLayout(behaviourGroup);
249+
behaviourLayout->addWidget(d_autoBrackets);
250+
243251
QGroupBox* autoBackupGroup = new QGroupBox(tr("Automatically Backup Unsaved Changes"));
244252

245253
QFormLayout* autoBackupLayout = new QFormLayout(autoBackupGroup);
@@ -248,6 +256,7 @@ void EditorSettingsTab::setupUI()
248256
QVBoxLayout* mainLayout = new QVBoxLayout(this);
249257
mainLayout->addWidget(appearanceGroup);
250258
mainLayout->addWidget(indentationGroup);
259+
mainLayout->addWidget(behaviourGroup);
251260
mainLayout->addWidget(autoBackupGroup);
252261
mainLayout->addStretch(1);
253262
}

shell/katvan_settingsdialog.h

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ private slots:
8888
QRadioButton* d_indentWithTabs;
8989
QSpinBox* d_indentWidth;
9090
QSpinBox* d_tabWidth;
91+
QCheckBox* d_autoBrackets;
9192
QSpinBox* d_backupInterval;
9293
};
9394

tests/katvan_editorsettings.t.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,16 @@ TEST(EditorSettingsTests, TabWidth) {
231231
EXPECT_THAT(s5.hasTabWidth(), ::testing::IsFalse());
232232
}
233233

234+
TEST(EditorSettingsTests, AutoBrackets) {
235+
EditorSettings s1 { "auto-brackets ON" };
236+
EXPECT_THAT(s1.hasAutoBrackets(), ::testing::IsTrue());
237+
EXPECT_THAT(s1.autoBrackets(), ::testing::IsTrue());
238+
EXPECT_THAT(s1.toModeLine(), ::testing::Eq(QStringLiteral("auto-brackets on;")));
239+
240+
EditorSettings s2 { "replace-tabs" };
241+
EXPECT_THAT(s2.hasAutoBrackets(), ::testing::IsFalse());
242+
}
243+
234244
TEST(EditorSettingsTests, AutoBackupInterval) {
235245
EditorSettings s1 { "backup-interval 10", EditorSettings::ModeSource::SETTINGS };
236246
EXPECT_THAT(s1.hasAutoBackupInterval(), ::testing::IsTrue());

0 commit comments

Comments
 (0)