Script Ruby para criar um arquivo temporário para uso com greenletters

Script Ruby para criar um arquivo temporário para uso com greenletters

Estou usando expectpara testar preenchimentos automáticos em zsh (na verdade, usando a greenlettersgema Ruby, que usa Ruby PTYnos bastidores, para chamar expect). Depois de vasculhar a documentação e os arquivos antigos (este foi o comentário final que me deu o código abaixo:https://narkive.com/jbOlxniA:5.2481.94) Eu tenho essa maneira de carregar facilmente a conclusão em um sistema 'limpo':

PROMPT='>' zsh -f
fpath+=($PWD/Completion)
autoload -Uz compinit
_compdir=$PWD/Completion compinit -D

Agora, criar um arquivo manualmente e carregá-lo desta forma funcionaperfeitamente bem. Mas, assim que tento carregá-lo usando a greenlettersbiblioteca, ele não carrega nenhuma conclusão:

>options Completion/
------------------------------------------------------------

Aqui está um SSCCE escrito em Ruby (estou tendo problemas para criar o mesmo exemplo em um expectscript simples). Você precisará executar gem install greenletterspara poder executar este script:

require 'tempfile'
require 'greenletters'
require 'tmpdir'

@tempdir = Dir.mktmpdir
completions_folder = @tempdir + '/Completion'
FileUtils.mkdir_p(completions_folder)
@completion_script = Tempfile.create('_completion', completions_folder)
@completion_script.write(DATA)
puts @tempdir
@adv = Greenletters::Process.new("PROMPT='>' zsh -f", transcript: $stdout, timeout: 3)
@adv.start!
@adv.wait_for(:output, />/i)
@adv << "cd #{@tempdir}\r"
@adv.wait_for(:output, />/i)
@adv << "fpath+=($PWD/Completion)\r"
@adv.wait_for(:output, />/i)
@adv << "autoload -Uz compinit\r"
@adv.wait_for(:output, />/i)
@adv << "_compdir=$PWD/Completion compinit -D\r"
@adv.wait_for(:output, />/i)
@adv << "options \t"
@adv.wait_for(:output, />/i)

__END__
#compdef _options options
function _options_help {
  _arguments \
    "-h[Show help information]" \
    "--help[Show help information]"
}
function _options_desc {
  _arguments \
    "--test=[desc]" \
    "-h[Show help information]" \
    "--help[Show help information]"
}
function _options {
  local line

  local -a commands
  commands=(
    'desc:use description flag for description'
    'help:Describe available commands or one specific command'
  )

  _arguments \
    "-h[Show help information]" \
    "--help[Show help information]" \
    "1: : _describe 'command' commands" \
    "*::arg:->args"

  case $state in
    args)
      case $line[1] in
        desc)
          _options_desc
        ;;
        help)
          _options_help
        ;;
      esac
    ;;
  esac
}
_options "$@"

O zsh age de maneira diferente em um PTY do que no carregamento normal? Isso é algo que eu simplesmente não entendo sobre os PTYs em geral? Todos eles funcionam assim?

informação relacionada