Difference between revisions of "Bash completion"
(syntax highlighting of apertium output) |
|||
Line 74: | Line 74: | ||
This script works even if you used git or git-svn for any of the dependents :-) |
This script works even if you used git or git-svn for any of the dependents :-) |
||
==Can I get syntax highlighting of apertium output?== |
|||
Sure. Put the following in your ~/.bashrc |
|||
<pre> |
|||
apertium () { |
|||
if [[ ${TERM} != dumb && -t 1 ]]; then |
|||
if [[ $1 = -n ]]; then |
|||
nl () { tr -s ' ' '\n'; } |
|||
shift |
|||
else |
|||
nl () { cat; } |
|||
fi |
|||
nl \ |
|||
| command apertium "$@" \ |
|||
| 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 |
|||
} |
|||
' |
|||
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. |
|||
==External links== |
==External links== |
Revision as of 20:11, 19 August 2015
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
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}"; ( [[ -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?
Sure. Put the following in your ~/.bashrc
apertium () { if [[ ${TERM} != dumb && -t 1 ]]; then if [[ $1 = -n ]]; then nl () { tr -s ' ' '\n'; } shift else nl () { cat; } fi nl \ | command apertium "$@" \ | 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 } ' 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.