feat(coding-agent): add external editor setting

Closes #6122
This commit is contained in:
Armin Ronacher
2026-06-27 23:57:46 +02:00
parent f2e9d75388
commit 5a073885b5
9 changed files with 91 additions and 9 deletions
@@ -354,6 +354,49 @@ describe("SettingsManager", () => {
});
});
describe("externalEditor", () => {
const originalVisual = process.env.VISUAL;
const originalEditor = process.env.EDITOR;
const originalPlatform = Object.getOwnPropertyDescriptor(process, "platform");
function setEditorEnv(visual?: string, editor?: string): void {
if (visual === undefined) delete process.env.VISUAL;
else process.env.VISUAL = visual;
if (editor === undefined) delete process.env.EDITOR;
else process.env.EDITOR = editor;
}
afterEach(() => {
setEditorEnv(originalVisual, originalEditor);
if (originalPlatform) {
Object.defineProperty(process, "platform", originalPlatform);
}
});
it("should resolve editor commands by precedence", () => {
setEditorEnv("vim", "nano");
expect(SettingsManager.inMemory({ externalEditor: "code --wait" }).getExternalEditorCommand()).toBe(
"code --wait",
);
expect(SettingsManager.inMemory().getExternalEditorCommand()).toBe("vim");
setEditorEnv(undefined, "emacs");
expect(SettingsManager.inMemory().getExternalEditorCommand()).toBe("emacs");
});
it("should fall back to platform defaults", () => {
setEditorEnv();
Object.defineProperty(process, "platform", { value: "win32" });
expect(SettingsManager.inMemory().getExternalEditorCommand()).toBe("notepad");
Object.defineProperty(process, "platform", { value: "darwin" });
expect(SettingsManager.inMemory().getExternalEditorCommand()).toBe("nano");
Object.defineProperty(process, "platform", { value: "linux" });
expect(SettingsManager.inMemory().getExternalEditorCommand()).toBe("nano");
});
});
describe("shellCommandPrefix", () => {
it("should load shellCommandPrefix from settings", () => {
const settingsPath = join(agentDir, "settings.json");