From 8cdb57b3b7f8810eaf87b8d797736c6a318f2cfc Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 29 Apr 2013 10:08:07 +0100 Subject: 31355: _comp_locale tries to sanitise locales but keep CTYPE; use this for subversion completion. --- ChangeLog | 7 +++++++ Completion/Base/Utility/.distfiles | 26 +++++++++++++++++++++----- Completion/Base/Utility/_comp_locale | 13 +++++++++++++ Completion/Unix/Command/_subversion | 14 +++++++------- 4 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 Completion/Base/Utility/_comp_locale diff --git a/ChangeLog b/ChangeLog index b91d85ca8..4b0127aa9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-04-29 Peter Stephenson + + * 31355: Completion/Base/Utility/.distfiles, + Completion/Base/Utility/_comp_locale, + Completion/Unix/Command/_subversion: _comp_locale tries to + sanitise locales but keep CTYPE; use this for subversion completion. + 2013-04-25 Ramkumar Ramachandra * 31288: Completion/Unix/Command/_git: _git: fix shortlog diff --git a/Completion/Base/Utility/.distfiles b/Completion/Base/Utility/.distfiles index 97d86bdbf..91ddf881b 100644 --- a/Completion/Base/Utility/.distfiles +++ b/Completion/Base/Utility/.distfiles @@ -1,9 +1,25 @@ DISTFILES_SRC=' .distfiles -_alternative _call_program _nothing _sub_commands -_arg_compile _combination _regex_arguments _values -_arguments _set_command _retrieve_cache _guard -_cache_invalid _describe _sep_parts _pick_variant -_call_function _multi_parts _store_cache _regex_words +_alternative +_arg_compile +_arguments +_cache_invalid +_call_function +_comp_locale _complete_help_generic +_call_program +_combination +_set_command +_describe +_multi_parts +_nothing +_regex_arguments +_retrieve_cache +_sep_parts +_store_cache +_sub_commands +_values +_guard +_pick_variant +_regex_words ' diff --git a/Completion/Base/Utility/_comp_locale b/Completion/Base/Utility/_comp_locale new file mode 100644 index 000000000..19870435a --- /dev/null +++ b/Completion/Base/Utility/_comp_locale @@ -0,0 +1,13 @@ +#autoload + +# Arrange that LC_CTYPE retains the current setting so characters in +# file names are handled properly, but other locales are set to C so +# that the completion system can process output without surprises. + +# This exports new locale settings, so should only +# be run in a subshell. A typical use is in a $(...). + +local ctype=${${(f)"$(locale 2>/dev/null)"}:#^LC_CTYPE=*} +unset -m LC_\* +[[ -n $ctype ]] && eval export $ctype +export LANG=C diff --git a/Completion/Unix/Command/_subversion b/Completion/Unix/Command/_subversion index 11d0b69e4..0fa3e8c97 100644 --- a/Completion/Unix/Command/_subversion +++ b/Completion/Unix/Command/_subversion @@ -20,7 +20,7 @@ _svn () { typeset -gHA _svn_cmds if _cache_invalid svn-cmds || ! _retrieve_cache svn-cmds; then _svn_cmds=( - ${=${(f)${${"$(LC_ALL=C _call_program commands svn help)"#l#*Available subcommands:}%%Subversion is a tool*}}/(#s)[[:space:]]#(#b)([a-z]##)[[:space:]]#(\([a-z, ?]##\))#/$match[1] :$match[1]${match[2]:+:${${match[2]//[(),]}// /:}}:} + ${=${(f)${${"$(_comp_locale; _call_program commands svn help)"#l#*Available subcommands:}%%Subversion is a tool*}}/(#s)[[:space:]]#(#b)([a-z]##)[[:space:]]#(\([a-z, ?]##\))#/$match[1] :$match[1]${match[2]:+:${${match[2]//[(),]}// /:}}:} ) _store_cache svn-cmds _svn_cmds fi @@ -41,14 +41,14 @@ _svn () { if _cache_invalid svn-${cmd}-usage || \ ! _retrieve_cache svn-${cmd}-usage; then - usage=${${(M)${(f)"$(LC_ALL=C _call_program options svn help $cmd)"}:#usage:*}#usage:*$cmd] } + usage=${${(M)${(f)"$(_comp_locale; _call_program options svn help $cmd)"}:#usage:*}#usage:*$cmd] } _store_cache svn-${cmd}-usage usage fi if _cache_invalid svn-${cmd}-usage || \ ! _retrieve_cache svn-${cmd}-args; then args=( - ${=${${${(M)${(f)"$(LC_ALL=C _call_program options svn help $cmd)"#(*Valid options:|(#e))}:#* :*}%% #:*}/ (arg|ARG)/:arg:}/(#b)(-##)([[:alpha:]]##) \[--([a-z-]##)\](:arg:)#/(--$match[3])$match[1]$match[2]$match[4] ($match[1]$match[2])--$match[3]$match[4]} + ${=${${${(M)${(f)"$(_comple_local; _call_program options svn help $cmd)"#(*Valid options:|(#e))}:#* :*}%% #:*}/ (arg|ARG)/:arg:}/(#b)(-##)([[:alpha:]]##) \[--([a-z-]##)\](:arg:)#/(--$match[3])$match[1]$match[2]$match[4] ($match[1]$match[2])--$match[3]$match[4]} ) while (( idx=$args[(I)*--c(l|hangelist):arg:] )); do args[(I)*--c(l|hangelist):arg:]=( \*{--cl,--changelist}':change list:_svn_changelists' ) @@ -157,7 +157,7 @@ _svnadmin () { if [[ -n $state ]] && (( ! $+_svnadmin_cmds )); then typeset -gHA _svnadmin_cmds _svnadmin_cmds=( - ${=${(f)${${"$(LC_ALL=C _call_program commands svnadmin help)"#l#*Available subcommands:}}}/(#s)[[:space:]]#(#b)([-a-z]##)[[:space:]]#(\([a-z, ?]##\))#/$match[1] :$match[1]${match[2]:+:${${match[2]//[(),]}// /:}}:} + ${=${(f)${${"$(_comp_locale; _call_program commands svnadmin help)"#l#*Available subcommands:}}}/(#s)[[:space:]]#(#b)([-a-z]##)[[:space:]]#(\([a-z, ?]##\))#/$match[1] :$match[1]${match[2]:+:${${match[2]//[(),]}// /:}}:} ) fi @@ -172,9 +172,9 @@ _svnadmin () { if (( $#cmd )); then curcontext="${curcontext%:*:*}:svnadmin-${cmd}:" - usage=${${(M)${(f)"$(LC_ALL=C _call_program options svnadmin help $cmd)"}:#$cmd: usage:*}#$cmd: usage: svnadmin $cmd } + usage=${${(M)${(f)"$(_comp_locale; _call_program options svnadmin help $cmd)"}:#$cmd: usage:*}#$cmd: usage: svnadmin $cmd } args=( - ${=${${${(M)${(f)"$(LC_ALL=C _call_program options svnadmin help $cmd)"#(*Valid options:|(#e))}:#* :*}%% #:*}/ (arg|ARG)/:arg:}/(#b)-([[:alpha:]]) \[--([a-z-]##)\](:arg:)#/(--$match[2])-$match[1]$match[3] (-$match[1])--$match[2]$match[3]} + ${=${${${(M)${(f)"$(_comp_locale; _call_program options svnadmin help $cmd)"#(*Valid options:|(#e))}:#* :*}%% #:*}/ (arg|ARG)/:arg:}/(#b)-([[:alpha:]]) \[--([a-z-]##)\](:arg:)#/(--$match[2])-$match[1]$match[3] (-$match[1])--$match[2]$match[3]} ) if [[ $usage == *REPOS_PATH* ]]; then args+=( ":path:_files -/" ) @@ -319,7 +319,7 @@ _svn_props() { _svn_changelists() { local cls - cls=( ${${${(M)${(f)"$(LC_ALL=C _call_program changelists svn status 2>/dev/null)"}:#--- Changelist*}%??}##*\'} ) + cls=( ${${${(M)${(f)"$(_comp_locale; _call_program changelists svn status 2>/dev/null)"}:#--- Changelist*}%??}##*\'} ) compadd "$@" -a cls && return 0 } -- cgit 1.4.1