xref: /vim-8.2.3635/src/vimtutor (revision 89a9c159)
1071d4279SBram Moolenaar#!/bin/sh
2071d4279SBram Moolenaar
3071d4279SBram Moolenaar# Start Vim on a copy of the tutor file.
4071d4279SBram Moolenaar
52b57078dSBram Moolenaar# Usage: vimtutor [-g] [xx]
62b57078dSBram Moolenaar# Where optional argument -g starts vimtutor in gvim (GUI) instead of vim.
72b57078dSBram Moolenaar# and xx is a language code like "es" or "nl".
8071d4279SBram Moolenaar# When an argument is given, it tries loading that tutor.
9071d4279SBram Moolenaar# When this fails or no argument was given, it tries using 'v:lang'
10071d4279SBram Moolenaar# When that also fails, it uses the English version.
11071d4279SBram Moolenaar
122b57078dSBram Moolenaar# Vim could be called "vim" or "vi".  Also check for "vimN", for people who
132b57078dSBram Moolenaar# have Vim installed with its version number.
14bbe917d9SBram Moolenaar# We anticipate up to a future Vim 8.1 version :-).
15bbe917d9SBram Moolenaarseq="vim vim81 vim80 vim8 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi"
162b57078dSBram Moolenaarif test "$1" = "-g"; then
172b57078dSBram Moolenaar    # Try to use the GUI version of Vim if possible, it will fall back
182b57078dSBram Moolenaar    # on Vim if Gvim is not installed.
19bbe917d9SBram Moolenaar    seq="gvim gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq"
202b57078dSBram Moolenaar    shift
212b57078dSBram Moolenaarfi
222b57078dSBram Moolenaar
23071d4279SBram Moolenaarxx=$1
24071d4279SBram Moolenaarexport xx
25071d4279SBram Moolenaar
26071d4279SBram Moolenaar# We need a temp file for the copy.  First try using a standard command.
27071d4279SBram Moolenaartmp="${TMPDIR-/tmp}"
28071d4279SBram MoolenaarTUTORCOPY=`mktemp $tmp/tutorXXXXXX || tempfile -p tutor || echo none`
29071d4279SBram Moolenaar
30071d4279SBram Moolenaar# If the standard commands failed then create a directory to put the copy in.
31071d4279SBram Moolenaar# That is a secure way to make a temp file.
32071d4279SBram Moolenaarif test "$TUTORCOPY" = none; then
33071d4279SBram Moolenaar	tmpdir=$tmp/vimtutor$$
34071d4279SBram Moolenaar	OLD_UMASK=`umask`
35071d4279SBram Moolenaar	umask 077
36071d4279SBram Moolenaar	getout=no
37071d4279SBram Moolenaar	mkdir $tmpdir || getout=yes
38071d4279SBram Moolenaar	umask $OLD_UMASK
39071d4279SBram Moolenaar	if test $getout = yes; then
40071d4279SBram Moolenaar		echo "Could not create directory for tutor copy, exiting."
41071d4279SBram Moolenaar		exit 1
42071d4279SBram Moolenaar	fi
43071d4279SBram Moolenaar	TUTORCOPY=$tmpdir/tutorcopy
44071d4279SBram Moolenaar	touch $TUTORCOPY
45071d4279SBram Moolenaar	TODELETE=$tmpdir
46071d4279SBram Moolenaarelse
47071d4279SBram Moolenaar	TODELETE=$TUTORCOPY
48071d4279SBram Moolenaarfi
49071d4279SBram Moolenaar
50071d4279SBram Moolenaarexport TUTORCOPY
51071d4279SBram Moolenaar
52071d4279SBram Moolenaar# remove the copy of the tutor on exit
53071d4279SBram Moolenaartrap "rm -rf $TODELETE" 0 1 2 3 9 11 13 15
54071d4279SBram Moolenaar
551315349fSBram Moolenaarfor i in $seq; do
56*89a9c159SBram Moolenaar    testvim=$(which $i 2>/dev/null)
57071d4279SBram Moolenaar    if test -f "$testvim"; then
581315349fSBram Moolenaar        VIM=$i
591315349fSBram Moolenaar        break
60071d4279SBram Moolenaar    fi
611315349fSBram Moolenaardone
621315349fSBram Moolenaar
631315349fSBram Moolenaar# When no Vim version was found fall back to "vim", you'll get an error message
641315349fSBram Moolenaar# below.
651315349fSBram Moolenaarif test -z "$VIM"; then
661315349fSBram Moolenaar    VIM=vim
67071d4279SBram Moolenaarfi
68071d4279SBram Moolenaar
69071d4279SBram Moolenaar# Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
70071d4279SBram Moolenaar# The script tutor.vim tells Vim which file to copy
712b57078dSBram Moolenaar$VIM -f -u NONE -c 'so $VIMRUNTIME/tutor/tutor.vim'
72071d4279SBram Moolenaar
73527dec3fSBram Moolenaar# Start vim without any .vimrc, set 'nocompatible' and 'showcmd'
74*89a9c159SBram Moolenaar$VIM -f -u NONE -c "set nocp showcmd" "$TUTORCOPY"
75