...
 
Commits (2)
...@@ -5,4 +5,5 @@ Permet de créer un menu de navigation par touche fléchées. ...@@ -5,4 +5,5 @@ Permet de créer un menu de navigation par touche fléchées.
Options: Options:
-ro : retourne l'offset de la selection en partant de 1, plutot que le libellé de la selection -ro : retourne l'offset de la selection en partant de 1, plutot que le libellé de la selection
-s<offset>: préselectionne un élément. Par défaut 1. Pour ne rien préselectionner, entrer -s0 -s<offset>: préselectionne un élément. Par défaut 1. Pour ne rien préselectionner, entrer -s0
-a<nb colonnes> : Aligne la sélection sur une colonne de n caractères. Par défaut, s'aligne sur la taille du plus grand élément
#!/bin/bash
source selectmenu.sh;
selectmenu -a0 `ls -1 /`;
printf "$REPLY\n";
\ No newline at end of file
selectmenu() { selectmenu() {
local POS=0; local POS=0;
local RET=0; local RET=0;
local MAX_LEN=0;
local ALIGN=-1;
for var in $@; do for var in $@; do
if [[ "$var" =~ ^-s([0-9]+)$ ]]; then POS=$[${BASH_REMATCH[1]}-1]; shift; fi if [[ "$var" =~ ^-s([0-9]+)$ ]]; then POS=$[${BASH_REMATCH[1]}-1]; shift; fi
if [[ "$var" =~ ^-ro$ ]]; then RET=1; shift; fi if [[ "$var" =~ ^-ro$ ]]; then RET=1; shift; fi
if [[ "$var" =~ ^-a([0-9]+)$ ]]; then ALIGN=$[${BASH_REMATCH[1]}]; shift; fi
if [[ "$var" =~ ^[^-].*$ ]]; then [[ ${#var} -ge $MAX_LEN ]] && MAX_LEN=${#var}; fi
done done
local NB_ITEMS=$#; local NB_ITEMS=$#;
[[ $ALIGN -lt 0 ]] && ALIGN=$MAX_LEN;
while true; while true;
do do
...@@ -14,7 +19,7 @@ selectmenu() { ...@@ -14,7 +19,7 @@ selectmenu() {
do do
local STYLE="\x1b[0m"; local STYLE="\x1b[0m";
if [ $((i++)) -eq $POS ]; then STYLE="\e[7m"; fi if [ $((i++)) -eq $POS ]; then STYLE="\e[7m"; fi
echo -en "$STYLE${item}\x1b[0m\n"; printf "$STYLE%-${ALIGN}s\x1b[0m\n" $item;
done done
read -rsn1 key; read -rsn1 key;
case "$key" in case "$key" in
...@@ -30,6 +35,6 @@ selectmenu() { ...@@ -30,6 +35,6 @@ selectmenu() {
esac esac
echo -e "\033["$[$NB_ITEMS+1]"A"; echo -e "\033["$[$NB_ITEMS+1]"A";
done done
[[ $RET -eq 0 ]] && echo ${!POS} || echo $POS; REPLY=`[[ $RET -eq 0 ]] && echo ${!POS} || echo $POS`;
} }