Bash-completion, przydatne dopełnianie
Niektóre dystrybuje mają to standardowo wbudowane. Mam na myśli dopełnianie nazw plików oraz parametrów specyficznych dla danej aplikacji. Przykładowo wklepując polecenie bunzip2 i dopełniając TAB-em nazwę plików, będą branę pod uwagę tylko pliki z rozszerzeniami .bz2, .bz, .tbz, .tbz2. Zawęzimy więc dopełnianie tylko do sensownych plików, wiadomo, że mało kto będzie stosował bunzipa lub tara do plików mp3
Jak tego dokonać pod Gentoo ? O tym wspomnę pod koniec.
Najpierw zwróce uwagę na pakiet bash-completion, który działa w podobny sposób i poprawia dopełnianie dla kilku ważnych aplikacji. Dzięki niemu także uzyskamy dopełnianie dla polecenia emerge.
Pierwsza sprawa to zaopatrzenie się w ten pakiet, oraz ustawienie flagi bash-completion, najlepiej globalnie (a więc do definicji USE w /etc/make.conf).
# emerge bash-completion
Pozostaje nam jeszcze przekompilowanie pakietów z nową flagą, aby uzyskać wsparcie do jak największej liczby aplikacji.
# emerge -avN world
Aby uruchomić dopełnianie musimy dopisać albo globalnie do /etc/profile, albo dla każdego użytkownika do ~/.bashrc wpis :
[[ -f /etc/profile.d/bash-completion ]] && source /etc/profile.d/bash-completion
Jeśli komuś system nie ładuje przy logowaniu pliku ~/.bashrc niech stworzy plik ~/.bash_profile i w nim umieści :
[ -f ~/.bashrc ] && . ~/.bashrc
Do zarządzania dopełnieniami posłużymi się narzędziem eselect. Aby wyświetlić listę dostępnych dopełnień wywołujemy polecenie :
# eselect bashcomp list
By ustawić wybrane dopełnienie, także korzystamy ze wspomnianego polecenia :
# eselect bashcomp enable gentoo
Włączenie dopełnienia dla gentoo sprawi, że będziemy mogli dopełniać TAB-em nazwy pakietów dla poleceń emerge oraz innych poleceń związanych z Portage.
Polecam ponadto włączenie dopełniania dla vim, unrar oraz genloop.
Powracając do opisanego na początku dopełnienia i tego jak własnoręcznie sobie takie skonstruować. Otóż sprawa jest bajecznie prosta i ogranicza się do wedytowania pliku /etc/bash_completion. Załóżmy, że chcemy aby dla Gqview (szybka przeglądarka obrazów), bash dopełniał nam tylko pliki z roszerzeniami specyficznymi dla obrazów. Odnajdujemy więc linjike podobną do tej :
complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|
bmp|xpm|ico|xwd|tga|pcx|GIF|JP?(E)G|MIFF|TIF?(F)|PN[GM]|P[
BGP]M|BMP|XPM|ICO|XWD|TGA|PCX)' ee display gqview
Jak widać do zdefiniowanych rozszerzeń dopisałem nasz gqview, od tej pory dopełniane będą tylko pliki pasujące do wzorca rozszerzeń dla tego programu.
Sądze, że idea jest łatwa do załapania. Polecam poeksperymentować troche z tymi ustawieniami (polecam także wcześniej zrobić kopie zapasową
) i dostosować je do własnych potrzeb.

Spinning casino chip







Gogiel
listopad 8, 2006 @ 09:32
Nie prosciej zainstalowac sobie zsh? :>
waltharius
listopad 8, 2006 @ 19:10
No proszę
Widzę, że ostatnia nasza rozmowa na gg zaowocowała jednak tym, że zająłeś się bash-completion
Kamil Baćkowski
listopad 9, 2006 @ 18:41
@Gogiel: nikomu nie zabraniam, ja tylko pokazałem jak uzyskać taki efekt w Bashu. Nie wiem jak to jest pod zsh, bo przynaje się, że nigdy nie używałem
@waltharius: oj tak zgłębiłem jego sekrety
Drażniło mnie, że pod Ubuntu był taki ficzer z tym dopełnieniem, więc poszperałem i dowiedziałem się jak stworzyć własnoręcznie coś takiego
mk.
luty 6, 2008 @ 13:46
dzieki za ten tekst, teraz juz wiem jak wylaczyc to gowno ktore mnie od jakiegos czasu denerwowalo.
matiit
luty 13, 2008 @ 20:16
Właśnie byłem u kumpla co ma ubuntu (sam mu instalowałem) i to miał… powiedziałem “nie ma ch* też to musze mieć
”
Dzięki za tekst…
Już myslałem że jakiś patch na bash aalbo coś…