@sunub/obsidian-mcp-server 0.3.23 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/build/cli/App.d.ts +4 -1
  2. package/build/cli/App.js +158 -104
  3. package/build/cli/App.js.map +1 -1
  4. package/build/cli/AppContainer.js +8 -2
  5. package/build/cli/AppContainer.js.map +1 -1
  6. package/build/cli/config/mcpServersConfig.js +19 -2
  7. package/build/cli/config/mcpServersConfig.js.map +1 -1
  8. package/build/cli/context/InputContext.d.ts +1 -1
  9. package/build/cli/context/KeypressContext.js +0 -5
  10. package/build/cli/context/KeypressContext.js.map +1 -1
  11. package/build/cli/context/KeypressContext.util.js +1 -2
  12. package/build/cli/context/KeypressContext.util.js.map +1 -1
  13. package/build/cli/context/UIStateContext.d.ts +16 -0
  14. package/build/cli/context/UIStateContext.js +10 -0
  15. package/build/cli/context/UIStateContext.js.map +1 -0
  16. package/build/cli/hooks/useCommandCompletion.d.ts +1 -1
  17. package/build/cli/hooks/useCommandCompletion.js +1 -1
  18. package/build/cli/hooks/useCommandCompletion.js.map +1 -1
  19. package/build/cli/hooks/useHistoryManager.d.ts +1 -0
  20. package/build/cli/hooks/useHistoryManager.js +19 -1
  21. package/build/cli/hooks/useHistoryManager.js.map +1 -1
  22. package/build/cli/hooks/useInputHistory.d.ts +2 -2
  23. package/build/cli/hooks/useInputHistory.js +2 -2
  24. package/build/cli/hooks/useInputHistory.js.map +1 -1
  25. package/build/cli/hooks/useKeyMatchers.d.ts +0 -9
  26. package/build/cli/hooks/useKeyMatchers.js +0 -9
  27. package/build/cli/hooks/useKeyMatchers.js.map +1 -1
  28. package/build/cli/hooks/useKeypress.d.ts +0 -13
  29. package/build/cli/hooks/useKeypress.js +0 -13
  30. package/build/cli/hooks/useKeypress.js.map +1 -1
  31. package/build/cli/hooks/useLlmStream/useLlmStream.d.ts +1 -1
  32. package/build/cli/hooks/useLlmStream/useLlmStream.js +9 -3
  33. package/build/cli/hooks/useLlmStream/useLlmStream.js.map +1 -1
  34. package/build/cli/hooks/useMcpManager.d.ts +0 -10
  35. package/build/cli/hooks/useMcpManager.js +6 -0
  36. package/build/cli/hooks/useMcpManager.js.map +1 -1
  37. package/build/cli/hooks/usePromptCompletion.d.ts +1 -2
  38. package/build/cli/hooks/usePromptCompletion.js +0 -1
  39. package/build/cli/hooks/usePromptCompletion.js.map +1 -1
  40. package/build/cli/hooks/useTransientMessage.d.ts +7 -0
  41. package/build/cli/hooks/useTransientMessage.js +34 -0
  42. package/build/cli/hooks/useTransientMessage.js.map +1 -0
  43. package/build/cli/index.js +7 -3
  44. package/build/cli/index.js.map +1 -1
  45. package/build/cli/key/keyBindings.d.ts +0 -19
  46. package/build/cli/key/keyBindings.js +0 -14
  47. package/build/cli/key/keyBindings.js.map +1 -1
  48. package/build/cli/key/keyMatchers.d.ts +0 -9
  49. package/build/cli/key/keyMatchers.js +0 -8
  50. package/build/cli/key/keyMatchers.js.map +1 -1
  51. package/build/cli/key/keybindingUtils.d.ts +3 -0
  52. package/build/cli/key/keybindingUtils.js +74 -0
  53. package/build/cli/key/keybindingUtils.js.map +1 -0
  54. package/build/cli/key/textBuffer/constants.d.ts +1 -0
  55. package/build/cli/key/textBuffer/constants.js +2 -0
  56. package/build/cli/key/textBuffer/constants.js.map +1 -0
  57. package/build/cli/key/textBuffer/index.d.ts +3 -0
  58. package/build/cli/key/textBuffer/index.js +3 -0
  59. package/build/cli/key/textBuffer/index.js.map +1 -0
  60. package/build/cli/key/textBuffer/textBuffer.d.ts +73 -0
  61. package/build/cli/key/textBuffer/textBuffer.js +1154 -0
  62. package/build/cli/key/textBuffer/textBuffer.js.map +1 -0
  63. package/build/cli/key/textBuffer/types.d.ts +106 -0
  64. package/build/cli/key/textBuffer/types.js +2 -0
  65. package/build/cli/key/textBuffer/types.js.map +1 -0
  66. package/build/cli/services/InputOffloadService.d.ts +20 -0
  67. package/build/cli/services/InputOffloadService.js +105 -0
  68. package/build/cli/services/InputOffloadService.js.map +1 -0
  69. package/build/cli/services/McpClientService.js +5 -3
  70. package/build/cli/services/McpClientService.js.map +1 -1
  71. package/build/cli/services/McpManager.js +4 -2
  72. package/build/cli/services/McpManager.js.map +1 -1
  73. package/build/cli/theme/builtin/tokyonight-dark.js +1 -0
  74. package/build/cli/theme/builtin/tokyonight-dark.js.map +1 -1
  75. package/build/cli/theme/semantic-tokens.js +8 -8
  76. package/build/cli/theme/semantic-tokens.js.map +1 -1
  77. package/build/cli/theme/theme-manager.js +4 -2
  78. package/build/cli/theme/theme-manager.js.map +1 -1
  79. package/build/cli/theme/theme.d.ts +1 -23
  80. package/build/cli/theme/theme.js +11 -31
  81. package/build/cli/theme/theme.js.map +1 -1
  82. package/build/cli/types.d.ts +1 -2
  83. package/build/cli/ui/CLILogo.d.ts +1 -0
  84. package/build/cli/ui/CLILogo.js +33 -0
  85. package/build/cli/ui/CLILogo.js.map +1 -0
  86. package/build/cli/ui/HistoryItemDisplay.js +36 -1
  87. package/build/cli/ui/HistoryItemDisplay.js.map +1 -1
  88. package/build/cli/ui/InputPrompt.d.ts +8 -1
  89. package/build/cli/ui/InputPrompt.js +142 -24
  90. package/build/cli/ui/InputPrompt.js.map +1 -1
  91. package/build/cli/ui/LLMHealthChecker.js +1 -1
  92. package/build/cli/ui/LLMStatusLoader.d.ts +10 -0
  93. package/build/cli/ui/LLMStatusLoader.js +35 -0
  94. package/build/cli/ui/LLMStatusLoader.js.map +1 -0
  95. package/build/cli/ui/MainContent.js +2 -7
  96. package/build/cli/ui/MainContent.js.map +1 -1
  97. package/build/cli/ui/SystemInfoSummaryBox.js +3 -2
  98. package/build/cli/ui/SystemInfoSummaryBox.js.map +1 -1
  99. package/build/cli/ui/ThinkingIndicator.d.ts +3 -2
  100. package/build/cli/ui/ThinkingIndicator.js +3 -3
  101. package/build/cli/ui/ThinkingIndicator.js.map +1 -1
  102. package/build/cli/ui/ToastDisplay.d.ts +2 -0
  103. package/build/cli/ui/ToastDisplay.js +19 -0
  104. package/build/cli/ui/ToastDisplay.js.map +1 -0
  105. package/build/cli/ui/shared/ExpandableText.d.ts +0 -3
  106. package/build/cli/ui/shared/ExpandableText.js +0 -3
  107. package/build/cli/ui/shared/ExpandableText.js.map +1 -1
  108. package/build/cli/utils/bootLogo.d.ts +8 -0
  109. package/build/cli/utils/bootLogo.js +68 -0
  110. package/build/cli/utils/bootLogo.js.map +1 -0
  111. package/build/cli/utils/events.d.ts +28 -0
  112. package/build/cli/utils/events.js +18 -0
  113. package/build/cli/utils/events.js.map +1 -0
  114. package/build/cli/utils/highlights.d.ts +8 -0
  115. package/build/cli/utils/highlights.js +117 -0
  116. package/build/cli/utils/highlights.js.map +1 -0
  117. package/build/cli/utils/textUtil.d.ts +5 -0
  118. package/build/cli/utils/textUtil.js +32 -0
  119. package/build/cli/utils/textUtil.js.map +1 -1
  120. package/build/shared/utils/debugLogger.d.ts +4 -0
  121. package/build/shared/utils/debugLogger.js +12 -0
  122. package/build/shared/utils/debugLogger.js.map +1 -1
  123. package/build/utils/cleanup.d.ts +30 -0
  124. package/build/utils/cleanup.js +137 -0
  125. package/build/utils/cleanup.js.map +1 -0
  126. package/package.json +4 -2
  127. package/build/cli/key/text-buffer.d.ts +0 -156
  128. package/build/cli/key/text-buffer.js +0 -937
  129. package/build/cli/key/text-buffer.js.map +0 -1
  130. package/build/cli/tmp.d.ts +0 -1
  131. package/build/cli/tmp.js +0 -27
  132. package/build/cli/tmp.js.map +0 -1
  133. package/build/cli/ui/layout/DefaultAppLayout.d.ts +0 -2
  134. package/build/cli/ui/layout/DefaultAppLayout.js +0 -6
  135. package/build/cli/ui/layout/DefaultAppLayout.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ export declare const ExitCodes: {
2
+ readonly SUCCESS: 0;
3
+ readonly FATAL_AUTHENTICATION_ERROR: 41;
4
+ readonly FATAL_INPUT_ERROR: 42;
5
+ readonly FATAL_CONFIG_ERROR: 52;
6
+ readonly FATAL_CANCELLATION_ERROR: 130;
7
+ };
8
+ type CleanupTask = () => Promise<void> | void;
9
+ declare class CleanupManager {
10
+ private tasks;
11
+ private isShuttingDown;
12
+ private softAbortHandler;
13
+ private lastSigInt;
14
+ register(name: string, task: CleanupTask): void;
15
+ registerSoftAbort(handler: () => void): void;
16
+ executeAll(timeoutMs?: number): Promise<void>;
17
+ private drainStdin;
18
+ gracefulShutdown(reason: string, exitCode?: 0): Promise<void>;
19
+ handleCrash(error: unknown): void;
20
+ setupSignalHandlers(): void;
21
+ cleanupCheckpoints(): Promise<void>;
22
+ }
23
+ export declare const cleanupManager: CleanupManager;
24
+ export declare const registerCleanup: (name: string, task: CleanupTask) => void;
25
+ export declare const registerSoftAbort: (handler: () => void) => void;
26
+ export declare const runExitCleanup: () => Promise<void>;
27
+ export declare const setupSignalHandlers: () => void;
28
+ export declare const cleanupCheckpoints: () => Promise<void>;
29
+ export declare const gracefulShutdown: (reason: string) => Promise<void>;
30
+ export {};
@@ -0,0 +1,137 @@
1
+ import { appendFileSync, existsSync, promises as fs } from "node:fs";
2
+ import path from "node:path";
3
+ import state from "../config.js";
4
+ import { debugLogger } from "../shared/index.js";
5
+ import { APP_DATA_DIR } from "./constants.js";
6
+ export const ExitCodes = {
7
+ SUCCESS: 0,
8
+ FATAL_AUTHENTICATION_ERROR: 41,
9
+ FATAL_INPUT_ERROR: 42,
10
+ FATAL_CONFIG_ERROR: 52,
11
+ FATAL_CANCELLATION_ERROR: 130,
12
+ };
13
+ class CleanupManager {
14
+ tasks = [];
15
+ isShuttingDown = false;
16
+ softAbortHandler = null;
17
+ lastSigInt = 0;
18
+ register(name, task) {
19
+ this.tasks.push({ name, task });
20
+ debugLogger.writeDebug(`[CleanupManager] Registered task: ${name}`);
21
+ }
22
+ registerSoftAbort(handler) {
23
+ this.softAbortHandler = handler;
24
+ }
25
+ async executeAll(timeoutMs = 3000) {
26
+ if (this.isShuttingDown)
27
+ return;
28
+ this.isShuttingDown = true;
29
+ debugLogger.info("[CleanupManager] Starting cleanup sequence...");
30
+ await this.drainStdin();
31
+ const tasksToRun = [...this.tasks].reverse();
32
+ this.tasks = [];
33
+ for (const { name, task } of tasksToRun) {
34
+ try {
35
+ debugLogger.debug(`[CleanupManager] Executing task: ${name}`);
36
+ await Promise.race([
37
+ task(),
38
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Task "${name}" timed out`)), timeoutMs)),
39
+ ]);
40
+ }
41
+ catch (error) {
42
+ debugLogger.warn(`[CleanupManager] Task "${name}" failed or timed out:`, error);
43
+ }
44
+ }
45
+ debugLogger.info("[CleanupManager] Cleanup complete.");
46
+ }
47
+ async drainStdin() {
48
+ if (!process.stdin?.isTTY)
49
+ return;
50
+ try {
51
+ // Stop reading from stdin
52
+ process.stdin.pause();
53
+ if (process.stdin.setRawMode) {
54
+ process.stdin.setRawMode(false);
55
+ }
56
+ }
57
+ catch (_err) {
58
+ // Ignore
59
+ }
60
+ }
61
+ async gracefulShutdown(reason, exitCode = ExitCodes.SUCCESS) {
62
+ if (this.isShuttingDown)
63
+ return;
64
+ debugLogger.info(`[CleanupManager] Graceful shutdown initiated: ${reason}`);
65
+ await this.executeAll();
66
+ process.exit(exitCode);
67
+ }
68
+ handleCrash(error) {
69
+ if (this.isShuttingDown)
70
+ return;
71
+ this.isShuttingDown = true;
72
+ const errorMsg = error instanceof Error ? error.stack : String(error);
73
+ const logMsg = `\n[${new Date().toISOString()}] CRASH DETECTED:\n${errorMsg}\n`;
74
+ process.stderr.write(logMsg);
75
+ try {
76
+ appendFileSync("crash.log", logMsg, "utf-8");
77
+ }
78
+ catch {
79
+ // Ignore
80
+ }
81
+ debugLogger.error("[CleanupManager] Emergency exit. Data loss may occur.");
82
+ process.exit(1);
83
+ }
84
+ setupSignalHandlers() {
85
+ process.on("SIGHUP", () => this.gracefulShutdown("SIGHUP"));
86
+ process.on("SIGTERM", () => this.gracefulShutdown("SIGTERM"));
87
+ process.on("SIGINT", () => {
88
+ const now = Date.now();
89
+ if (now - this.lastSigInt < 1000) {
90
+ this.gracefulShutdown("SIGINT (double-tap)");
91
+ }
92
+ else {
93
+ this.lastSigInt = now;
94
+ debugLogger.info("[CleanupManager] SIGINT received. Soft abort triggered. Press again within 1s to exit.");
95
+ if (this.softAbortHandler) {
96
+ this.softAbortHandler();
97
+ }
98
+ }
99
+ });
100
+ process.on("uncaughtException", (error) => {
101
+ this.handleCrash(error);
102
+ });
103
+ process.on("unhandledRejection", (reason) => {
104
+ this.handleCrash(reason);
105
+ });
106
+ }
107
+ async cleanupCheckpoints() {
108
+ try {
109
+ if (state.vaultPath) {
110
+ const vectorCacheDir = path.join(state.vaultPath, ".obsidian", "vector_cache");
111
+ if (existsSync(vectorCacheDir)) {
112
+ const lockFile = path.join(vectorCacheDir, "write.lock");
113
+ if (existsSync(lockFile)) {
114
+ await fs.unlink(lockFile);
115
+ debugLogger.debug("[CleanupManager] Stale VectorDB lock removed.");
116
+ }
117
+ }
118
+ }
119
+ const tempDir = path.join(APP_DATA_DIR, "temp");
120
+ if (existsSync(tempDir)) {
121
+ await fs.rm(tempDir, { recursive: true, force: true });
122
+ debugLogger.debug("[CleanupManager] Temp directory cleaned up.");
123
+ }
124
+ }
125
+ catch (error) {
126
+ debugLogger.warn("[CleanupManager] Failed to cleanup checkpoints:", error);
127
+ }
128
+ }
129
+ }
130
+ export const cleanupManager = new CleanupManager();
131
+ export const registerCleanup = (name, task) => cleanupManager.register(name, task);
132
+ export const registerSoftAbort = (handler) => cleanupManager.registerSoftAbort(handler);
133
+ export const runExitCleanup = () => cleanupManager.executeAll();
134
+ export const setupSignalHandlers = () => cleanupManager.setupSignalHandlers();
135
+ export const cleanupCheckpoints = () => cleanupManager.cleanupCheckpoints();
136
+ export const gracefulShutdown = (reason) => cleanupManager.gracefulShutdown(reason);
137
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/utils/cleanup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunub/obsidian-mcp-server",
3
- "version": "0.3.23",
3
+ "version": "0.3.24",
4
4
  "description": "A server for the Obsidian Model Context Protocol.",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -54,12 +54,14 @@
54
54
  "comment-json": "^5.0.0",
55
55
  "dotenv": "^17.4.2",
56
56
  "gray-matter": "^4.0.3",
57
+ "ink": "npm:@jrichman/ink@6.6.9",
58
+ "ink-picture": "^1.3.5",
59
+ "ink-spinner": "^5.0.0",
57
60
  "inquirer": "^13.4.2",
58
61
  "js-tiktoken": "^1.0.21",
59
62
  "mnemonist": "^0.40.3",
60
63
  "ollama": "^0.6.3",
61
64
  "ora": "^9.3.0",
62
- "ink": "npm:@jrichman/ink@6.6.9",
63
65
  "prompts": "^2.4.2",
64
66
  "react": "^19.2.5",
65
67
  "string-width": "^8.2.0",
@@ -1,156 +0,0 @@
1
- import type { Key } from "../context/KeypressContext.js";
2
- export declare const PASTED_TEXT_PLACEHOLDER_REGEX: RegExp;
3
- export type Direction = "left" | "right" | "up" | "down" | "home" | "end";
4
- /**
5
- * Visual layout maps logical lines to visual (wrapped) lines.
6
- */
7
- export interface VisualLayout {
8
- transformedToLogicalMaps: number[][];
9
- visualLines: string[];
10
- logicalToVisualMap: Array<Array<[number, number]>>;
11
- visualToLogicalMap: Array<[number, number]>;
12
- visualToTransformedMap: number[];
13
- }
14
- export interface TextBufferState {
15
- lines: string[];
16
- cursorRow: number;
17
- cursorCol: number;
18
- preferredCol: number | null;
19
- undoStack: string[][];
20
- redoStack: string[][];
21
- viewportWidth: number;
22
- viewportHeight: number;
23
- visualScrollRow: number;
24
- visualLayout: VisualLayout;
25
- }
26
- /**
27
- * Helper: Converts logical row/col position to absolute text offset
28
- */
29
- export declare function logicalPosToOffset(lines: string[], row: number, col: number): number;
30
- /**
31
- * Helper: Converts absolute text offset to logical row/col position
32
- */
33
- export declare function offsetToLogicalPos(text: string, offset: number): [number, number];
34
- export interface Transformation {
35
- logStart: number;
36
- logEnd: number;
37
- logicalText: string;
38
- collapsedText: string;
39
- type: "image" | "paste";
40
- id?: string;
41
- }
42
- export declare function calculateTransformationsForLine(line: string): Transformation[];
43
- export declare function calculateTransformedLine(logLine: string, logIndex: number, logicalCursor: [number, number], transformations: Transformation[]): {
44
- transformedLine: string;
45
- transformedToLogMap: number[];
46
- };
47
- export declare function useTextBuffer({ initialText, viewportWidth, viewportHeight, }: {
48
- initialText: string;
49
- viewportWidth: number;
50
- viewportHeight: number;
51
- }): {
52
- lines: string[];
53
- text: string;
54
- cursor: [number, number];
55
- preferredCol: number | null;
56
- selectionAnchor: null;
57
- pastedContent: {};
58
- allVisualLines: string[];
59
- viewportVisualLines: string[];
60
- visualCursor: [number, number];
61
- visualCursorColIndex: number;
62
- visualCursorColWidth: number;
63
- visualScrollRow: number;
64
- viewportHeight: number;
65
- visualToLogicalMap: [number, number][];
66
- transformedToLogicalMaps: number[][];
67
- visualToTransformedMap: number[];
68
- visualLayout: VisualLayout;
69
- insert: (text: string, opts?: {
70
- paste?: boolean;
71
- }) => void;
72
- setText: (text: string, cursorPosition?: "start" | "end" | number) => void;
73
- newline: () => void;
74
- backspace: () => void;
75
- del: () => void;
76
- move: (dir: Direction) => void;
77
- undo: () => void;
78
- redo: () => void;
79
- replaceRange: (startRow: number, startCol: number, endRow: number, endCol: number, text: string) => void;
80
- deleteWordLeft: () => void;
81
- deleteWordRight: () => void;
82
- killLineRight: () => void;
83
- killLineLeft: () => void;
84
- handleInput: (key: Key) => boolean;
85
- getOffset: () => number;
86
- openInExternalEditor: () => Promise<void>;
87
- replaceRangeByOffset: (_s: number, _e: number, _t: string) => void;
88
- moveToOffset: (_offset: number) => void;
89
- moveToVisualPosition: (_vr: number, _vc: number) => void;
90
- getLogicalPositionFromVisual: (_vr: number, _vc: number) => null;
91
- getExpandedPasteAtLine: (_lineIndex: number) => null;
92
- togglePasteExpansion: (_id: string, _row: number, _col: number) => void;
93
- vimDeleteWordForward: (_count: number) => void;
94
- vimDeleteWordBackward: (_count: number) => void;
95
- vimDeleteWordEnd: (_count: number) => void;
96
- vimDeleteBigWordForward: (_count: number) => void;
97
- vimDeleteBigWordBackward: (_count: number) => void;
98
- vimDeleteBigWordEnd: (_count: number) => void;
99
- vimChangeWordForward: (_count: number) => void;
100
- vimChangeWordBackward: (_count: number) => void;
101
- vimChangeWordEnd: (_count: number) => void;
102
- vimChangeBigWordForward: (_count: number) => void;
103
- vimChangeBigWordBackward: (_count: number) => void;
104
- vimChangeBigWordEnd: (_count: number) => void;
105
- vimDeleteLine: (_count: number) => void;
106
- vimChangeLine: (_count: number) => void;
107
- vimDeleteToEndOfLine: (_count?: number) => void;
108
- vimDeleteToStartOfLine: () => void;
109
- vimChangeToEndOfLine: (_count?: number) => void;
110
- vimDeleteToFirstNonWhitespace: () => void;
111
- vimChangeToStartOfLine: () => void;
112
- vimChangeToFirstNonWhitespace: () => void;
113
- vimDeleteToFirstLine: (_count: number) => void;
114
- vimDeleteToLastLine: (_count: number) => void;
115
- vimChangeMovement: (_m: "h" | "j" | "k" | "l", _count: number) => void;
116
- vimMoveLeft: (_count: number) => void;
117
- vimMoveRight: (_count: number) => void;
118
- vimMoveUp: (_count: number) => void;
119
- vimMoveDown: (_count: number) => void;
120
- vimMoveWordForward: (_count: number) => void;
121
- vimMoveWordBackward: (_count: number) => void;
122
- vimMoveWordEnd: (_count: number) => void;
123
- vimMoveBigWordForward: (_count: number) => void;
124
- vimMoveBigWordBackward: (_count: number) => void;
125
- vimMoveBigWordEnd: (_count: number) => void;
126
- vimDeleteChar: (_count: number) => void;
127
- vimDeleteCharBefore: (_count: number) => void;
128
- vimToggleCase: (_count: number) => void;
129
- vimReplaceChar: (_char: string, _count: number) => void;
130
- vimFindCharForward: (_char: string, _count: number, _till: boolean) => void;
131
- vimFindCharBackward: (_char: string, _count: number, _till: boolean) => void;
132
- vimDeleteToCharForward: (_char: string, _count: number, _till: boolean) => void;
133
- vimDeleteToCharBackward: (_char: string, _count: number, _till: boolean) => void;
134
- vimInsertAtCursor: () => void;
135
- vimAppendAtCursor: () => void;
136
- vimOpenLineBelow: () => void;
137
- vimOpenLineAbove: () => void;
138
- vimAppendAtLineEnd: () => void;
139
- vimInsertAtLineStart: () => void;
140
- vimMoveToLineStart: () => void;
141
- vimMoveToLineEnd: () => void;
142
- vimMoveToFirstNonWhitespace: () => void;
143
- vimMoveToFirstLine: () => void;
144
- vimMoveToLastLine: () => void;
145
- vimMoveToLine: (_count: number) => void;
146
- vimEscapeInsertMode: () => void;
147
- vimYankLine: (_count: number) => void;
148
- vimYankWordForward: (_count: number) => void;
149
- vimYankBigWordForward: (_count: number) => void;
150
- vimYankWordEnd: (_count: number) => void;
151
- vimYankBigWordEnd: (_count: number) => void;
152
- vimYankToEndOfLine: (_count: number) => void;
153
- vimPasteAfter: (_count: number) => void;
154
- vimPasteBefore: (_count: number) => void;
155
- };
156
- export type TextBuffer = ReturnType<typeof useTextBuffer>;