From f9380c24394176f369288c564d508ea3a4d1a9a2 Mon Sep 17 00:00:00 2001 From: Oliver Blanthorn Date: Thu, 29 Apr 2021 14:21:16 +0200 Subject: [PATCH] Add completion options for all binds --- src/completions/Apropos.ts | 58 +++++++++++++++++++++++++------------- src/completions/Help.ts | 49 ++++++++++++++++++++++---------- 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/src/completions/Apropos.ts b/src/completions/Apropos.ts index 4f5f09ff..f352abb7 100644 --- a/src/completions/Apropos.ts +++ b/src/completions/Apropos.ts @@ -2,8 +2,10 @@ import * as Completions from "@src/completions" import * as Metadata from "@src/.metadata.generated" import * as aliases from "@src/lib/aliases" import * as config from "@src/lib/config" +import { mode2maps } from "@src/lib/binding" -class AproposCompletionOption extends Completions.CompletionOptionHTML +class AproposCompletionOption + extends Completions.CompletionOptionHTML implements Completions.CompletionOptionFuse { public fuseKeys = [] @@ -48,11 +50,44 @@ export class AproposCompletionSource extends Completions.CompletionSourceFuse { const fns = excmds.getFunctions() const settings = config.get() const exaliases = settings.exaliases - const bindings = settings.nmaps + const allbindings = {} + + for (const [key, value] of mode2maps.entries()) { + allbindings[key] = settings[value] + } + + function query2bindcompletions(options, query) { + const modenames = Object.keys(allbindings) + const completions = [] + for (const modename of modenames) { + const binds = Object.keys( + allbindings[modename], + ).filter(binding => + (binding + allbindings[modename][binding]) + .toLowerCase() + .includes(query), + ) + for (const binding of binds) { + completions.push( + new AproposCompletionOption( + binding, + `${ + modename[0].toUpperCase() + modename.slice(1) + } mode binding for \`${ + allbindings[modename][binding] + }\``, + "-b", + ), + ) + } + } + return completions + } + if ( fns === undefined || exaliases === undefined || - bindings === undefined + settings.nmaps === undefined ) { return } @@ -83,22 +118,7 @@ export class AproposCompletionSource extends Completions.CompletionSourceFuse { }), ), "-b": (options, query) => - options.concat( - Object.keys(bindings) - .filter(binding => - (binding + bindings[binding]) - .toLowerCase() - .includes(query), - ) - .map( - binding => - new AproposCompletionOption( - binding, - `Normal mode binding for \`${bindings[binding]}\``, - "-b", - ), - ), - ), + options.concat(query2bindcompletions(options, query)), "-e": (options, query) => options.concat( fns diff --git a/src/completions/Help.ts b/src/completions/Help.ts index 59d398fe..24d6889b 100644 --- a/src/completions/Help.ts +++ b/src/completions/Help.ts @@ -2,8 +2,10 @@ import * as Completions from "@src/completions" import * as Metadata from "@src/.metadata.generated" import * as aliases from "@src/lib/aliases" import * as config from "@src/lib/config" +import { mode2maps } from "@src/lib/binding" -class HelpCompletionOption extends Completions.CompletionOptionHTML +class HelpCompletionOption + extends Completions.CompletionOptionHTML implements Completions.CompletionOptionFuse { public fuseKeys = [] @@ -48,11 +50,39 @@ export class HelpCompletionSource extends Completions.CompletionSourceFuse { const fns = excmds.getFunctions() const settings = config.get() const exaliases = settings.exaliases - const bindings = settings.nmaps + const allbindings = {} + for (const [key, value] of mode2maps.entries()) { + allbindings[key] = settings[value] + } + + function query2bindcompletions(options, query) { + const modenames = Object.keys(allbindings) + const completions = [] + for (const modename of modenames) { + const binds = Object.keys( + allbindings[modename], + ).filter(binding => binding.startsWith(query)) + for (const binding of binds) { + completions.push( + new HelpCompletionOption( + binding, + `${ + modename[0].toUpperCase() + modename.slice(1) + } mode binding for \`${ + allbindings[modename][binding] + }\``, + "-b", + ), + ) + } + } + return completions + } + if ( fns === undefined || exaliases === undefined || - bindings === undefined + settings.nmaps === undefined ) { return } @@ -75,18 +105,7 @@ export class HelpCompletionSource extends Completions.CompletionSourceFuse { }), ), "-b": (options, query) => - options.concat( - Object.keys(bindings) - .filter(binding => binding.startsWith(query)) - .map( - binding => - new HelpCompletionOption( - binding, - `Normal mode binding for \`${bindings[binding]}\``, - "-b", - ), - ), - ), + options.concat(query2bindcompletions(options, query)), "-e": (options, query) => options.concat( fns