From 46bfbdd829b2ae295912402d2ef33878c5ba821d Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 30 Sep 2017 18:42:21 +0200 Subject: [PATCH] Allow initialization of values for shell completion in callback Use case is implementing completion for syncthingctl also for device and folder IDs. --- application/argumentparser.cpp | 3 +++ application/argumentparser.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/application/argumentparser.cpp b/application/argumentparser.cpp index 38c5d94..582d41a 100644 --- a/application/argumentparser.cpp +++ b/application/argumentparser.cpp @@ -1054,6 +1054,9 @@ void ArgumentParser::printBashCompletion(int argc, const char *const *argv, unsi cout << "COMPREPLY=("; // -> completions for parameter values for (const Argument *arg : relevantPreDefinedValues) { + if (arg->valueCompletionBehaviour() & ValueCompletionBehavior::InvokeCallback && arg->m_callbackFunction) { + arg->m_callbackFunction(arg->isPresent() ? arg->m_occurrences.front() : ArgumentOccurrence(Argument::varValueCount)); + } if (arg->preDefinedCompletionValues()) { bool appendEquationSign = arg->valueCompletionBehaviour() & ValueCompletionBehavior::AppendEquationSign; if (argc && currentWordIndex <= lastSpecifiedArgIndex && opening) { diff --git a/application/argumentparser.h b/application/argumentparser.h index f367e71..557e68f 100644 --- a/application/argumentparser.h +++ b/application/argumentparser.h @@ -74,7 +74,8 @@ enum class ValueCompletionBehavior : unsigned char { Files = 4, /**< files */ Directories = 8, /**< directories */ FileSystemIfNoPreDefinedValues = 16, /**< files and directories but only if no values have been assigned (default behavior) */ - AppendEquationSign = 32 /**< an equation sign is appended to values which not contain an equation sign already */ + AppendEquationSign = 32, /**< an equation sign is appended to values which not contain an equation sign already */ + InvokeCallback = 64, /**< whether to invoke the callback before reading pre-defined values */ }; /// \cond