OK, małe tło: używam komputera Mac i robię tyle, ile to możliwe w interfejsie CLI.
W szczególności często wkładam pamięć USB cp
lub mv
plik, a następnie natychmiast chcę go wysunąć (odmontować i odłączyć). Zwykle można tego dokonać kilkoma naciśnięciami klawiszy, z wyjątkiem odmontowania go, co wymaga (w 10.7) przejścia do pustej przestrzeni pulpitu (zwykle co najmniej dwóch spacji), wybrania dysku i naciśnięcia „Command-e”. Szczerze mówiąc, ta odmontowana procedura jest, o kilka rzędów wielkości, najbardziej czasochłonną i żmudną częścią tego procesu.
O wiele bardziej naturalne i efektywne byłoby po prostu pisanie, powiedz:
ej<tab> J<tab>
Powiedz, że moja pamięć USB montuje się w / Volumes / Jefferson. To, czego spodziewałbym się po moich 6 naciśnięciach klawiszy, to:
eject /Volumes/Jefferson
To powinno uruchomić polecenie:
diskutil unmount /Volumes/Jefferson
Więc napisałem fajną małą funkcję:
eject() {
diskutil unmount /Volumes/$1
}
I funkcja uzupełniania, aby iść z tym:
compdef '_files -g "/Volumes/*"' eject
Jest z tym jednak problem. _files
Funkcja wytwarza pełne ścieżki. Teraz mógłbym zmienić linię w mojej funkcji „wysuwania” na diskutil unmount $1
, i wszystko by działało, ale wtedy nie mam możliwości wpisania pierwszej litery nazwy punktu podłączenia, ponieważ ścieżka zaczyna się od / Volumes /. Na przykład, jeśli J<tab
napiszę, otrzymam autouzupełnianie plików w PWD. Musiałbym wpisać, /Volumes/J<tab>
aby uzyskać pożądane zakończenie.
Czy istnieje funkcja uzupełniania, która pobiera nazwy plików ze wstępnie określonej, określonej lokalizacji, zamiast generować pełne ścieżki?
Naprawdę chciałbym sprowadzić to do 6 naciśnięć klawiszy.