Bash completion

From Apertium
Jump to navigation Jump to search

If you want “intelligent” bash completion on TAB for apertium, lttoolbox, vislcg3 and hfst, do e.g.:

$ git clone https://github.com/unhammer/apertium-completion.git ~/apertium-completion

and add this to your ~/.bashrc:

if ! shopt -oq posix && \
   [[ ( -z "$INSIDE_EMACS" || "$EMACS_BASH_COMPLETE" = "t" ) ]]; then
    for f in ~/apertium-completion/completions/*; do
        [[ -f $f ]] && source "$f"
    done
fi

Alternatively, if your OS sources files from e.g. /etc/bash_completion_d automatically, just sudo cp ~/apertium-completion/completions/* /etc/bash_completion_d/ (then you don’t have to add anything to ~/.bashrc).


Now open a new terminal and try typing apertium and press TAB twice, you should get a list of installed language pairs; apertium -d . and TAB twice should show you a list of the possible translation modes in this directory; etc.



A little recording showing off the tips on this page: https://asciinema.org/a/11111


apertium -d . takes too long to type

PROTIP: If you add

"\e\C-d": "apertium -d . \t\t"

to ~/.inputrc you can simply type "alt+ctrl+d" and your terminal will fill out "apertium -d . " and press TAB twice (showing the list of modes of your current directory).

I checked out all of SVN – how do I quickly cd to apertium-lol-wat?

Save https://gist.github.com/unhammer/f5ade1c20f0f5d653b8c to e.g. ~/src/apertium-ca.sh, then put "source ~/src/apertium-ca.sh" in ~/.bashrc

Now you can type "ca nno" to go to languages/apertium-nno and "ca kir kaz" to go to nursery/apertium-kaz-kir – even though you typed it in the other order.


I'm sicking of typing "cd ../../languages/apertium-lol; svn up; cd ../apertium-wat; svn up; cd ../../incubator/apertium-lol-wat"

If you've got a language pair that depends on monolingual languages-modules, you can put the following function in your ~/.bashrc, open a new terminal and then just type "up" in the language pair to update the dependents as well:

up () 
{ 
    grep ^AP_SRC config.log 2> /dev/null | while IFS='=' read -r var dir; do
        printf "%s\t" "${var}";
        ( cd "${dir//\'}" && up );
    done;
    if svn info &> /dev/null; then
        printf "%s\t%s\t" svn "$(pwd)";
        svn up;
    else
        if git config --get svn-remote.svn.fetch &> /dev/null; then
            printf "%s\t%s\t" git-svn "$(pwd)";
            git svn rebase;
        else
            if git config --get core.bare &> /dev/null; then
                printf "%s\t%s\t" git "$(pwd)";
                git pull;
            else
                echo "No repo found" 1>&2;
            fi;
        fi;
    fi
}

This script works even if you used git or git-svn for any of the dependents :-)

External links