+ Rename array.delete to list.erase to better suit Fish terminology.

+ Extend to support any number of items and/or lists.
+ Add --from option.
This commit is contained in:
Jorge Bucaran 2015-01-11 01:20:25 +09:00 committed by Bruno Pinto
parent f34f114018
commit 29d117e7ce

View File

@ -1,8 +1,35 @@
# Remove item from list. List must be the name of a global variable. # NAME
# @params <item> <list> # list.erase - erase items from lists
function array.delete #
set -l item $argv[1] # SYNOPSIS
if set -l index (contains -i -- $item $$argv[2]) # <item> [<item>...] [--from] <list>
set -e $argv[2][$index] # <item> [<item>...] --from <list1> [<list2>...]
#
# DESCRIPTION
# Erase any number of items from any number of lists. If more than one
# list is specified it must be separated from the items with --from.
#
# NOTES
# While items are basically any valid sequence of symbols, lists refer
# to any global variable or local variable in the scope of the calling
# function by name.
#
#/
function -S list.erase
# List to erase from is last item by default.
set -l items $argv[1..-2]
set -l lists $argv[-1]
if set -l index (contains -i -- --from $argv)
# Everything before --from are items to erase and everything
# after, lists to erase any found items from.
set items $argv[1..(math $index-1)]
set lists $argv[(math $index+1)..-1]
end
for item in $items
for list in $lists
if set -l index (contains -i -- $item $$list)
set -e $list[1][$index]
end
end
end end
end end