Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [PATCH] avoid localized output from external commands in a few completion



With the patch below, both _call_program and '_arguments --' will call
_comp_locale before running the external command. This is disabled
by passing an option '-l' to _call_program or '_arguments --'.

If this is OK, then we can remove LC_ALL=C from _aptitude and _a2ps,
and _comp_locale from _subversion. I will also prepare patches for
compsys.yo.

It seems '_arguments --' (or _gnu_generic) is used only in _tar.
I think we can use '_arguments -- -l' here, because non-English
help output is handled rather well by '_arguments --' (at least
as well as the English help).


diff --git a/Completion/Base/Utility/_arguments b/Completion/Base/Utility/_arguments
index d2c0d33de..136dd5826 100644
--- a/Completion/Base/Utility/_arguments
+++ b/Completion/Base/Utility/_arguments
@@ -43,7 +43,7 @@ if (( long )); then
   name="${name//[^a-zA-Z0-9_]/_}"
 
   if (( ! ${(P)+name} )); then
-    local iopts sopts pattern tmpo dir cur cache
+    local iopts sopts lflag pattern tmpo dir cur cache
     typeset -Ua lopts
 
     cache=()
@@ -55,7 +55,12 @@ if (( long )); then
 
     iopts=()
     sopts=()
-    while [[ "$1" = -[is]* ]]; do
+    while [[ "$1" = -[lis]* ]]; do
+      if [[ "$1" = -l ]]; then
+	lflag='-l'
+	shift
+	continue
+      fi
       if [[ "$1" = -??* ]]; then
         tmp="${1[3,-1]}"
         cur=1
@@ -88,7 +93,8 @@ if (( long )); then
     # option up to the end.
 
    tmp=()
-   _call_program options ${~words[1]} --help 2>&1 | while IFS= read -r opt; do
+   _call_program $lflag options ${~words[1]} --help 2>&1 |
+     while IFS= read -r opt; do
      if (( ${#tmp} )); then
        # Previous line had no comment.  Is the current one suitable?
        # It's hard to be sure, but if it there was nothing on the
diff --git a/Completion/Base/Utility/_call_program b/Completion/Base/Utility/_call_program
index 9a44f2d8e..73f3ef6d2 100644
--- a/Completion/Base/Utility/_call_program
+++ b/Completion/Base/Utility/_call_program
@@ -1,6 +1,6 @@
 #autoload +X
 
-local curcontext="${curcontext}" tmp err_fd=-1
+local curcontext="${curcontext}" tmp err_fd=-1 clocale='_comp_locale;'
 local -a prefix
 
 if [[ "$1" = -p ]]; then
@@ -10,6 +10,9 @@ if [[ "$1" = -p ]]; then
     zstyle -t ":completion:${curcontext}:${1}" gain-privileges &&
 	prefix=( $_comp_priv_prefix )
   fi
+elif [[ "$1" = -l ]]; then
+  shift
+  clocale=''
 fi
 
 if (( ${debug_fd:--1} > 2 )) || [[ ! -t 2 ]]
@@ -21,12 +24,12 @@ fi
 
 if zstyle -s ":completion:${curcontext}:${1}" command tmp; then
   if [[ "$tmp" = -* ]]; then
-    eval "$tmp[2,-1]" "$argv[2,-1]"
+    eval $clocale "$tmp[2,-1]" "$argv[2,-1]"
   else
-    eval $prefix "$tmp"
+    eval $clocale $prefix "$tmp"
   fi
 else
-  eval $prefix "$argv[2,-1]"
+  eval $clocale $prefix "$argv[2,-1]"
 fi 2>&$err_fd
 
 } always {





Messages sorted by: Reverse Date, Date, Thread, Author