| #!/bin/sh |
| |
| # Start Vim on a copy of the tutor file. |
| |
| # Type "man vimtutor" (or "vimtutor --help") to learn more about the supported |
| # command-line options. |
| # |
| # Tutors in several human languages are distributed. Type "vimtutor" to use |
| # a tutor in the language of the current locale (:help v:lang), if available; |
| # otherwise fall back to using the English tutor. To request any bundled |
| # tutor, specify its ISO639 name as an argument, e.g. "vimtutor nl". |
| |
| # Vim could be called "vim" or "vi". Also check for "vimN", for people who |
| # have Vim installed with its version number. |
| seq="vim vim91 vim90 vim81 vim80 vim8 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi" |
| |
| usage() |
| { |
| echo "==USAGE=========================================================================================" |
| echo "${0##*/} [[-(-l)anguage] ISO639] [-(-c)hapter NUMBER] [-(-g)ui] | [-(-h)elp] | [--list]" |
| printf "\twhere:\n" |
| printf "\t\tISO639 (default=en) is a 2 or 3 character language code\n" |
| printf "\t\tNUMBER (default=1) is a chapter number (1 or 2)\n" |
| printf "\texamples:\n" |
| printf "\t\tvimtutor -l es -c 2 -g\n" |
| printf "\t\tvimtutor --language de --chapter 2\n" |
| printf "\t\tvimtutor fr\n" |
| echo "More information at 'man vimtutor'" |
| echo "================================================================================================" |
| } |
| |
| listOptions() |
| { |
| echo "==OPTIONS=======================================================================================" |
| echo "Chapter: 1" |
| printf "\tLang: %-3s => %s\n" \ |
| bar Bavarian \ |
| bg Bulgarian \ |
| ca Catalan \ |
| cs Czech \ |
| da Danish \ |
| de German \ |
| el Greek \ |
| en English\(default\) \ |
| eo Esperanto \ |
| es Spanish \ |
| fr French \ |
| hr Croatian \ |
| hu Hungarian \ |
| it Italian \ |
| ja Japanese \ |
| ko Korean \ |
| lt Lithuanian \ |
| lv Latvian \ |
| nb Bokmål \ |
| nl Dutch \ |
| no Norwegian \ |
| pl Polish \ |
| pt Portuguese \ |
| ru Russian \ |
| sk Slovak \ |
| sr Serbian \ |
| sv Swedish \ |
| tr Turkish \ |
| uk Ukrainian \ |
| vi Vietnamese \ |
| zh Chinese |
| |
| echo "Chapter: 2" |
| printf "\tLang: %-3s => %s\n" \ |
| en English\(default\) |
| echo "================================================================================================" |
| } |
| |
| validateLang() |
| { |
| case "$xx" in |
| '' | *[!a-z]* ) |
| echo "Error: iso639 code must contain only [a-z]" |
| exit 1 |
| esac |
| |
| case "${#xx}" in |
| [23] ) |
| ;; |
| * ) |
| echo "Error: iso639 code must be 2 or 3 characters only" |
| exit 1 |
| esac |
| |
| export xx |
| } |
| |
| validateChapter() |
| { |
| case "$cc" in |
| '' | *[!0-9]* ) |
| echo "Error: chapter argument must contain digits only" |
| exit 1 |
| ;; |
| [12] ) |
| ;; |
| * ) |
| echo "Error: invalid chapter number: [12]" |
| exit 1 |
| esac |
| |
| export CHAPTER="$cc" |
| } |
| |
| while [ "$1" != "" ]; do |
| case "$1" in |
| -g | --gui ) |
| seq="gvim gvim91 gvim90 gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq" |
| ;; |
| -l | --language ) |
| shift |
| xx="$1" |
| validateLang |
| ;; |
| -l[a-z][a-z][a-z] | -l[a-z][a-z] ) |
| export xx="${1#*l}" |
| ;; |
| --language[a-z][a-z][a-z] | --language[a-z][a-z] ) |
| export xx="${1#*e}" |
| ;; |
| [a-z][a-z][a-z] | [a-z][a-z] ) |
| export xx="$1" |
| ;; |
| -c | --chapter ) |
| shift |
| cc="$1" |
| validateChapter |
| ;; |
| -c[12] ) |
| export CHAPTER="${1#*c}" |
| ;; |
| --chapter[12] ) |
| export CHAPTER="${1#*r}" |
| ;; |
| -h | --help ) |
| usage |
| exit |
| ;; |
| --list ) |
| listOptions |
| exit |
| ;; |
| "" ) |
| ;; |
| * ) |
| usage |
| exit 1 |
| esac |
| |
| shift |
| done |
| |
| |
| # We need a temp file for the copy. First try using a standard command. |
| tmp="${TMPDIR-/tmp}" |
| # shellcheck disable=SC2186 |
| TUTORCOPY=$(mktemp "$tmp/tutorXXXXXX" || tempfile -p tutor || echo none) |
| |
| # If the standard commands failed then create a directory to put the copy in. |
| # That is a secure way to make a temp file. |
| if test "$TUTORCOPY" = none; then |
| tmpdir="$tmp/vimtutor$$" |
| OLD_UMASK=$(umask) |
| umask 077 |
| getout=no |
| mkdir "$tmpdir" || getout=yes |
| umask "$OLD_UMASK" |
| if test "$getout" = yes; then |
| echo "Could not create directory for tutor copy, exiting." |
| exit 1 |
| fi |
| TUTORCOPY="$tmpdir/tutorcopy" |
| touch "$TUTORCOPY" |
| TODELETE="$tmpdir" |
| else |
| TODELETE="$TUTORCOPY" |
| fi |
| |
| export TUTORCOPY |
| |
| # remove the copy of the tutor on exit |
| trap 'rm -rf "$TODELETE"' EXIT HUP INT QUIT SEGV PIPE TERM |
| |
| for i in $seq; do |
| testvim=$(command -v "$i" 2>/dev/null) |
| if test -f "$testvim"; then |
| VIM="$i" |
| break |
| fi |
| done |
| |
| # When no Vim version was found fall back to "vim", you'll get an error message |
| # below. |
| if test -z "$VIM"; then |
| VIM=vim |
| fi |
| |
| # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME |
| # The script tutor.vim tells Vim which file to copy |
| |
| $VIM -f -u NONE -c "so \$VIMRUNTIME/tutor/tutor.vim" |
| |
| # Start vim without any .vimrc, set 'nocompatible' and 'showcmd' |
| $VIM -f -u NONE -c "set nocp showcmd" "$TUTORCOPY" |
| |
| # vim:sw=4:ts=8:noet:nosta: |