Eu descobri que completações em zsh são um dos tópicos mais difíceis em ciência da computação para envolver meu cérebro. Muitas tentativas fracassadas durante muitos anos antes de começar a obtê-lo. A ajuda disponível on-line não é boa.
Para um comando que funciona como floop [ --student=<name> ] <directory>
ou floop [ -s <name> ] <directory>
#compdef floop
local context state line
_arguments \
'(--student -s)'{--student=,-s}"[student name to filter on]:student:->students" \
"*:directory:_files -/"
case $state in
students)
students=($(echo 'chris pat lynn paige'))
_describe -t students "a student's name" students && return 0
;;
esac
Substitua o comando echo por um array literal zsh ou um comando que gere opções para a opção student.
A linha "*:directory:_files -/"
é para o argumento posicional de um caminho de diretório.
Existem maneiras de controlar se a opção pode aparecer mais de uma vez ou sempre tem que ser uma palavra separada (não "=") etc, mas este exemplo é um exemplo bem simples.