Ich verwende es, expect
um Autovervollständigungen in zsh zu testen (tatsächlich verwende ich das Ruby- Gem, das im Hintergrund greenletters
Rubys verwendet , um aufzurufen ). Nachdem ich die Dokumentation und alte Archive durchforstet hatte (dies war der letzte Kommentar, der mir den folgenden Code lieferte):PTY
expect
https://narkive.com/jbOlxniA:5.2481.94) Ich habe diese Möglichkeit, die Vervollständigung einfach auf einem „sauberen“ System zu laden:
PROMPT='>' zsh -f
fpath+=($PWD/Completion)
autoload -Uz compinit
_compdir=$PWD/Completion compinit -D
Nun funktioniert es, eine Datei manuell zu erstellen und auf diese Weise zu ladenvöllig in Ordnung. Aber sobald ich versuche, es mithilfe der greenletters
Bibliothek zu laden, werden keine Vervollständigungen geladen:
>options Completion/
------------------------------------------------------------
Hier ist ein in Ruby geschriebenes SSCCE (ich habe Probleme, dasselbe Beispiel in einem einfachen Skript zu erstellen ). Um dieses Skript ausführen zu können, expect
müssen Sie Folgendes ausführen :gem install greenletters
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 "$@"
Verhält sich zsh bei einem PTY anders als beim normalen Laden? Ist das etwas, was ich bei PTYs im Allgemeinen einfach nicht verstehe? Funktionieren sie alle so?