Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/08/2017, à 09:05

Hizoka

HizoSelect, un select boosté aux hormones

Bonjour à vous,


Histoire :
je vous propose une commande que j'ai créé suite à un besoin personnel. En effet la commande select est pas mal mais ne permettait pas de choisir les infos à récupérer ni li les sélections multiples.


Mes attentes :
Tous vos retours sont bons à prendre, alors n’hésitez pas à me proposer de nouvelles possibilités, des corrections (orthographe, code...), j'attends que ça smile


Description :
Tout est bien expliqué (j’espère) sur le GitHub : https://github.com/Hizoka76/HizoSelect


Téléchargement :
Via un fichier deb :
Le deb est dispo sur le ppa : https://launchpad.net/~hizo/+archive/ub … /+packages

Via un PPA :

sudo add-apt-repository ppa:hizo/bash
sudo apt update
sudo apt install hizoselect

Via GitHub :
https://github.com/Hizoka76/HizoSelect


Dernière version (3.2.2) :

Découpage du code en plusieurs fichiers.
    Ajout de l'option --input-delimiter.
    Maj de l'option --help.
    Maj de l'option --version.
    Maj des manpages.
    Correction de l'option --uniq-item.
    Correction de l'affichage de l'aide lors de l'utilisation de stdin.
    Correction de l'utilisation de la touche echap lors de l'utilisation de stdin.
    Hizoselect renvoie \0 lorsqu'un caractère null est présent dans une proposition et qu'il ne sert pas de délimiteur.
    Amélioration du code.

Dernière modification par Hizoka (Le 23/10/2021, à 16:43)

Hors ligne

#2 Le 18/08/2017, à 09:47

kholo

Re : HizoSelect, un select boosté aux hormones

salut,
cool, je vais voir pour remplacer zenity --list

il manquerait la possibilité de tout sélectionner par exemple avec * à la place des nombres...

un affichage d'une présélection par défaut lors du choix qu'il suffirait de valider (si on laisse vide la réponse)
... pour le moment c'est un exit je crois...

Hors ligne

#3 Le 18/08/2017, à 15:43

Hizoka

Re : HizoSelect, un select boosté aux hormones

Salut, merci pour les idées.
Je vais les y ajouter en effet.
Je vais également permettre la modification des couleurs afin que ce soit vraiment personnalisable.

Hors ligne

#4 Le 18/08/2017, à 16:05

moko138

Re : HizoSelect, un select boosté aux hormones

À propos de couleurs,
FUSHIA  -->  FUCHSIA

Le TLF, atilf.atilf.fr a écrit :

fuchsia (...) créé par Ch. Plumier d'apr. le nom du botaniste all. L. Fuchs (1501-1566)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#5 Le 18/08/2017, à 17:48

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

Sympa le travail, en utilisant l'option --no-color on obtient une erreur

ligne 154 (je pense que le ="\033[1;32m" est optionnel)

[[ ${nocolor} == true ]] && unset RAZ ROUGE FUSHIA BLEUFONCE VERT="\033[1;32m"

#6 Le 18/08/2017, à 19:43

Hizoka

Re : HizoSelect, un select boosté aux hormones

moko138 a écrit :

À propos de couleurs,
FUSHIA  -->  FUCHSIA

La vache... je l'ai jamais bien écrit alors...
merci smile

Anonyme68 a écrit :

Sympa le travail, en utilisant l'option --no-color on obtient une erreur]

Merci smile
oups en effet une erreur de copier coller...

kholo a écrit :

il manquerait la possibilité de tout sélectionner par exemple avec * à la place des nombres...

