Contenu | Rechercher | Menus

Annonce

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 23/07/2012, à 06:01

Hibou57

[Truc] Zénity : mémoire des anciennes entrées

Je ne sais pas si ça avait déjà été posté ici, sinon tant‑pis, ce sera redondant ou ce sera une version supplémentaire.

C’est un script à sourcer dans un autre script. Il défini une fonction prenant deux paramètres :

  • Nom d’une variable (nom de variable valide !)

  • Description du champs pour Zénity

Comme il suppose un nom de variable spécifique à chaque champs, ça ne s’applique qu’aux script qui stockent chaque champs dans une variable en propre et non‑pas dans une variable temporaire identique pour toutes les invocations de Zénity.

Son utilité est que si la fonction a déjà été invoquée pour une saisie pour le même nom de variable, alors la valeur par défaut indiquée à Zénity, sera cette précédente entrée. C’est plus tranquille que d’avoir à sans cesse ré‑entrée des valeurs identiques ou similaires, comme ça arrive souvent.

Des choses peuvent être complétées ou améliorées, voir plus bas ; mais pour l’instant le source. Il est supposé être enregistré dans un fichier “get-entry”.

# This file is to be sourced in another shell script,
# not to be invoked directly!

# Invokes 'zenity' for a text entry, using a field name,
# keeping track of the previous value entered for
# the same field, and using that previous value
# as the default, if there was previously one.
# Otherwise, use an empty string as the default.
# Defaults are memorized on a per user basis.

function get_entry () {
  #
  # $1 is the field name.
  # $2 is the field description.
  # The result goes to the shell variable whose
  # name is $1.
  #
  # Example use and test:
  #   source "get-entry";
  #   get_entry MY_FIELD_NAME "My field description";
  #   echo $MY_FIELD_NAME;
  #   # Repeat again to see the default in action
  #   get_entry MY_FIELD_NAME "My field description";
  #   echo $MY_FIELD_NAME;

  # 1.
  # Create "$GI_DEF_DIR" directory if it
  # does not exist. Exit with an error box
  # if it ever could not be created.

  GI_DEF_DIR="/tmp/vars-default";

  if [ ! -d "$GI_DEF_DIR" ]; then
    mkdir "$GI_DEF_DIR";
    if [ "$?" != "0" ]; then
      zenity \
        --error \
        --text="Could not create directory \"$GI_DEF_DIR\"";
      exit; 
    fi;
  fi;

  GI_DEF_DIR="$GI_DEF_DIR/$USER";

  if [ ! -d "$GI_DEF_DIR" ]; then
    mkdir "$GI_DEF_DIR";
    if [ "$?" != "0" ]; then
      zenity \
        --error \
        --text="Could not create directory \"$GI_DEF_DIR\"";
      exit; 
    fi;
  fi;

  # 2.
  # Read the field's previous entered value
  # if there was one; else, assign the default
  # value an empty string.

  GI_DEF_VAL_FILE="$GI_DEF_DIR/$1.txt";

  if [ -f "$GI_DEF_VAL_FILE" ]; then
    GI_DEF_VAL=$(cat "$GI_DEF_VAL_FILE");
  else
    GI_DEF_VAL="";
  fi;

  # 3.
  # Invoke 'zenity' with the caller provided
  # field description and the previously
  # determined default value. Exit if
  # the user pressed Cancel.

  GI_VAL=$(zenity \
    --entry \
    --text="$2" \
    --entry-text="$GI_DEF_VAL");

  if [ "$?" != "0" ]; then
    exit; 
  fi;

  # 4.
  # Save the actual value as the default for later
  # invocation.

  echo "$GI_VAL" >"$GI_DEF_VAL_FILE";

  # 5.
  # Return the value in the shell variable of
  # the designated name.

  eval $1=\"$GI_VAL\";

} # end get_entry

Il reste à le compléter pour la boite de dialogue qui montre une liste, ce qui ne me semble pas évident à priori. Il est plus facile à adapter pour les autres cas.

Il reste un point à améliorer aussi. Comme il utilise un répertoire “/tmp/vars-default/$USER” pour les valeurs par défaut des champs, il pourrait être intéressant que le répertoire “/tmp/vars-default” ne soit pas créé par un simple utilisateur, comme le fait le script quand ce premier répertoire n’existe pas. S’il était créé par root, il pourrait être protégé contre la suppression par n’importe quel utilisateur et il pourrait recevoir l’autorisation pour que chaque utilisateur puisse y créer son répertoire avec ses droits (ce que fait le script, et là c’est OK). Mais ces questions sont seulement importantes dans le cas où il est utilisé par plusieurs utilisateurs, ce qui n’est pas nécessairement le cas le plus courant… mais ça serait plus propre quand‑même qu’il soit adapté à ça.

Les commentaires sont ouverts.

Dernière modification par Hibou57 (Le 23/07/2012, à 06:04)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne