[PATCH] fish: reduce completion runtimes
Mathis Antony
sveitser at gmail.com
Mon Feb 19 16:01:31 CET 2018
Fish completion spends most of the time in calls to `sed` in for loops over
entries and directories. This patch removes the repeated calls to `sed`.
Signed-off-by: Mathis Antony <sveitser at gmail.com>
---
src/completion/pass.fish-completion | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/src/completion/pass.fish-completion b/src/completion/pass.fish-completion
index c32a42c..8637874 100644
--- a/src/completion/pass.fish-completion
+++ b/src/completion/pass.fish-completion
@@ -20,6 +20,7 @@ function __fish_pass_needs_command
end
return 1
end
+
function __fish_pass_uses_command
set cmd (commandline -opc)
if [ (count $cmd) -gt 1 ]
@@ -33,24 +34,22 @@ end
function __fish_pass_print_gpg_keys
gpg2 --list-keys | grep uid | sed 's/.*<\(.*\)>/\1/'
end
+
+function __fish_pass_print
+ set -l ext $argv[1]
+ set -l strip $argv[2]
+ set -l prefix (__fish_pass_get_prefix)
+ printf '%s\n' "$prefix"/**"$ext" | sed "s#$prefix/\(.*\)$strip#\1#"
+end
+
function __fish_pass_print_entry_dirs
- set -l prefix (__fish_pass_get_prefix)
- set -l dirs
- eval "set dirs "$prefix"/**/"
- for dir in $dirs
- set entry (echo "$dir" | sed "s#$prefix/\(.*\)#\1#")
- echo "$entry"
- end
+ __fish_pass_print "/"
end
+
function __fish_pass_print_entries
- set -l prefix (__fish_pass_get_prefix)
- set -l files
- eval "set files "$prefix"/**.gpg"
- for file in $files
- set file (echo "$file" | sed "s#$prefix/\(.*\)\.gpg#\1#")
- echo "$file"
- end
+ __fish_pass_print ".gpg" ".gpg"
end
+
function __fish_pass_print_entries_and_dirs
__fish_pass_print_entry_dirs
__fish_pass_print_entries
--
2.16.1
More information about the Password-Store
mailing list