il faudrait que ça renvoie * ( et c'est le programmeur qui se débrouille avec ça) ou toutes les valeurs (dans ce cas il faudrait ne pas renvoyer exit mais surement plus pratique à utiliser) ?
Et visuellement j'ajoute une ligne avec pour numéro * et un texte indiquant son intérêt ?

kholo a écrit :

un affichage d'une présélection par défaut lors du choix qu'il suffirait de valider (si on laisse vide la réponse)

Ce qui serait parfait, ça serait de pouvoir préecrire un texte qu'on puisse supprimer ou valider...

read -e -i "1 2 3" -p "test : "

c'est good ça smile

kholo a écrit :

... pour le moment c'est un exit je crois...

Je pense laisser ça comme ça, car on peut considérer que ne rien valider c'est ne pas faire de choix.
Mais si on arrive pas à trouver de solution pour ci-dessus, il faudra peut être faire un système : si pré valeur et qu'on valide à vide ça passe et sinon ça fait un exit...

Dernière modification par Hizoka (Le 18/08/2017, à 19:58)

Hors ligne

#7 Le 18/08/2017, à 23:14

moko138

Re : HizoSelect, un select boosté aux hormones

FUCHSIA

La vache...

Le "renard" plutôt smile puisque c'est le sens de l'anglais fox et de l'allemand Fuchs.


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#8 Le 18/08/2017, à 23:20

Hizoka

Re : HizoSelect, un select boosté aux hormones

Dernière version a écrit :

Modification du système de texte
Modification du système de couleurs et ajout des arguments des couleurs (--color-numbers --color-values --color-commentary --color-error)
Ajout de --default pour pré-rentrer des réponses
Ajout de --all pour ajouter une ligne pour toutes les sélectionner
Ajout de --all-text pour modifier le texte de la réponse *
Modification de nombreux noms de variables

Merci de me faire quelques retours et me donner vos autres idées smile

Le fichier 7z a été mis à jour aussi bien le script que les manpages.

exemple :

multiselect --color-numbers "\033[1;31m" --default "0 3" --all --all-text "Ouesh gros" a b c d e Exit

Que mettriez vous dans l'aide appelée via l'argument --help ?

Que vaut il mieux faire :
proposer les arguments --all et --all-text
ne proposer que --all avec une valeur facultative pour le texte mais si --all est utilisé juste avant les valeurs réponses alors il prend la 1ere valeur pour son texte... il faut du coup préciser --all ""...
qu'en pensez vous ?

Edit : Les manpages ne sont pas vraiment à jour en fait tongue

Dernière modification par Hizoka (Le 18/08/2017, à 23:56)

Hors ligne

#9 Le 19/08/2017, à 13:28

Hizoka

Re : HizoSelect, un select boosté aux hormones

Fichier : http://hizo.fr/multiselect_v1.7z

Dernière version a écrit :

Beaucoup de changements...
Mise à jour des manpages et du texte d'aide
Remplacement de --all et --all-text par --all[=text]
Ajout de la possibilité d'utiliser des arguments courts
Modification complète du système de traitement des arguments

Création d'un PPA :

sudo add-apt-repository ppa:hizo/bash
sudo apt update
sudo apt install multiselect

et du coup, le deb est dispo aussi : https://launchpad.net/~hizo/+archive/ub … /+packages

D'autres idées ? car la je suis chaud XD

Dernière modification par Hizoka (Le 19/08/2017, à 15:13)

Hors ligne

#10 Le 19/08/2017, à 17:03

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

D'autres idées ? car la je suis chaud XD

rendre impossible de taper autre chose que des chiffres et des espaces ? sinon rendre compatible avec d'autre séparateur que l'espace, ça me paraissait pas clair la première fois que je l'ai utilisé.

si la sélection contient moins de 10 possibilités pouvoir les taper d'affiler sans les séparer ? genre j'écris 124 et c'est reconnu comme sélection 1 2 et 4. D’ailleurs commencer par 1 plutôt que 0, ça me parait plus human friendly.

proposition ultime :

la surbrillance des sélections en temps réel ? ça parait un peu plus compliqué wink un défi à ta hauteur lol

genre tu tapes 2

la ligne 2 va passer en fond de texte coloré et le texte noir.

Dernière modification par Compte anonymisé (Le 19/08/2017, à 17:04)

#11 Le 19/08/2017, à 17:23

Hizoka

Re : HizoSelect, un select boosté aux hormones

Il y a une vérification faites après coup, mais ça ne semble pas possible de limiter les caractères utilises dans read.

Je vais voir ta proposition en cas de - 10 de propositions.

la surbrillance est à mon avis impossible car on est coincé dans read...

Pour commencer à 1, c'est pas trop l'idée vu que je passe par une liste, mais ça devrait être possible.

Sinon je viens d'ajouter la possibilité de ne récupérer que les numéros.
j'ai ajouté un système de complétions des arguments également.
Cette version n'est pas encore sortie.

Hors ligne

#12 Le 19/08/2017, à 18:35

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

pour limiter les caractères utilisés dans read, remplaces :

read -u ${Input} -e -i "${Default}" -p "$(LangText wait_text)" -a Reponses

par ça :

printf "$(LangText wait_text)"
touche=" "
rang=0
until [ "$touche" = "" ]
do IFS= read -n 1 -s touche
	case "$touche" in
		[0-9])
			printf "$touche"
			Reponsestemp="$Reponsestemp""$touche";;
		" "|","|"")
			printf " "
			Reponses[$rang]="$Reponsestemp"
			((rang++))
			Reponsestemp="";;
	esac
done
echo

moi qui croyais que t'étais motivé wink

EDIT : il manque la gestion du back-space

Dernière modification par Compte anonymisé (Le 19/08/2017, à 18:46)

#13 Le 19/08/2017, à 20:04

Hizoka

Re : HizoSelect, un select boosté aux hormones

Bien pensé... lourdingue à gerer mais sympa tongue

ReponsesTemp="$(LangText wait_text)"
Touche=" "
Rang=0

echo -n "${ReponsesTemp}"

until [[ -z ${Touche} ]]
do
    IFS= read -n 1 -s Touche # Travaille sur un seul caractere et cache les touches

    case "${Touche}" in
        [0-9])
            # Ajout des chiffres
            ReponsesTemp+="${Touche}"
            echo -en "\r${ReponsesTemp}" ;;

        " "|","|"")
            # Ajout des espaces
            ReponsesTemp+=" "
            echo -en "\r${ReponsesTemp}" ;;

        $'\177')
            # Retour en arriere
            ReponsesTemp=${ReponsesTemp::-1}
            echo -en "\r${ReponsesTemp} \b";;
    esac
done

Reponses=(${ReponsesTemp//$(LangText wait_text)})

Dernière modification par Hizoka (Le 19/08/2017, à 20:05)

Hors ligne

#14 Le 19/08/2017, à 20:43

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

lourdingue je sais pas smile

quelques améliorations :

la variable "rang" ne sert plus du coup
il faut empêcher le retour arrière si "ReponsesTemp" est vide
il faut aussi mettre un echo à la fin sinon les messages s'écrivent à la suite sans retour à la ligne

Dernière modification par Compte anonymisé (Le 19/08/2017, à 20:44)

#15 Le 19/08/2017, à 20:48

Hizoka

Re : HizoSelect, un select boosté aux hormones

Ouais j'en suis là tongue

ReponsesTemp="$(LangText wait_text)"
TexteBase="${ReponsesTemp}"
Touche=" "
Clear=$(tput el)

echo -n "${ReponsesTemp}" >&2

until [[ -z ${Touche} ]]
do
    IFS= read -n 1 -s Touche # Travaille sur un seul caractere et cache les touches

    case "${Touche}" in
        [0-9])
            # Ajout des chiffres
            ReponsesTemp+="${Touche}"
            echo -en "\r${ReponsesTemp}" >&2 ;;

        "*")
            # Remplacement du contenu par le * avec un clear de la ligne
            ReponsesTemp="${TexteBase}*"
            echo -en "\r${Clear}${ReponsesTemp}" >&2 ;;

        " "|",")
            # Ajout des espaces
            ReponsesTemp+=" "
            echo -en "\r${ReponsesTemp}" >&2 ;;

        $'\012')
            # Saut de ligne
            echo -e "\r${ReponsesTemp}" >&2
            unset Touche ;;

        $'\033')
            # Touche echap avec un clear de la ligne
            echo -e "\r${Clear}${TexteBase}" >&2
            unset Touche ReponsesTemp ;;

        $'\177')
            # Retour en arriere
            ReponsesTemp=${ReponsesTemp::-1}
            [[ ${#TexteBase} -gt ${#ReponsesTemp} || "${ReponsesTemp}" == "${TexteBase}*" ]] && ReponsesTemp="${TexteBase}"
            echo -en "\r${ReponsesTemp} \b" >&2 ;;
    esac
done

# Saut de ligne esthetique
echo >&2

# Récupération des choix en supprimant le texte de base
[[ "${ReponsesTemp/#${TexteBase}}" == "*" ]] && Reponses=("*") || Reponses=(${ReponsesTemp/#${TexteBase}})

Il faut que je regle le soucis du * qui est converti en la liste des fichiers...

EDIT : Normalement c'est bon.
Je continue mes tests.

Dernière modification par Hizoka (Le 19/08/2017, à 20:58)

Hors ligne

#16 Le 19/08/2017, à 22:42

Hizoka

Re : HizoSelect, un select boosté aux hormones

Dernière version a écrit :

Les numéros commencent maintenant à 1
Ajout de l'argument --only-number pour ne renvoyer que les numeros
Le read ne prend en compte que les touches : tab , espace 0-9 * entrée
Mise en place de la complétion (automatique via le ppa ou le deb)

Pour la mise en place de la complétion manuellement :

sudo cp bash_completion /etc/bash_completion.d/multiselect
. /etc/bash_completion

et si la 2e commande ne suffit pas, redémarrer le terminal.

Hors ligne

#17 Le 20/08/2017, à 02:02

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

pour info, j'ai testé la dernière version des dépôts j'ai repéré ces cas de figures.

$ multiselect vache ane

1) vache
2) ane

Sélection : 1 1
vache
vache
$ multiselect vache ane

1) vache
2) ane

Sélection : 0

# pas d'erreur

$ multiselect vache ane

1) vache
2) ane

