mirror of
https://github.com/esm7/obsidian-vimrc-support.git
synced 2026-07-22 05:00:25 +00:00
Merge pull request #1 from SPiCaRiA/dev-custom-prompt
Allow setting custom prompt text for status bar
This commit is contained in:
commit
0ab972cc70
2 changed files with 90 additions and 11 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -15,3 +15,5 @@ main.js
|
|||
data.json
|
||||
|
||||
obsidian.d.ts
|
||||
|
||||
.DS_Store
|
||||
|
|
|
|||
99
main.ts
99
main.ts
|
|
@ -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();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue