Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2012
    Messages : 3
    Points : 0
    Points
    0

    Par défaut Gestion ligne de commande

    Bonjour,

    J'écris acuellement un petit programme intéractif en ada sous Linux.
    Dans ce programme j'éxécute plusieurs commandes à la suite dans mon shell.
    J'aimerais alors savoir s'il est possible en ada de gérér l'historique, l'édition ou la complétion de ligne de commande.

    Par exemple lorsque je presse la flèche du haut, au lieu d'afficher ^[[A, il me propose la dernière commande entrée.

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : juin 2006
    Messages : 916
    Points : 372
    Points
    372

    Par défaut

    Bonjour, j'ai écrit un bout de code qui saisie chaque caractère d'une séquence d'échappement en plus des caractère simple.
    L'inconvéniant, c'est pour la touche esc justement.
    Ce programme va attendre la suite de la séquence d'échappement, ce qui oblique à saisir un esc supplémentaire.

    Voic le bout de code.
    Code ada :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     begin
          loop
             declare
                Char : Character;
             begin
                
                Text_Io.Get_Immediate(Char);
                case Char is
                   when Character'Val(27) =>
                      Text_Io.Get_Immediate(Char);
                      case Char is
                         when Character'Val(27) =>               
                            Quatuor_Console.Receive(Char);
                         when Character'Val(91) =>
                            Text_Io.Get_Immediate(Char);                 
                            case Char is
                               when Character'Val(49) =>
                                  Text_Io.Get_Immediate(Char);                   
                                  case Char is
                                     when Character'Val(55) =>
                                        null;Text_Io.Put_Line(" -- F6");                             
                                     when Character'Val(56) =>
                                        null;Text_Io.Put_Line(" -- F7");
                                     when Character'Val(57) =>
                                        null;Text_Io.Put_Line(" -- F8");
                                     when Character'Val(126) =>                        
                                        null;Text_Io.Put_Line(" -- begin");
                                     when others =>
                                        null;
                                  end case;                 
                               when Character'Val(50) =>                       
                                  Text_Io.Get_Immediate(Char);                   
                                  case Char is
                                     when Character'Val(48) =>
                                        null;Text_Io.Put_Line(" -- F9");
                                     when Character'Val(49) =>
                                        null;Text_Io.Put_Line(" -- F10");
                                     when Character'Val(51) =>
                                        null;Text_Io.Put_Line(" -- F11");
                                     when Character'Val(52) =>
                                        null;Text_Io.Put_Line(" -- F12");
                                     when Character'Val(53) =>                               
                                        null;Text_Io.Put_Line(" -- Maj+F1");
                                     when Character'Val(54) =>                               
                                        null;Text_Io.Put_Line(" -- Maj+F2");
                                     when Character'Val(56) =>                               
                                        null;Text_Io.Put_Line(" -- Maj+F3");
                                     when Character'Val(57) =>
                                        null;Text_Io.Put_Line(" -- Maj+F4");
                                     when Character'Val(126) =>
                                        null;Text_Io.Put_Line(" -- insert");
                                     when others =>
                                        null;
                                  end case;                                                                    
                               when Character'Val(51) =>                       
                                  null;Text_Io.Put_Line(" -- del");                    
                                  Text_Io.Get_Immediate(Char);      
                               when Character'Val(52) =>                       
                                  null;Text_Io.Put_Line(" -- end");                    
                                  Text_Io.Get_Immediate(Char);      
                               when Character'Val(53) =>
                                  Text_Io.Put_Line(" -- page up");
                                  Text_Io.Get_Immediate(Char);      
                               when Character'Val(54) =>
                                  Text_Io.Put_Line(" -- page down");
                                  Text_Io.Get_Immediate(Char);      
                               when Character'Val(91) =>
                                  Text_Io.Get_Immediate(Char);                   
                                  case Char is
                                     when Character'Val(65) =>
                                        null;Text_Io.Put_Line(" -- F1");                                
                                        Quatuor_Console.Play(True);
                                     when Character'Val(66) =>
                                        null;Text_Io.Put_Line(" -- F2");
                                        Quatuor_Console.Rec(True);
                                     when Character'Val(67) =>
                                        null;Text_Io.Put_Line(" -- F3");                                
                                        Quatuor_Console.play(False);
                                     when Character'Val(68) =>
                                        null;Text_Io.Put_Line(" -- F4");
                                        Quatuor_Console.Rec(False);
                                     when Character'Val(69) =>
                                        null;Text_Io.Put_Line(" -- F5");
                                        Quatuor_Console.Reset;
                                     when others =>
                                        null;
                                  end case;
                               when Character'Val(65) =>
                                  null;Text_Io.Put_Line(" -- up");
                               when Character'Val(66) =>
                                  null;Text_Io.Put_Line(" -- down");
                               when Character'Val(67) =>
                                  null;Text_Io.Put_Line(" -- right");
                               when Character'Val(68) =>
                                  null;Text_Io.Put_Line(" -- left");
                               when others =>
                                  null;
                            end case;
                         when others =>
                            null;
                      end case;
                   when others =>
                      Quatuor_Console.Receive(Char);
                end case;
             exception
                when Text_Io.End_Error =>
                      null;
             end;
          end loop;
       end;

    Up down right et left corresponde aux flèche.

    Après il te suffis de stocker les ligne saisie dans une liste ou un tableau et de rappeler la ligne correspondant au nombre de fois que l'on à appuyé sur la flèche.

    Il y a d'autre outils pour saisir les séquence d'échappement.
    Ce code à la mérite d'être court et simple, même si peu élégant.

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2012
    Messages : 3
    Points : 0
    Points
    0

    Par défaut

    cool, merci!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •