Difference between revisions of "Bash completion"
(Replaced content with 'If you want "intelligent" bash completion on TAB for apertium, lttoolbox, vislcg3, hfst, see https://github.com/unhammer/apertium-completion') |
|||
(17 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
If you want |
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: |
|||
<pre> |
|||
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 |
|||
</pre> |
|||
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 press TAB twice should show you a list of the possible translation modes in this directory |
|||
* ."/autogen.sh" and press TAB twice and you should get --with-langN=../../languages/apertium-foo (if the pair has monolingual dependencies) |
|||
{{TOCD}} |
|||
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 |
|||
<pre>"\e\C-d": "apertium -d . \t\t"</pre> |
|||
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|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: |
|||
<pre> |
|||
up () |
|||
{ |
|||
grep ^AP_SRC config.log 2> /dev/null | while IFS='=' read -r var dir; do |
|||
printf "%s\t" "${var}"; |
|||
( [[ -z "$1" ]] && cd "${dir//\'}" && up last ) |
|||
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 |
|||
} |
|||
</pre> |
|||
This script works even if you used git or git-svn for any of the dependents :-) |
|||
==Can I get syntax highlighting of apertium output?== |
|||
Like |
|||
[[File:Ap_colour.png]] |
|||
? Sure. Put the following in your ~/.bashrc |
|||
<pre> |
|||
__ap_colour () { |
|||
gawk ' |
|||
BEGIN { |
|||
white="\033[0;1m" |
|||
GREEN="\033[1;32m" |
|||
green="\033[0;32m" |
|||
yellow="\033[0;33m" |
|||
grey="\033[0;37m" |
|||
redbg="\033[0;41m" |
|||
yellowbg="\033[0;43m" |
|||
none="\033[00m" |
|||
} |
|||
{ |
|||
$0 = gensub(/#([^ <]+)/, redbg"#\\1"none, "g") |
|||
$0 = gensub(/(^| )@([^ <]+)/, "\\1"yellowbg"@\\2"none, "g") |
|||
$0 = gensub(/[*]([^ <]+)/, white"*\\1"none, "g") |
|||
$0 = gensub(/([^>])<([^>]+)>/, "\\1<"GREEN"\\2"none">", "g") |
|||
$0 = gensub(/><(@[^>]+)/, "><"yellow"\\1"none, "g") |
|||
$0 = gensub(/ (@[^ ]+)/, " "yellow"\\1"none, "g") |
|||
$0 = gensub(/><([^>]+)/, "><"green"\\1"none, "g") |
|||
$0 = gensub(/[<>{}^$\/]/, grey"\\0"none, "g") |
|||
print |
|||
}' |
|||
} |
|||
apertium () { |
|||
if [[ ${TERM} != dumb && -t 1 ]]; then |
|||
command apertium "$@" | __ap_colour |
|||
else |
|||
command apertium "$@" |
|||
fi |
|||
} |
|||
</pre> |
|||
It's a bash function that wraps the apertium script and calls the regular apertium program, appending syntax highlighting if we're outputting to an interactive terminal. |
|||
If you want to colour stuff that's already been through apertium, just append <code>| __ap_colour</code>. For example, <code>grep stuff processed_corpus.txt | fmt -120 | __ap_colour</code>. |
|||
==External links== |
|||
* https://github.com/unhammer/apertium-completion |
|||
[[Category:Tools]] |
|||
[[Category:Bash]] |
|||
[[Category:Installation]] |
|||
[[Category:Documentation in English]] |
Latest revision as of 15:27, 27 April 2017
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 press TAB twice should show you a list of the possible translation modes in this directory
- ."/autogen.sh" and press TAB twice and you should get --with-langN=../../languages/apertium-foo (if the pair has monolingual dependencies)
A little recording showing off the tips on this page: https://asciinema.org/a/11111
apertium -d . takes too long to type[edit]
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?[edit]
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"[edit]
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}"; ( [[ -z "$1" ]] && cd "${dir//\'}" && up last ) 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 :-)
Can I get syntax highlighting of apertium output?[edit]
Like
? Sure. Put the following in your ~/.bashrc
__ap_colour () { gawk ' BEGIN { white="\033[0;1m" GREEN="\033[1;32m" green="\033[0;32m" yellow="\033[0;33m" grey="\033[0;37m" redbg="\033[0;41m" yellowbg="\033[0;43m" none="\033[00m" } { $0 = gensub(/#([^ <]+)/, redbg"#\\1"none, "g") $0 = gensub(/(^| )@([^ <]+)/, "\\1"yellowbg"@\\2"none, "g") $0 = gensub(/[*]([^ <]+)/, white"*\\1"none, "g") $0 = gensub(/([^>])<([^>]+)>/, "\\1<"GREEN"\\2"none">", "g") $0 = gensub(/><(@[^>]+)/, "><"yellow"\\1"none, "g") $0 = gensub(/ (@[^ ]+)/, " "yellow"\\1"none, "g") $0 = gensub(/><([^>]+)/, "><"green"\\1"none, "g") $0 = gensub(/[<>{}^$\/]/, grey"\\0"none, "g") print }' } apertium () { if [[ ${TERM} != dumb && -t 1 ]]; then command apertium "$@" | __ap_colour else command apertium "$@" fi }
It's a bash function that wraps the apertium script and calls the regular apertium program, appending syntax highlighting if we're outputting to an interactive terminal.
If you want to colour stuff that's already been through apertium, just append | __ap_colour
. For example, grep stuff processed_corpus.txt | fmt -120 | __ap_colour
.