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.

TrackBack URI

5 Komentarzy

Kanał RSS dla komentarzy do tej wiadomości rss

  1. MyAvatars 0.2

    Gogiel

    November 8, 2006 @ 09:32

    Nie prosciej zainstalowac sobie zsh? :>

  2. MyAvatars 0.2

    waltharius

    November 8, 2006 @ 19:10

    No proszę :) Widzę, że ostatnia nasza rozmowa na gg zaowocowała jednak tym, że zająłeś się bash-completion :D

  3. MyAvatars 0.2

    Kamil Baćkowski

    November 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 :P

    @waltharius: oj tak zgłębiłem jego sekrety :D 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 :)

  4. MyAvatars 0.2

    mk.

    February 6, 2008 @ 13:46

    dzieki za ten tekst, teraz juz wiem jak wylaczyc to gowno ktore mnie od jakiegos czasu denerwowalo.

  5. MyAvatars 0.2

    matiit

    February 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ś…