To teda fakt nevim jak, opravdu to na tech ostatnich pocitacich funguje? :P Jinak treba bash completion library.
Pre informaciu pre inych: doplnenim
"\e[B": history-search-forward "\e[A": history-search-backward
do /etc/inputrc je mozne vyhladavat v historii sipkami hore/dole. Staci napisat do bashu (ale aj do mysql command-promptu) napriklad „ssh “ a sipky hore a dole hladaju v historii vsetko co kedy zacinalo na „ssh“.
To se sice nedá, ale pokud vás to tak moc otravuje, je možné spouštět bash completion „on demand“ pomocí vhodného aliasu (třeba na písmeno c). Pak si bash completion zapnete v těch terminálech, kde to potřebujete, až to budete potřebovat.
Nebo můžete používat něco jako yakuake nebo guake a nechat si otevřít třeba 10 shellů automaticky při startu (a místo otevření nového terminálu se pak jen přepnete do dalšího). Terminály pak máte na každé ploše „po ruce“.
Ve výchozím stavu bash po dvojím stisku tabulátoru vypíše možnosti nad kurzorem tj. editovaným řádkem. Pokud zmáčknete tabulátor znovu, tak budete mít na obrazovce dvakrát to samé. Zsh ty možnosti doplnění vypisuje pod kurzor a pouze je přepisuje v případě změny editovaného řádku, která mění i možnosti doplnění, ale nikdy nevypisuje na obrazovku něco dvakrát. Navíc jsou možnosti doplnění po stisku enteru smazány, takže mi zbytečně předchozí text nemizí posunem textu nahoru. Příliš jsem možnosti obou shellů nezkoumal, takže to bude asi spíše o defaultním nastavení. Autor článku, jak se zdá z výpisů, má nastaveno podobné chování jako je to defaultní u zsh.
Tak mě napadlo, nešlo by nějak zablokovat doplňování prázdného příkazu? Když s prázdným promptem zmáčnku omylem tabulátor, čekám snad dvě vteřiny na „Display all 2280 possibilities? (y or n)“ což pak musím zrušit a vůbec… je to pruda a k ničemu, místo toho by to nemuselo dělat nic, nebo jen „zvonek“, ale hlavně bez toho čekání.
Potreboval bych trochu pozmenit doplnovani u prikazu „mount“, ale v /etc/bash_completion.d/ mount neni, takze hadam, ze to je asi nejaky zabudovany prikaz. Problem je v tom, ze kdyz doplnuju v mountu pripojne misto napr: mount neco.iso /media a stisknu tabulator, tak mi tam okamzite vyskoci /media/cdrom0, ale ja to chci treba pripojit jinam a chci videt seznam podadresaru diky
odpoved je zde (muj prispevek byl vyhodnocen jako spam): http://pastebin.com/m15f5c198
No u mna na debiane je funkcia _mount() priamo v subore /etc/bash_completion, zrejme to berie adresare priamo z /etc/fstab kde mas riadok pre cdrom. Inac hlavne „veci“ su priamo v tomto subore a do adresara /etc/bash_completion.d/ si doplnaju subory jednotlive debian balicky.
Pred nějakou dobou jsem zplodil nasledující skriptíky, které umožňují pohodlný persistentní aliasing adresářu.
source both files and enjoy!
bash_bookmarks_function.sh
#!/bin/bash if [ ! -n "$BASH_BOOKMARKS" ];then export BASH_BOOKMARKS=$HOME/.bash_bookmarks;fi if [ ! -d $BASH_BOOKMARKS ]; then mkdir -p $BASH_BOOKMARKS;fi gat(){ if test -n "$1";then \ cd `cat $BASH_BOOKMARKS/$1`;else \ for i in `find $BASH_BOOKMARKS -maxdepth 1 -type f`;\ do echo `basename $i`;\ done;\ fi;} tag(){ if [ ! -d $BASH_BOOKMARKS ];then mkdir $BASH_BOOKMARKS;fi if [ ! -n "$1" ];then echo "usage: tagAby tyto funkce začaly být opravdu užitečné, je třeba definovat doplňování.. will bookmark your current location under name ";return 0;fi pwd > $BASH_BOOKMARKS/$1 }
bash_bookmarks_completion.sh:
if [ ! -n "$BASH_BOOKMARKS" ];then export BASH_BOOKMARKS=$HOME/.bash_bookmarks;fi _gat() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" marks="" for i in `find $BASH_BOOKMARKS -maxdepth 1 -type f`;do\ marks=`basename $i`" "$marks;\ done opts=$marks if [[ ${prev} == "gat" ]]; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi } complete -F _gat gat