Ruby-Skript zum Erstellen einer temporären Datei zur Verwendung mit Greenletters

Ruby-Skript zum Erstellen einer temporären Datei zur Verwendung mit Greenletters

Ich verwende es, expectum Autovervollständigungen in zsh zu testen (tatsächlich verwende ich das Ruby- Gem, das im Hintergrund greenlettersRubys verwendet , um aufzurufen ). Nachdem ich die Dokumentation und alte Archive durchforstet hatte (dies war der letzte Kommentar, der mir den folgenden Code lieferte):PTYexpecthttps://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 greenlettersBibliothek 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, expectmü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?

verwandte Informationen