Domanda

Ho una funzione come questa:

p() { cd ~/Clients/$1/Projects/$2; }
.

Allora posso digitare:

p "Client here" "Project here"
.

e mi porta a:

~/Clients/Client here/Projects/Project here
.

Niente di speciale in corso qui.Ma come posso implementare automaticamente per questa funzione?Sono riuscito a far funzionare il completamento del completamento per il primo argomento (clienti):

_p() { _files -W ~/Clients -/; }
compdef _p p
.

Ma come posso completare il secondo argomento (progetti)?Deve essere automatico dalla cartella in base al client:

~/Clients/$1/Projects
.

Spero che qualcuno possa aiutare!: -)

È stato utile?

Soluzione

Una persona intelligente (Mikachu) su IRC ha aiutato:

p() { cd ~/Clients/$1/Projects/$2; }
_p() {
  _arguments '1: :->client' '2: :->project'
  case $state in
    client)
      _files -W ~/Clients
    ;;
    project)
      _files -W ~/Clients/$words[CURRENT-1]/Projects
    ;;
  esac 
}
compdef _p p
.

Aggiornamento: Cambia $ Parole [corrente-1] a $ {(q) parole [corrente-1]} Per farlo funzionare con le directory contenenti spazi:

p() { cd ~/Clients/$1/Projects/$2; }
_p() {
  _arguments '1: :->client' '2: :->project'
  case $state in
    client)
      _files -W ~/Clients
    ;;
    project)
      _files -W ~/Clients/${(Q)words[CURRENT-1]}/Projects
    ;;
  esac 
}
compdef _p p
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top