OK, un po 'di background: utilizzo un Mac e faccio il più possibile nell'interfaccia della riga di comando.
In particolare, inserisco spesso una chiavetta USB cp
o mv
un file e quindi desidero immediatamente espellerlo (smontarlo e scollegarlo). Questo di solito può essere realizzato in una manciata di tasti, tranne che per smontarlo, che richiede (in 10.7) di andare in uno spazio desktop vuoto (di solito almeno due spazi di distanza), selezionando il disco e premendo "command-e". Francamente, questa procedura di smontaggio è, per diversi ordini di grandezza, la parte più lunga e noiosa del processo.
Sarebbe molto più naturale ed efficiente poter semplicemente scrivere, diciamo:
ej<tab> J<tab>
Di 'che la mia chiavetta USB si monta su / Volumes / Jefferson. Quello che mi aspetterei di ottenere dai miei 6 tasti è il seguente:
eject /Volumes/Jefferson
Questo dovrebbe eseguire il comando:
diskutil unmount /Volumes/Jefferson
Quindi, ho scritto una piccola funzione:
eject() {
diskutil unmount /Volumes/$1
}
E una funzione di completamento per andare con esso:
compdef '_files -g "/Volumes/*"' eject
C'è un problema con questo, tuttavia. La _files
funzione genera percorsi completi. Ora, potrei cambiare la linea nella mia funzione di "espulsione" in diskutil unmount $1
, e le cose funzionerebbero, ma poi non ho la possibilità di digitare la prima lettera del nome del punto di montaggio, poiché il percorso inizia con / Volumes /. Ad esempio, se digito J<tab
, otterrò il completamento automatico per i file nel PWD. Dovrei digitare /Volumes/J<tab>
per ottenere il completamento desiderato.
Quindi, esiste una funzione di completamento che prende i nomi di file da una posizione predefinita predefinita, piuttosto che generare percorsi completi?
Mi piacerebbe davvero ottenere questo fino a 6 sequenze di tasti.