X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fstecman%2Fsymfony-console-completion%2Fsrc%2FCompletionCommand.php;fp=vendor%2Fstecman%2Fsymfony-console-completion%2Fsrc%2FCompletionCommand.php;h=b51666a1dee2ac5e39a97df83ad1bc8e6b995bab;hp=0000000000000000000000000000000000000000;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad diff --git a/vendor/stecman/symfony-console-completion/src/CompletionCommand.php b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php new file mode 100644 index 000000000..b51666a1d --- /dev/null +++ b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php @@ -0,0 +1,144 @@ +setName('_completion') + ->setDefinition($this->createDefinition()) + ->setDescription('BASH completion hook.') + ->setHelp(<<eval `[program] _completion -g`. + +Or for an alias: + + eval `[program] _completion -g -p [alias]`. + +END + ); + } + + /** + * {@inheritdoc} + */ + public function getNativeDefinition() + { + return $this->createDefinition(); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->handler = new CompletionHandler($this->getApplication()); + $handler = $this->handler; + + if ($input->getOption('generate-hook')) { + global $argv; + $program = $argv[0]; + + $factory = new HookFactory(); + $alias = $input->getOption('program'); + $multiple = (bool)$input->getOption('multiple'); + + // When completing for multiple apps having absolute path in the alias doesn't make sense. + if (!$alias && $multiple) { + $alias = basename($program); + } + + $hook = $factory->generateHook( + $input->getOption('shell-type') ?: $this->getShellType(), + $program, + $alias, + $multiple + ); + + $output->write($hook, true); + } else { + $handler->setContext(new EnvironmentCompletionContext()); + $output->write($this->runCompletion(), true); + } + } + + /** + * Run the completion handler and return a filtered list of results + * + * @deprecated - This will be removed in 1.0.0 in favour of CompletionCommand::configureCompletion + * + * @return string[] + */ + protected function runCompletion() + { + $this->configureCompletion($this->handler); + return $this->handler->runCompletion(); + } + + /** + * Configure the CompletionHandler instance before it is run + * + * @param CompletionHandler $handler + */ + protected function configureCompletion(CompletionHandler $handler) + { + // Override this method to configure custom value completions + } + + /** + * Determine the shell type for use with HookFactory + * + * @return string + */ + protected function getShellType() + { + if (!getenv('SHELL')) { + throw new \RuntimeException('Could not read SHELL environment variable. Please specify your shell type using the --shell-type option.'); + } + + return basename(getenv('SHELL')); + } + + protected function createDefinition() + { + return new InputDefinition(array( + new InputOption( + 'generate-hook', + 'g', + InputOption::VALUE_NONE, + 'Generate BASH code that sets up completion for this application.' + ), + new InputOption( + 'program', + 'p', + InputOption::VALUE_REQUIRED, + "Program name that should trigger completion\n(defaults to the absolute application path)." + ), + new InputOption( + 'multiple', + 'm', + InputOption::VALUE_NONE, + "Generated hook can be used for multiple applications." + ), + new InputOption( + 'shell-type', + null, + InputOption::VALUE_OPTIONAL, + 'Set the shell type (zsh or bash). Otherwise this is determined automatically.' + ), + )); + } +}