Shell project

Moul cd62f4c7d5 [enh] add unit tests for redirections from one fd to an other. 4 years ago
bareme 998f3854c6 Add new bareme. 4 years ago
libft f04321c4f7 [fix] libft: ft_str(n)cmp: check string are not NULL to avoid segfault. 4 years ago
src 22d3078119 [enh] handle closing redirection. 4 years ago
.gitignore 1c20ab34cb [norm] split in two files seven f() for history. 4 years ago
LICENSE 0b0938d923 initial commit 5 years ago
Makefile 19aebb4d30 [norm] split in two files term and keys handling as there six f(). 4 years ago
README.md 22d3078119 [enh] handle closing redirection. 4 years ago
auteur 4df0f1b9f6 [mod] remove execution rights on files. 4 years ago
shell_script.sh 5230434daa [enh] add basic shell script execution as parameter. 4 years ago
tests.sh cd62f4c7d5 [enh] add unit tests for redirections from one fd to an other. 4 years ago

README.md

21 Shell

21 Shell project

Usage

  • Begin/End:
    • Home & End
    • Ctrl + A & Ctrl + E
  • Move between words: Ctrl + U & Ctrl + I
  • Move between lines up/down: Ctrl + T & Ctrl + G
  • Copy: Ctrl + K
  • Paste: Ctrl + P

Bonus

  • Rights in the path (sh1, 21sh)
  • ./21sh -c "cmds" option (sh1, 21sh)
  • Basic script execution (sh1, 21sh)
  • Semicolons ;, pipes, redirections (sh1)
  • Unit tests (sh1, 21sh)
  • Documented code (sh1, 21sh)
  • Functionnal schema (sh1, 21sh)
  • Ctrl + L: clear (sh1, 21sh)
  • Édition dans les hérédoc (sh1, 21sh) (- Pipe avec les backquotes)

Functionnal schema

Three entries:

  • Open Shell
    • Termcaps
    • History
  • Command
  • Script
    • Handle semicolons
    • Launch redirections
    • Launch pipes
    • Launch executions
    • Launch executables
    • Launch built-in: cd, pwd, env, setenv and unsetenv

Todo

Déplacements

  • déplacements gauche, droite
    • déplacements sur plusieurs lignes
  • déplacements début, fin
    • déplacements sur plusieurs lignes mal positionné
  • déplacements entre mots : à gauche avec ctrl + U et à droite avec ctrl + I
    • positionnement pas exact aux espaces lors des déplacements.
  • déplacement haut et bas entre les lignes avec ctrl + T et ctrl + G
    • gérer les limites avec la longueur de la cmd et le nombre de lignes et de colones
    • bloquer la remontée sur le prompt
    • la descente enmène en première position gauche
    • Ne pas descendre dans le vide de la ligne
    • en descendant, le déplacement se fait en diagonale
  • Utilisation double de Ctrl + U pour monter en haut et déplacement entre les mots vers la gauche.
  • problème de déplacement horizontal sur plusieurs lignes move-word-left, move-left sous iTerm:
    • monte deux fois en allant vers la gauche, car up puis une autre fois grâce à la gestion intégrée d’iTerm
    • ne dessend pas en allant vers la droite : trouvé, voir point suivant
    • conflit potentiel entre up/do et le/nd : up/do doivent être printés avant le/nd
  • Récupérer les Ctrl + <— et Ctrl + —> pour se déplacer entre les mots.

Éditions

  • insertion caractères à l’endroit du curseur
  • insertion sur plusieurs lignes
    • décalage à apporter pour les lignes inférieures
  • suppression droite et gauche sur la même ligne
    • suppression gauche sur plusieurs lignes
    • suppression droite sur plusieurs lignes
  • finir les termcaps lors de l’extinction du 21sh :
    • problèmes de caractères bizarres dans le shell parent
    • ouvrir avant et fermer après chaque actions de termcaps
    • problème possible de caractères dans un filedescriptor
  • lors de l’insertion de caractères en milieu de ligne : la suite n’est pas bufferisée.

Historique

  • flèche du haut, bas pour naviguer dans l’historique des commandes
    • Corriger le fait de pouvoir se déplacer sur le prompt lors de la navigation dans l’historique
    • Corriger le fait que revenir vers l’historique récent, fait sauter une commande
    • e->cmd non assigné à chaîne de caractères vide lors du déplacement dans l’historique et du retour sur la cmd vide
    • impossible d’éxecuter uniquement la première cmd dans l’historique.
    • perte de l’historique et remplacement par 'K'.

Hérédocs

  • gérer l’hérédoc avec les termcaps
  • gérer l’édition de ligne : insertion, suppression, déplacements droite et gauche
  • ne plus afficher les caractères des flèches
  • segfault lors de la suppression gauche.
  • ctrl + d faire office d’EOF
  • gérer le parsing de "cat -e << EOF >> toto"
  • gérer le hérédoc puis la redirection

Héréthings

  • attente fermeture parenthèses, quotes, double quotes, back quotes, crochets, accolades
  • première ligne non récupérée
  • enlever les parenthèses
  • prompt herething non fonctionnel pour (, [ et {.
  • balancer dans le pipe les commandes parenthésées
  • Espaces entre les sauts de lignes ?
  • Gérer le parsing des caractères entres côtes
  • segfault: echo "\nrnastuie\nanrsut\n"

Redirections

Autres

  • copier/coller
    • vérifier que ça fonctionne sous iTerm
  • Gérer les fuites mémoires avec leaks : libérer toutes la mémoire allouée
  • cat, écrire qqch, ctrl + d × 2 quitte le cat
  • ctrl + d: quitter lors ligne vide, ne pas quitter lors ligne remplie