Sélection : *
/usr/bin/multiselect: ligne 472: * : erreur de syntaxe : opérande attendue (le symbole erroné est "*")
$ multiselect vache ane

1) vache
2) ane

Sélection : * 1
grep: 68: Aucun fichier ou dossier de ce type
Erreur dans la sélection, il faut rentrer un/des chiffre(s) parmi ceux proposés.
Exit

la ligne 472 c'est parce que $number prend la valeur de * et qu'il s'attend à un chiffre

il faut aussi peut-être interdire les étoiles après un chiffre, et un chiffre après les étoiles.

D’ailleurs si tu veux aller plus loin, je devrais pas pouvoir taper 0 3 4 ... dans mon cas, et l'espace devrait être rajouté automatiquement si je tapes 1 ou 2. (ce qui me parait encore mieux que taper sans séparateur)

Dernière modification par Compte anonymisé (Le 20/08/2017, à 02:11)

#18 Le 20/08/2017, à 10:23

Hizoka

Re : HizoSelect, un select boosté aux hormones

D’ailleurs si tu veux aller plus loin, je devrais pas pouvoir taper 0 3 4 ... dans mon cas, et l'espace devrait être rajouté automatiquement si je tapes 1 ou 2. (ce qui me parait encore mieux que taper sans séparateur)

C'est exactement ce que j'avais en tête smile

multiselect vache ane

1) vache
2) ane

Sélection : 0

Ca fait suite au commencement des nombres à 0, je suis passé à coté.

multiselect vache ane

1) vache
2) ane

Sélection : 1 1
vache
vache

