Support Syncthing's shell completion
Syncthing added shell completion in v1.27.3-rc.1 (commit 78db3af8c5e8bd08a9773b0c4da233a52ed4cfe6). This change integrates that shell completion with Syncthing Tray's long existing completion (which only supports Bash so far).
This commit is contained in:
parent
4db88620f6
commit
5667aad412
|
@ -1 +1 @@
|
|||
Subproject commit db990abf2331af0935ad1550bfbcfdee0c76b512
|
||||
Subproject commit 212332442949744450a7d64eb0271af615580021
|
|
@ -185,11 +185,21 @@ static int runApplication(int argc, const char *const *argv)
|
|||
auto cliHelp = ConfigValueArgument("help", 'h', "shows help for Syncthing's CLI");
|
||||
cliArg.setRequiredValueCount(Argument::varValueCount);
|
||||
cliArg.setFlags(Argument::Flags::Greedy, true);
|
||||
cliArg.setValueCompletionBehavior(ValueCompletionBehavior::PreDefinedValues | ValueCompletionBehavior::InvokeCallback);
|
||||
cliArg.setCallback([] (const ArgumentOccurrence &occurrence) {
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
std::exit(static_cast<int>(LibSyncthing::runCli(occurrence.values)));
|
||||
});
|
||||
cliArg.setSubArguments({ &cliHelp });
|
||||
auto syncthingArg = OperationArgument("syncthing", '\0', "runs Syncthing");
|
||||
auto syncthingHelp = ConfigValueArgument("help", 'h', "lists Syncthing's top-level commands");
|
||||
syncthingArg.setRequiredValueCount(Argument::varValueCount);
|
||||
syncthingArg.setFlags(Argument::Flags::Greedy, true);
|
||||
syncthingArg.setValueCompletionBehavior(ValueCompletionBehavior::PreDefinedValues | ValueCompletionBehavior::InvokeCallback);
|
||||
syncthingArg.setCallback([] (const ArgumentOccurrence &occurrence) {
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
std::exit(static_cast<int>(LibSyncthing::runCommand(occurrence.values)));
|
||||
});
|
||||
syncthingArg.setSubArguments({ &syncthingHelp });
|
||||
#endif
|
||||
|
||||
|
@ -201,16 +211,6 @@ static int runApplication(int argc, const char *const *argv)
|
|||
|
||||
// parse arguments
|
||||
parser.parseArgs(argc, argv);
|
||||
#ifdef SYNCTHINGTRAY_USE_LIBSYNCTHING
|
||||
if (cliArg.isPresent()) {
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
return static_cast<int>(LibSyncthing::runCli(cliArg.values()));
|
||||
}
|
||||
if (syncthingArg.isPresent()) {
|
||||
CMD_UTILS_START_CONSOLE;
|
||||
return static_cast<int>(LibSyncthing::runCommand(syncthingArg.values()));
|
||||
}
|
||||
#endif
|
||||
|
||||
// quit already running application if quit is present
|
||||
static auto firstRun = true;
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
_@META_TARGET_NAME@()
|
||||
{
|
||||
export COMP_LINE=${COMP_WORDS[@]} # for Syncthing's own completion which is invoked via `complete -C ...`
|
||||
reply=$(@TARGET_EXECUTABLE@ --bash-completion-for "$((COMP_CWORD - 1))" "${COMP_WORDS[@]:1}")
|
||||
if [[ $reply =~ COMPREPLY=.* ]]; then
|
||||
eval "$reply" # for own completions which output `COMPREPLY=(...)`
|
||||
else
|
||||
COMPREPLY=($reply) # for Syncthing's own completion which outputs just the values
|
||||
fi
|
||||
return 0;
|
||||
}
|
||||
complete -F _@META_TARGET_NAME@ @META_TARGET_NAME@
|
Loading…
Reference in New Issue