From f69b3e3d38b6b33f7380700633d9cd18c8ac584e Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Tue, 1 Aug 2023 19:19:22 +0900 Subject: [PATCH] Improve resume behavior --- denops/ddu/app.ts | 5 +++-- denops/ddu/context.ts | 2 ++ denops/ddu/ddu.ts | 13 +++++++------ denops/ddu/types.ts | 1 + 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/denops/ddu/app.ts b/denops/ddu/app.ts index ca897a8..15025cf 100644 --- a/denops/ddu/app.ts +++ b/denops/ddu/app.ts @@ -192,9 +192,10 @@ export function main(denops: Denops) { ddu = pushDdu(options.name); // Extends previous options - const prevOptions = Object.assign(prevDdu.getOptions(), { + const prevOptions = { + ...prevDdu.getOptions(), input: "", - }); + }; userOptions = foldMerge(mergeDduOptions, defaultDduOptions, [ prevOptions, userOptions, diff --git a/denops/ddu/context.ts b/denops/ddu/context.ts index 211a470..a76be43 100644 --- a/denops/ddu/context.ts +++ b/denops/ddu/context.ts @@ -60,6 +60,7 @@ export function defaultContext(): Context { return { bufName: "", bufNr: 0, + cwd: "", done: false, doneUi: false, input: "", @@ -339,6 +340,7 @@ export class ContextBuilder { ...defaultContext(), bufName: await fn.bufname(denops, "%"), bufNr: await fn.bufnr(denops, "%"), + cwd: await fn.getcwd(denops), mode: await fn.mode(denops), winId: await fn.win_getid(denops) as number, }, diff --git a/denops/ddu/ddu.ts b/denops/ddu/ddu.ts index b09b812..5fbd330 100644 --- a/denops/ddu/ddu.ts +++ b/denops/ddu/ddu.ts @@ -124,8 +124,7 @@ export class Ddu { options: DduOptions, userOptions: UserOptions, ): Promise { - const prevInput = this.context.input; - const prevPath = this.context.path; + const prevContext = { ...this.context }; this.context = context; this.userOptions = userOptions; @@ -151,6 +150,7 @@ export class Ddu { if ( this.initialized && resume && !uiChanged && + prevContext.done && this.context.cwd === prevContext.cwd && (!userOptions?.sources || equal(userOptions.sources, this.options.sources)) ) { @@ -162,12 +162,13 @@ export class Ddu { // Set input if (userOptions?.input !== undefined) { await this.setInput(denops, userOptions.input as string); - } else if (prevInput !== "") { - await this.setInput(denops, prevInput); + } else if (prevContext.input !== "") { + await this.setInput(denops, prevContext.input); } - // Set path - this.context.path = prevPath; + // Restore + this.context.path = prevContext.path; + this.context.maxItems = prevContext.maxItems; const [ui, uiOptions, uiParams] = await this.getUi(denops); if (!ui) { diff --git a/denops/ddu/types.ts b/denops/ddu/types.ts index 565eba5..456c7ca 100644 --- a/denops/ddu/types.ts +++ b/denops/ddu/types.ts @@ -44,6 +44,7 @@ export type TreePath = string | string[]; export type Context = { bufName: string; bufNr: number; + cwd: string; done: boolean; doneUi: boolean; input: string;