patch 9.1.0845: vimtutor shell script can be improved Commit: https://github.com/vim/vim/commit/715a58fda6ea719c1006348579bc545c6fde026a Author: Aliaksei Budavei <0x000...@gmail.com> Date: Wed Nov 6 21:58:53 2024 +0100
patch 9.1.0845: vimtutor shell script can be improved Problem: vimtutor shell script can be improved Solution: further improve the vimtutor shell script (Aliaksei Budavei) - Rewrite the script usage note. - Reconcile the usage help output with the manual page entry that describes the implementation in that: * a language code argument can be used alone or with its option key, e.g. "vimtutor -l nl" or "vimtutor nl"; * a chapter number argument cannot be used without its option key, e.g. "vimtutor -c 2". - Accept only chapters 1 or 2 as valid chapter arguments. - Double-quote instances of shell parameter expansion where neither pathname expansion nor field splitting is desired. - Prefer "$(foo)" to "`foo`" for command substitution. - Follow a single indentation style (see the modeline). closes: #15992 Signed-off-by: Aliaksei Budavei <0x000...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/version.c b/src/version.c index 3c4205926..22d1d2616 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 845, /**/ 844, /**/ diff --git a/src/vimtutor b/src/vimtutor index 6e29a7602..409c10c04 100755 --- a/src/vimtutor +++ b/src/vimtutor @@ -2,12 +2,13 @@ # Start Vim on a copy of the tutor file. -# Usage: vimtutor [-g] [xx] -# Where optional argument -g starts vimtutor in gvim (GUI) instead of vim. -# and xx is a language code like "es" or "nl". -# When an argument is given, it tries loading that tutor. -# When this fails or no argument was given, it tries using 'v:lang' -# When that also fails, it uses the English version. +# 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. @@ -16,13 +17,13 @@ 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]" + echo "${0##*/} [[-(-l)anguage] ISO639] [-(-c)hapter NUMBER] [-(-g)ui] | [-(-h)elp] | [--list]" printf " where: " printf " ISO639 (default=en) is a 2 or 3 character language code " - printf " NUMBER (default=01) is one or two digits representing the chapter number " + printf " NUMBER (default=1) is a chapter number (1 or 2) " printf " examples: " printf " vimtutor -l es -c 2 -g " - printf " vimtutor --language de --chapter 02 " + printf " vimtutor --language de --chapter 2 " printf " vimtutor fr " echo "More information at 'man vimtutor'" echo "================================================================================================" @@ -72,111 +73,124 @@ en English\(default\) 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 + 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 - ;; - 0 | 00 ) - echo "Error: chapter must be non-zero" - exit 1 - esac - - export CHAPTER="$cc" + 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[1-9][0-9] | -c[1-9] ) export CHAPTER="${1#*c}" - ;; - --chapter[1-9][0-9] | --chapter[1-9] ) - export CHAPTER="${1#*r}" - ;; - -h | --help ) usage - exit - ;; - --list ) listOptions - exit - ;; - "" ) ;; - * ) usage - exit 1 - esac - shift + 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}" -TUTORCOPY=`mktemp $tmp/tutorXXXXXX || tempfile -p tutor || echo none` +# 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 + 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 + TODELETE="$TUTORCOPY" fi export TUTORCOPY # remove the copy of the tutor on exit -trap "rm -rf $TODELETE" EXIT HUP INT QUIT SEGV PIPE TERM +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 + VIM="$i" + break fi done @@ -189,7 +203,9 @@ 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' +$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: -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1t8nMl-0028sR-Gq%40256bit.org.