diff --git a/common/content/commands.js b/common/content/commands.js index af46822d..8d051049 100644 --- a/common/content/commands.js +++ b/common/content/commands.js @@ -757,14 +757,10 @@ function Commands() //{{{ if (completeOpt) { - // TODO: Should we catch any eval error? It'll be reported anyway. if (/^custom,/.test(completeOpt)) - completeFunc = liberator.eval(completeOpt.substr(7)); + completeFunc = completeOpt.substr(7); else - completeFunc = completion[completeOptionMap[completeOpt]]; - - if (completeFunc == null) - return liberator.echoerr("No such completion function"); + completeFunc = "completion." + completeOptionMap[completeOpt]; } if (!commands.addUserCommand( @@ -775,9 +771,20 @@ function Commands() //{{{ argCount: nargsOpt, bang: bangOpt, count: countOpt, - // TODO: handle missing function - //completer: completeFunc, - completer: function (context, args) eval(completeFunc(context, args)), + completer: function (context, args) { + if (completeFunc) + { + try + { + liberator.eval(completeFunc).call(completion, context, args) + } + catch (e) + { + // FIXME: should be pushed to the MOW + liberator.echoerr("E117: Unknown function: " + completeFunc); + } + } + }, replacementText: args.literalArg }, args.bang) diff --git a/vimperator/locale/en-US/map.txt b/vimperator/locale/en-US/map.txt index 30d04563..e3d35e20 100644 --- a/vimperator/locale/en-US/map.txt +++ b/vimperator/locale/en-US/map.txt @@ -323,9 +323,9 @@ Completion can be enabled by specifying one of the following arguments to the Custom completion Custom completion can be provided by specifying the "custom,{func}" argument to --complete. The {func} is called with to arguments, a completion context, and +-complete. The {func} is called with two arguments, a completion context, and an an object describing the command's arguments. It should set the context's -'completions' property, or return an object, with 'start' and 'items' +\'completions' property, or return an object, with \'start' and \'items' properties, describing the completions and where the replacement is to start. *start* is the index into the word being completed at which the returned values