Je sais pas si je dois bloquer ça... ça peut avoir un interet non ?
ou alors passer via une option pour le bloquer ou non ?

multiselect vache ane

1) vache
2) ane

Sélection : *
/usr/bin/multiselect: ligne 472: * : erreur de syntaxe : opérande attendue (le symbole erroné est "*")

Il faut que je bloque l'étoile de read/echo si la l'option n'est pas active, bien vu.

multiselect vache ane

1) vache
2) ane

Sélection : * 1
grep: 68: Aucun fichier ou dossier de ce type
Erreur dans la sélection, il faut rentrer un/des chiffre(s) parmi ceux proposés.

Arf j'avais réglé ça mais j'ai du le supprimer depuis en me disant que ça servait à rien XD.

Merci pour ces tests.

Hors ligne

#19 Le 20/08/2017, à 11:31

Hizoka

Re : HizoSelect, un select boosté aux hormones

Mise à jour uniquement du fichier 7z pour le moment : http://hizo.fr/multiselect_v1.7z

Derniere version a écrit :

Insertion automatique des espaces pour les chiffres et nombres à 2 chiffres
Seuls les chiffres et nombres proposés peut être utilisés
Ajout d'une vérification du texte d'attente afin que le dernier caractère ne soit pas un chiffre, ajoute un espace si besoin
Ajout d'une vérification sur les valeurs par défaut

Je veux voir ça :
Amélioré le read pour qu'il teste les nombres à 3 chiffres.
Ajouter la possibilité d’écrire en colonne ? Histoire que ça prenne moins de place.
Ajouter l'argument --uniq pour éviter les réponses doublons

J'ai eu un souci avec la complétion, ça sera régler sur la prochaine version du ppa.

Dernière modification par Hizoka (Le 20/08/2017, à 11:32)

Hors ligne

#20 Le 25/08/2017, à 19:51

Hizoka

Re : HizoSelect, un select boosté aux hormones

"Petite" mise à jour tongue

Nouvelle version a écrit :

Changement de nom en hizoselect (le deb créé de sliens pour HizoSelect et multiselect)
Refonte du read.
Le read fonctionne jusqu'à 999 propositions (normalement smile ).
Le read empêche les doubles espaces.
Le read prévient lorsque la limite de réponse est atteinte.
Le read bloque les touches spéciales (style page up et page down, les Fx, suppr, les flèches...).
Ajout de l'argument --uniq pour empêcher les doublons dans les réponses (mêmes numéros).
Ajout de l'argument --random permettant d'utiliser ? pour renvoyer une valeur aléatoire.
Ajout de l'argument --columns pour afficher les réponses en colonnes.
Remplacement de --error par --exit
Remplacement de --secret et --commentary par --separtor, l'ordre est toujours important : Text@@Com@@Secret

N'hésitez pas à me faire des retours smile

PPA mis à jour, fichier 7z aussi.

Hors ligne

#21 Le 25/08/2017, à 20:55

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

Sacré boulot

Mes retours

dans le cas suivant, on peut pas sélectionner le 10 (sauf en fessant backspace puis 0) :

$ hizoselect chat chien ane poule vache cheval oie canard pigeon rat

1) chat
2) chien
3) ane
4) poule
5) vache
6) cheval
7) oie
8) canard
9) pigeon
10) rat
e) Exit

Sélection : 

on peut plus utiliser le joker "*" ?
je verrais bien --uniq par defaut, non ?

proposition d'améliorations (qui viennent de me passer par la tête) :

- pouvoir taper le chiffre ou le nom du champ (ex 1 ou chat)
- faire le tri en amont pour ne garder qu'une valeur unique (hizoselect chat chat chien --> propose plus que chat et chien)
- pouvoir taper >5 pour choisir tout les valeurs supérieur à 5

#22 Le 25/08/2017, à 21:52

Hizoka

Re : HizoSelect, un select boosté aux hormones

