Add custom prompt text settings for status bar

This commit is contained in:
Weixuan Lin 2023-03-27 14:49:34 -07:00
parent 72696afe11
commit 0c8d9f12f4

99
main.ts
View file

@ -3,6 +3,17 @@ import { EditorSelection, Notice, App, MarkdownView, Plugin, PluginSettingTab, S
declare const CodeMirror: any;
const enum vimStatus {
normal = 'normal',
insert = 'insert',
visual = 'visual',
replace = 'replace',
}
type VimStatusPrompt = string;
type VimStatusPromptMap = {
[status in vimStatus]: VimStatusPrompt;
};
interface Settings {
vimrcFileName: string,
displayChord: boolean,
@ -10,6 +21,7 @@ interface Settings {
fixedNormalModeLayout: boolean,
capturedKeyboardMap: Record<string, string>,
supportJsCommands?: boolean
vimStatusPromptMap: VimStatusPromptMap;
}
const DEFAULT_SETTINGS: Settings = {
@ -18,14 +30,13 @@ const DEFAULT_SETTINGS: Settings = {
displayVimMode: false,
fixedNormalModeLayout: false,
capturedKeyboardMap: {},
supportJsCommands: false
}
const enum vimStatus {
normal = "🟢",
insert = "🟠",
replace = "🔴",
visual = "🟡"
supportJsCommands: false,
vimStatusPromptMap: {
normal: '🟢',
insert: '🟠',
visual: '🟡',
replace: '🔴',
},
}
// NOTE: to future maintainers, please make sure all mapping commands are included in this array.
@ -147,7 +158,9 @@ export default class VimrcPlugin extends Plugin {
this.isInsertMode = false;
this.currentVimStatus = vimStatus.normal;
if (this.settings.displayVimMode)
this.vimStatusBar?.setText(this.currentVimStatus);
this.vimStatusBar?.setText(
this.settings.vimStatusPromptMap[this.currentVimStatus]
);
cmEditor.off('vim-mode-change', this.logVimModeChange);
cmEditor.on('vim-mode-change', this.logVimModeChange);
@ -217,7 +230,9 @@ export default class VimrcPlugin extends Plugin {
break;
}
if (this.settings.displayVimMode)
this.vimStatusBar?.setText(this.currentVimStatus);
this.vimStatusBar?.setText(
this.settings.vimStatusPromptMap[this.currentVimStatus]
);
}
onunload() {
@ -583,7 +598,9 @@ export default class VimrcPlugin extends Plugin {
prepareVimModeDisplay() {
if (this.settings.displayVimMode) {
this.vimStatusBar = this.addStatusBarItem() // Add status bar item
this.vimStatusBar.setText(vimStatus.normal) // Init the vimStatusBar with normal mode
this.vimStatusBar.setText(
this.settings.vimStatusPromptMap[vimStatus.normal]
); // Init the vimStatusBar with normal mode
}
}
@ -744,5 +761,65 @@ class SettingsTab extends PluginSettingTab {
this.plugin.saveSettings();
})
});
new Setting(containerEl)
.setName('Normal mode prompt')
.setDesc('Set the status prompt text for normal mode.')
.addText((text) => {
text.setPlaceholder('Default: 🟢');
text.setValue(
this.plugin.settings.vimStatusPromptMap.normal ||
DEFAULT_SETTINGS.vimStatusPromptMap.normal
);
text.onChange((value) => {
this.plugin.settings.vimStatusPromptMap.normal = value;
this.plugin.saveSettings();
});
});
new Setting(containerEl)
.setName('Insert mode prompt')
.setDesc('Set the status prompt text for insert mode.')
.addText((text) => {
text.setPlaceholder('Default: 🟠');
text.setValue(
this.plugin.settings.vimStatusPromptMap.insert ||
DEFAULT_SETTINGS.vimStatusPromptMap.insert
);
text.onChange((value) => {
this.plugin.settings.vimStatusPromptMap.insert = value;
this.plugin.saveSettings();
});
});
new Setting(containerEl)
.setName('Visual mode prompt')
.setDesc('Set the status prompt text for visual mode.')
.addText((text) => {
text.setPlaceholder('Default: 🟡');
text.setValue(
this.plugin.settings.vimStatusPromptMap.visual ||
DEFAULT_SETTINGS.vimStatusPromptMap.visual
);
text.onChange((value) => {
this.plugin.settings.vimStatusPromptMap.visual = value;
this.plugin.saveSettings();
});
});
new Setting(containerEl)
.setName('Replace mode prompt')
.setDesc('Set the status prompt text for replace mode.')
.addText((text) => {
text.setPlaceholder('Default: 🔴');
text.setValue(
this.plugin.settings.vimStatusPromptMap.replace ||
DEFAULT_SETTINGS.vimStatusPromptMap.replace
);
text.onChange((value) => {
this.plugin.settings.vimStatusPromptMap.replace = value;
this.plugin.saveSettings();
});
});
}
}