|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
# $1, $2, ... - elements of the list |
|
|
|
|
# $NLIST_NONSELECTABLE_ELEMENTS - array of indexes (1-based) that cannot be selected |
|
|
|
|
# $REPLY is the output variable - contains index (1-based) or -1 when no selection |
|
|
|
|
# $reply (array) is the second part of the output - use the index (REPLY) to get selected element |
|
|
|
|
# |
|
|
|
|
# Copy this file into /usr/share/zsh/site-functions/ |
|
|
|
|
# and add 'autoload n-list` to .zshrc |
|
|
|
|
@ -164,6 +165,7 @@ integer current_difference=0 |
|
|
|
|
local prev_search_buffer="" |
|
|
|
|
integer prev_uniq_mode=0 |
|
|
|
|
integer prev_start_idx=-1 |
|
|
|
|
local MBEGIN MEND MATCH mbegin mend match |
|
|
|
|
|
|
|
|
|
# Ability to remember the list between calls |
|
|
|
|
if [[ -z "$NLIST_REMEMBER_STATE" || "$NLIST_REMEMBER_STATE" -eq 0 || "$NLIST_REMEMBER_STATE" -eq 2 ]]; then |
|
|
|
|
@ -264,11 +266,15 @@ while (( 1 )); do |
|
|
|
|
local search_pattern="" |
|
|
|
|
local colsearch_pattern="" |
|
|
|
|
if [ -n "$search_buffer" ]; then |
|
|
|
|
# Patterns will be *foo*~^*bar* and foo|bar) |
|
|
|
|
# Patterns will be *foo*~^*bar* and (foo|bar) |
|
|
|
|
search_pattern="${search_buffer// ##/*~^*}" |
|
|
|
|
colsearch_pattern="${search_buffer// ##/|}" |
|
|
|
|
|
|
|
|
|
list=( "${(@M)list:#(#i)*$~search_pattern*}" ) |
|
|
|
|
# The repeat will make the matching work on a fresh heap |
|
|
|
|
repeat 1; do |
|
|
|
|
list=( "${(@M)list:#(#i)*$~search_pattern*}" ) |
|
|
|
|
done |
|
|
|
|
|
|
|
|
|
last_element="$#list" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
@ -287,7 +293,10 @@ while (( 1 )); do |
|
|
|
|
|
|
|
|
|
if [ -n "$colsearch_pattern" ]; then |
|
|
|
|
local red=$'\x1b[00;31m' reset=$'\x1b[00;00m' |
|
|
|
|
disp_list=( "${(@)disp_list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" ) |
|
|
|
|
# The repeat will make the matching work on a fresh heap |
|
|
|
|
repeat 1; do |
|
|
|
|
disp_list=( "${(@)disp_list//(#mi)($~colsearch_pattern)/$red${MATCH}$reset}" ) |
|
|
|
|
done |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# We have display list, lets replace newlines with "\n" when needed (1/2) |
|
|
|
|
@ -380,7 +389,7 @@ while (( 1 )); do |
|
|
|
|
|
|
|
|
|
# Get the special (i.e. "keypad") key or regular key |
|
|
|
|
if [ -n "$key" ]; then |
|
|
|
|
final_key="$key" |
|
|
|
|
final_key="$key" |
|
|
|
|
elif [ -n "$keypad" ]; then |
|
|
|
|
final_key="$keypad" |
|
|
|
|
else |
|
|
|
|
|