Pas mal le soucis lorsqu'il y a 10 valeurs, ca passe avec plus mais pas 10.
je look ça smile
EDIT : Il faut remplacer

if [[ ${CountNumber2Digits} > 1 ]]

par

if [[ ${CountNumber2Digits} -gt 0 ]]

on peut plus utiliser le joker "*" ?

il faut utiliser --all.

je verrais bien --uniq par defaut, non ?

oui je suis d'accord.
EDIT : fait.

- pouvoir taper le chiffre ou le nom du champ (ex 1 ou chat)

Trop ingérable au niveau du read et surtout je vois pas l’intérêt de perdre son temps à écrire alors qu'il suffit de rentrer un numéro.

- faire le tri en amont pour ne garder qu'une valeur unique (hizoselect chat chat chien --> propose plus que chat et chien)

Je vais le faire mais il ne faut pas l'interdire complètement.
EDIT : fait smile

- pouvoir taper >5 pour choisir tout les valeurs supérieur à 5

Idée intéressante, compliquée mais intéressante smile
Mais pour le coup je pense devoir bloquer cet option et la limite.
EDIT : Ca m'a foutu un gros bordel XD faut que je rebosse dessus

en tout cas, merci pour tes retours.

Dernière modification par Hizoka (Le 25/08/2017, à 22:56)

Hors ligne

#23 Le 26/08/2017, à 00:42

Compte anonymisé

Re : HizoSelect, un select boosté aux hormones

autre chose tiens :

$ hizoselect "réponse1@@commentaire@@secret1" "réponse2@@commentaire@@secret2"

1) réponse1 : commentaire@@secret1
2) réponse2 : commentaire@@secret2
e) Exit

Sélection : 

D'ailleurs j'ai voulu tester avec une situation plus concrète :

IFS=$'\n';hizoselect $(for a in {apt,zenity};do apt-cache search ^$a$|sed 's/ - /@@/';done)

curieusement ça me renvoie le commentaire et non le texte, normal ?
D'ailleurs avec -n renvoie le numéro et le commentaire (contrairement au man)

#24 Le 26/08/2017, à 08:10

Hizoka

Re : HizoSelect, un select boosté aux hormones

Anonyme68 a écrit :

autre chose tiens :

$ hizoselect "réponse1@@commentaire@@secret1" "réponse2@@commentaire@@secret2"

1) réponse1 : commentaire@@secret1
2) réponse2 : commentaire@@secret2
e) Exit

Sélection : 

Réglé smile

Anonyme68 a écrit :

D'ailleurs j'ai voulu tester avec une situation plus concrète :

IFS=$'\n';hizoselect $(for a in {apt,zenity};do apt-cache search ^$a$|sed 's/ - /@@/';done)

curieusement ça me renvoie le commentaire et non le texte, normal ?

Réglé

Anonyme68 a écrit :

D'ailleurs avec -n renvoie le numéro et le commentaire (contrairement au man)

Pas tout compris mais -n renvoie nombre:texte.
L'option -o renvoie juste nombre.
Et j'ai ajouté une vérification de valeur vide.

Hors ligne

#25 Le 27/08/2017, à 12:03

Hizoka

Re : HizoSelect, un select boosté aux hormones

Salut,

bonne mise à jour, normalement pas trop de bug nouveaux, les anciens ont été corrigés (j’espère)...

Dernière version 1.2 a écrit :

Corrections de bug
Remplacement de --uniq par --no-uniq
Mise en place de l'argument --lower pour permettre la sélection inférieure à un nombre : <Nombre
Mise en place de l'argument --upper pour permettre la sélection supérieure à un nombre : >Nombre
Ces 2 arguments sont incompatibles avec --limit
Fusion des arguments --color-* en --colors
Ajout d'un argument --debug pour voir les erreurs de touches
Ajout d'un argument --unique-proposal pour éviter les propositions doublons

Mise à jour du ppa en cours.

Hors ligne