Функция _multi_parts завершения Zsh без учета регистра

У меня есть скрипт, который принимает аргументы в виде файла (аргументы, состоящие из нескольких частей), я извлекаю возможные значения и помещаю их в массив с именем raw, а затем использую

_multi_parts / "(${raw[@]})" 

для автозаполнения. Проблема в том, что это чувствительно к регистру, как я могу сделать так, чтобы я набирал mycommand get fo и нажимал Tab, он автозаполнял до mycommand get Foo/, если Foo является одной из вещей в необработанном виде.

Полное завершение здесь для справки:

_mycommand() {
  local curcontext="$curcontext" state line

  _arguments "1: :->command" "*: :->label"

  case $state in
  command)
    _arguments "1: :(add get ls rm)"
  ;;
  *) 
    case $words[2] in
      add|get|ls|rm)
        if [ -f ~/.pts ]; then
          IFS=$'\n' read -d '' -r raw <<< "$(mycommand ls)"
          _multi_parts / "(${raw[@]})"
        fi
      ;;
      *)
        _files
      ;;
    esac
  esac
}

_mycommand "$@"

mycommand ls выводит путь как имена, подобные следующим:

Foo/Bar/x
Foo/Bar/y
Derp/z
Placeholder/z

person Ross MacArthur    schedule 24.08.2017    source источник


Ответы (1)


Хорошо, я понял это:

Изменить строки

IFS=$'\n' read -d '' -r raw <<< "$(mycommand ls)"
_multi_parts / "(${raw[@]})"

To

IFS=$'\n' raw=($(mycommand ls))
_multi_parts -M "m:{[:lower:][:upper:]}={[:upper:][:lower:]}" / raw
person Ross MacArthur    schedule 25.08.2017