2016-04-26 9 views
0

Ich möchte die automatische Vervollständigung der von mir erstellten Shell hinzufügen. Ich konnte den gesamten Code nicht schreiben, aber ich kann dir sagen, dass meine Shell funktioniert! Also habe ich versucht, Auto-Vervollständigung mit der readline-Funktion zu implementieren, aber das Ergebnis ist nicht so toll (siehe den Code in Kommentar Ich habe versucht): die automatische Vervollständigung funktioniert, aber die Probleme sind: 1. Ich muss zweimal drücken um den Befehl jetzt auszuführen. 2. Ich muss zweimal den Befehl eingeben (wie "ls"), um es auszuführen! Kannst du mir helfen, das zu beheben? danke :)Auto-Vervollständigung visuell nicht gut (readline.h)

#include <readline/readline.h> 
#include <readline/history.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include "includes/ft_sh1.h" 

int main(int ac, char **av, char **envp) 
{ 
    char *line; 
    t_env *e = NULL; 
    char *add; 

    if (!(e = (t_env *)malloc(sizeof(t_env)))) 
     return (0); 
    e->envp = env_cpy(envp, 0, 0); 
    init_env(e); 
    while (1) 
    { 

--> My question is only about this part below <-- 

     ft_printf("shell$> "); 

    // add = readline("shell "); 
    // add_history(add); 
    // printf("%s", add); 

--> My question is only about this part above <-- 


     get_next_line(0, &line); 
     get_pwd_env(e); 
     e->cmd = get_cmd(e, line); 
     if (ft_strcmp(line, "exit") == 0) 
      exit(0); 
     else if (ft_strncmp(e->cmd[0], "cd", 2) == 0) 
      cd_cmd(e); 
     else 
      ft_execute(av, line, e); 
    } 
} 

Antwort

0

Wenn Sie den Teil des Codes in Frage nur Kommentar-, Sie immer noch den Ruf

 get_next_line(0, &line); 

in Ihrem Programm haben, also kein Wunder, dass Sie zwei Befehlszeilen eingeben müssen.