Wie kann ich eine Autovervollständigungsfunktion für zsh erstellen, die eine Zufallszahl zulässt?

Wie kann ich eine Autovervollständigungsfunktion für zsh erstellen, die eine Zufallszahl zulässt?

Ich habe ein kleines Skript zum Verwalten von Tickets in Gitlab-Repos. Wenn ich Ticket eingebe und die Tabulatortaste drücke, möchte ich Folgendes sehen:

% ticket
new  -- create a new ticket
#    -- Number of ticket
-v   -- increase verbosity

Dazu habe ich Folgendes getan, was nicht funktioniert:

#compdef ticket
#autoload

local -a reply

_regex_words commands "ticket commands" \
  'new:create a new ticket' \
  '-v:increase verbosity' \
  '[1-9][0-9]#:open ticket #'
_regex_arguments _ticket /$'[^\0]##\0'/ "${reply[@]}"

_ticket "$@"

Ich verstehe, dass es die Zahl in meinem Kopf nicht vervollständigen kann – und ich möchte auch nicht, dass es losgeht und möglicherweise Tausende von Zahlen lädt. Aber es wäre gut, darauf hinzuweisen, dass eine Zahl eine mögliche Vervollständigung ist.

Antwort1

Die _regex_wordsFunktion ist für die Verwendung mit wörtlichen Wörtern gedacht, nicht mit Mustern (abgesehen von einer einzelnen, *bei der Wörter abgekürzt werden können). Sie müssen also die Nummer _regex_argumentsdirekt verarbeiten – etwa wie folgt:

#compdef ticket

local -a reply

_regex_words commands "ticket commands" \
  'new:create a new ticket' \
  '-v:increase verbosity'

_regex_arguments _ticket /$'[^\0]##\0'/ \
  \( "${reply[@]}" \
  \| $'/[1-9][0-9]#\0/' ': _message -e numbers "open ticket"' \)

_ticket "$@"

Es ist ein bisschen hässlich, dass dies erfordert _message. Das ist ein Nebeneffekt der Implementierung über , _alternativeaber es gibt anderswo Beispiele für diesen Stil. Wenn Sie viele normale Optionen wie haben -v, kann es besser sein, für diese zu verwenden und nur für kompliziertere Bereiche _argumentszu verwenden ._regex_arguments

Übrigens #autoloadist Ihr Tag überflüssig. compinitbetrachtet nur die erste Zeile und führt entweder zu „ #autoloadoder“ #compdefund markiert sie als automatisch ladbar.

verwandte Informationen