Lo estoy usando expect
para probar los autocompletados en zsh (en realidad estoy usando la greenletters
gema Ruby, con usos de Ruby PTY
bajo 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 greenletters
biblioteca, no carga ninguna finalización:
>options Completion/
------------------------------------------------------------
Aquí hay un SSCCE escrito en Ruby (tengo problemas para crear el mismo ejemplo en un expect
script simple). Deberá ejecutar gem install greenletters
para 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í?