about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarc Chantreux <eiro@phear.org>2021-03-11 19:08:57 +0100
committerOliver Kiddle <opk@zsh.org>2021-04-06 14:42:07 +0200
commitccc7ff90a46d7b1bdcf61bae2dba20d68dca7654 (patch)
tree669077d17ffd5bd7400a1f13908ff4efabea5e77
parent2c000ee7bab65f950fd4bec2077332d90ef5417a (diff)
downloadzsh-ccc7ff90a46d7b1bdcf61bae2dba20d68dca7654.tar.gz
zsh-ccc7ff90a46d7b1bdcf61bae2dba20d68dca7654.tar.xz
zsh-ccc7ff90a46d7b1bdcf61bae2dba20d68dca7654.zip
users/26579: changes from review including parameter expansion to replace awk
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Command/_surfraw30
2 files changed, 20 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 51a54d5e1..d2b58a0f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2021-04-06  Oliver Kiddle  <opk@zsh.org>
 
+	* Marc Chantreux: users/26579: Completion/Unix/Command/_surfraw:
+	changes from review including parameter expansion to replace awk
+
 	* 48414: Completion/Unix/Type/_bpf_filters: quote closing bracket
 	to adapt for change in 43928
 
diff --git a/Completion/Unix/Command/_surfraw b/Completion/Unix/Command/_surfraw
index 343d275cc..4838f1e58 100644
--- a/Completion/Unix/Command/_surfraw
+++ b/Completion/Unix/Command/_surfraw
@@ -430,19 +430,23 @@ case $state in
     esac
   ;;
   elvi)
-    local -UT XDG_CONFIG_DIRS xcd
-    # as it starts with a space, the header becomes an empty
-    # string removed by the list expansion
-    _wanted elvi expl elvi compadd \
-        ${${(f)"$(surfraw -elvi)"}%%[[:space:]]*} $(
-          # extract the keys of all bookmarks (should be in surfraw itself)
-          awk '{keys[$1]=1} END {for (k in keys) print k}' \
-          $^xcd/surfraw/bookmarks(Nr) \
-          /etc/xdg/surfraw/bookmarks(Nr) \
-          /etc/surfraw.bookmarks(Nr) \
-          ${XDG_CONFIG_HOME-${HOME?homeless}/.config}/surfraw/bookmarks(Nr) \
-          ${HOME?homeless}/.surfraw.bookmarks(Nr)
-        ) && ret=0
+    local -UT XDG_CONFIG_DIRS xdg_config_dirs
+    local it
+    # list the applets
+    set -- ${${(f)"$(_call_program elvi surfraw -elvi)"}%%[[:space:]]##-- *}
+    shift # the first line is an header: remove it
+    # then list the bookmarks
+    for it in \
+      $^xdg_config_dirs/surfraw/bookmarks(Nr) \
+      /etc/xdg/surfraw/bookmarks(Nr) \
+      /etc/surfraw.bookmarks(Nr) \
+      ${XDG_CONFIG_HOME-$HOME/.config}/surfraw/bookmarks(Nr) \
+      $HOME/.surfraw.bookmarks(Nr)
+    do
+      read -d'\0' it < $it
+      set -- "$@" ${${(f)it}%%[[:space:]]*}
+    done
+    _wanted elvi expl elvi compadd "$@" && ret=0
   ;;
 esac