Script Ruby para crear un archivo temporal para usar con letras verdes

Script Ruby para crear un archivo temporal para usar con letras verdes

Lo estoy usando expectpara probar los autocompletados en zsh (en realidad estoy usando la greenlettersgema Ruby, con usos de Ruby PTYbajo las sábanas, para llamar expect). Después de revisar la documentación y los archivos antiguos (este fue el comentario final que me dio el siguiente código:https://narkive.com/jbOlxniA:5.2481.94) Tengo esta forma de cargar fácilmente la finalización en un sistema "limpio":

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

Ahora, crear un archivo manualmente y cargarlo de esta manera funciona.Perfectamente bien. Pero, tan pronto como intento cargarlo usando la greenlettersbiblioteca, no carga ninguna finalización:

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

Aquí hay un SSCCE escrito en Ruby (tengo problemas para crear el mismo ejemplo en un expectscript simple). Deberá ejecutar gem install greenletterspara poder ejecutar 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 "$@"

¿Zsh actúa de manera diferente en un PTY que en la carga normal? ¿Es esto algo que simplemente no entiendo sobre los PTY en general? ¿Todos funcionan así?

información relacionada