From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27078 invoked by alias); 29 Apr 2013 08:57:46 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 31355 Received: (qmail 12868 invoked from network); 29 Apr 2013 08:57:44 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS autolearn=ham version=3.3.2 Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f5-b7fa36d000007f20-36-517e36065b54 Date: Mon, 29 Apr 2013 09:57:41 +0100 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: Subversion completion don't work with UTF8 (and other) file names Message-id: <20130429095741.7867e358@pwslap01u.europe.root.pri> In-reply-to: <20130426153546.GV16210@xvii.vinc17.org> References: <20130426123921.GT16210@xvii.vinc17.org> <20130426154427.06972873@pwslap01u.europe.root.pri> <20130426153546.GV16210@xvii.vinc17.org> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupjluLIzCtJLcpLzFFi42I5/e/4FV02s7pAgzvrxS0ONj9kcmD0WHXw A1MAYxSXTUpqTmZZapG+XQJXxs/9P9gKphhW7Gs9zdLA2KDZxcjJISFgIrFy9l1GCFtM4sK9 9WxdjFwcQgJLGSXmb1rJCOEsZ5LobjsIVsUioCrxYdZpMJtNwFBi6qbZYLaIgLjE2bXnWUBs YQE/ibNLfjGD2LwC9hIbOt8wgdicAqYSx1pPMkMMvccocXD3KrAGfgF9iat/PzFBnGEvMfPK GUaIZkGJH5PvgdUwC2hJbN7WxAphy0tsXvOWeQKjwCwkZbOQlM1CUraAkXkVo2hqaXJBcVJ6 rpFecWJucWleul5yfu4mRkgYft3BuPSY1SFGAQ5GJR7ewM21gUKsiWXFlbmHGCU4mJVEeBWN 6gKFeFMSK6tSi/Lji0pzUosPMTJxcEo1MJpdPc26UaLAu8BES9P3j2PR+c0rXL8wnL7R+0iD 9bPYugvvLKP3+yU+Xb1kU+fSvVw1erZLwtluevyt3ZJ73LdG4rbQ5WmeMfG7HaW4wgObV6zc s9YjR+CxUsu/BqFehaayv8sVWdMVMzm6+Be7udSd0vWrNouqOieiEyHNw3t+xvHaovncSizF GYmGWsxFxYkAHGLc6SECAAA= On Fri, 26 Apr 2013 17:35:46 +0200 Vincent Lefevre wrote: > On 2013-04-26 15:44:27 +0100, Peter Stephenson wrote: > > Unsetting all the LC_* variables (including LC_ALL) and setting only > > LC_CTYPE and LANG should be good enough, shouldn't it? Something like: > > > > _comp_locale() { > > # 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 > > } > > I think it should work, but these settings should affect only the > svn command; I suppose that you need to run that in a subshell. Here's a change for _subversion only, if this works we can expand the use. diff --git a/Completion/Base/Utility/.distfiles b/Completion/Base/Utility/.distfiles index 97d86bd..91ddf88 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 0000000..9273ad0 --- /dev/null +++ b/Completion/Base/Utility/_comp_locale @@ -0,0 +1,9 @@ +#autoload + +# 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 11d0b69..0fa3e8c 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 } pws