Journal Bash et les raccourcis clavier

Posté par  . Licence CC By‑SA.
Étiquettes :
50
18
sept.
2017

Sommaire

Bonjour nal.

Aujourd’hui je vais parler des raccourcis clavier sur Bash. Parce que j’en ai envie.

C’est très pratique et reposant de pouvoir manipuler Bash en bougeant le moins possible ses mains. Tant qu’on écrit du texte, c’est facile. Mais, très souvent, on a besoin de bouger le curseur d’écriture, de supprimer un caractère, d’avoir l’auto‐complétion, etc. Pour cela, le réflexe est d’utiliser les touches dédiées du clavier : Tab, , « Retour charriot », etc. Ces touches étant aux bords du clavier, cela demande quelques mouvements qui pourraient être évités.

Bash prend en charge une série de raccourcis combinant la touche Ctrl plus un caractère ou la touche Alt plus un caractère. Chaque raccourci a sa fonction que nous verrons tout au long de l’article.

Les touches Alt et Ctrl sont, elles aussi, aux bords du clavier, mais elles sont utilisables facilement sans trop bouger ou tordre ses mains.

Important

Pour la suite de ce tutoriel, je noterais les raccourcis A-x pour les raccourcis avec la touche Alt et C-x pour ceux avec la touche Ctrl.

Manipuler le curseur

Commençons par le commencement : comment avancer et reculer le curseur de texte ?

  • C-f : avancer d’un caractère ;
  • C-b : reculer d’un caractère.

f fait référence au mot anglais forward (vers l’avant) et b à backward (vers l’arrière).

Il est aussi possible de déplacer le curseur d’un mot plutôt que d’un caractère :

  • A-f : avancer d’un mot, s’arrêter à la fin de celui‐ci ;
  • A-b : reculer d’un mot, s’arrêter au début de ce dernier.

Pour aller en début et en fin de ligne, utiliser :

  • C-a : début de la ligne ;
  • C-e : fin de ligne ;
  • C-xx : alterner entre la position actuelle du curseur et le début de la commande.

Historique et exécution de commandes

Pour exécuter une commande que vous venez de taper, pressez:

  • C-m : retour charriot.

Si vous voulez naviguer dans l’historique des commandes, comme avec les touches fléchées :

  • C-p : commande précédente (p en référence à previous) ;
  • C-n : commande suivante (n pour next).

Il est aussi possible de rechercher une commande dans l’historique :

  • C-r : recherche dans l’historique ;
  • A-r : si, dans l’invite de commande, vous avez modifié une ligne rappelée de l’historique, ce raccourcis la remet en l’état (telle qu’elle se trouve dans l’historique).

Lorsque vous recherchez dans l’historique avec C-r et que plusieurs occurrences sont trouvées, appuyez plusieurs fois sur C-r pour passer de l’une à l’autre. La recherche se fait de la commande la plus récente à la plus ancienne.

Lors de l’écriture d’une commande, vous pouvez insérer le premier mot de la précédente commande exécutée. Pour cela :

  • A-. : rappelle le premier mot de la précédente commande.

Manipuler le texte

Il est possible de supprimer un caractère avant ou après le curseur avec les raccourcis :

  • C-d : supprimer le caractère qui se trouve après le curseur ;
  • C-h : supprimer le caractère qui se trouve avant le curseur.

Ces fonctions sont également disponibles pour supprimer les mots et les lignes :

  • A-d : supprimer le mot qui se trouve après le curseur ;
  • C-w : supprimer le mot qui se trouve avant le curseur ;
  • C-k : supprimer du curseur jusqu’à la fin de la commande ;
  • C-u : supprimer du curseur jusqu’au début de la commande.

À noter que les mots ou lignes supprimés avec les commandes précédentes se retrouveront dans le presse‐papiers de Bash. Ce presse‐papiers est différent de celui du bureau, avec lequel il ne communique pas. Il offre toutefois la fonction de Kill‐ring, comme Emacs : lorsque vous remplissez le presse‐papiers, ce dernier n’oublie pas ce qu’il contient. Tout est gardé en mémoire et vous pouvez choisir ce que vous voulez « coller ».

Les raccourcis du presse‐papiers de Bash sont :

  • C-y : « coller » le dernier élément présent dans le presse‐papiers ;
  • A-y : après avoir utilisé C-y, intervertit le texte collé avec ce qui se trouvait précédemment dans le presse‐papiers.

Bash permet également d’intervertir deux lettres ou deux mots :

  • C-t : intervertit la lettre sous le curseur avec celle qui la précède ;
  • A-t : pareil, avec deux mots.

Enfin, il est possible de transformer la casse d’un mot :

  • A-u : convertit un mot en majuscules ;
  • A-l : convertit un mot en minuscules ;
  • A-c : capitalise un mot.

Auto‐complétion

Faire appel à l’auto‐complétion de Bash peut se faire avec le raccourci :

  • C-i : équivalant à la touche Tab.

Annuler

Il existe deux raccourcis pour annuler :

  • C-/ : annule la dernière action ;
  • C-g : quitte une recherche dans l’historique.

Gérer les processus

Quand un processus est lancé en premier plan depuis Bash, les raccourcis suivants sont disponibles :

  • C-c : terminer le processus. Ne vous inquiétez pas, il ne souffrira pas ;
  • C-Z : mettre en pause le processus. Peut être relancé en premier plan ou en arrière‐plan avec les commandes fg ou bg. La commande jobs liste les processus en pause.

À noter que lors de l’écriture d’une commande, C-c faite sauter le curseur sur une nouvelle ligne de commande vide.

Nettoyer et gérer l’affichage

Il est possible de manipuler ce que montre Bash à l’écran avec ces trois raccourcis :

  • C-l : nettoie l’écran, pour ne montrer qu’une invite de commande vide ; similaire à la commande clear ;
  • C-s : stoppe l’affichage ; très utile quand un programme très verbeux s’exécute ;
  • C-q : reprend l’affichage stoppé avec C-s.

End Of File

Il existe un raccourci pour envoyer le caractère EOF (End Of File) : C-d.
Si l’on envoie ce caractère sur une ligne de commande, cela équivaut à la commande exit.

Bonus : Termux

En bonus, j’en profite pour présenter un émulateur de terminal pour Android : Termux. Assez complet, léger, intégrant Bash. Je vous invite à aller voir le site Web.

  • # Y'a les mauvaises touches au bord du clavier et les bonnes touches au bord du clavier

    Posté par  . Évalué à 5. Dernière modification le 18 septembre 2017 à 13:11.

    "TAB", "Flèche gauche","Retour charriot", etc. Ces touches étant aux bords du clavier, cela demande quelques mouvements qui pourraient être évités.
    […]
    Les touches alt et control sont elles aussi aux bords du clavier, mais elles sont utilisables facilement sans trop bouger ou tordre ses mains.

    Pour le «TAB» et «Ctrl» je ne suis pas du tout d'accord.

    • Tab est très accessible ne demandant qu'une légère extension du petit doigt vers l'extérieur.
    • Ctrl est lui vraiment pas accessible car placé très bas et est souvent plus petit et plus loin que le Tab.

    Alt pouvant souvent être atteint par le pouce replié il ne souffre donc pas du souci du Ctrl. Le pavé directionnel sur un clavier de portable est souvent tout aussi inaccessible que le Ctrl.

    NB : Si tu en es à optimiser ta frappe par des raccourcis clavier es-tu passé au Bépo qui te fera gagner bien plus de ce côté ?

    PS : Sinon merci pour cet article très intéressant ;-)

    • [^] # Re: Y'a les mauvaises touches au bord du clavier et les bonnes touches au bord du clavier

      Posté par  . Évalué à 2.

      Si tu en es à optimiser ta frappe par des raccourcis clavier es-tu passé au Bépo qui te fera gagner bien plus de ce côté ?

      Yep. Sur un clavier TypeMatrix.

      Mais je suis en train de construire un clavier mécanique matriciel de 5 x 13 avec:
      - Une barre d'espace plus étroite (1 x 2)
      - Les touches "Entré" et "Retour arrière" de part et d'autre de la barre d'espace
      - Les touches "Ctrl" de part et d'autre des touches "Entré" et "Retour arrière"
      - Les touches "Alt" de part et d'autre des touches "Ctrl"
      - Pas de touche dédié à Caps-Lock ( [Fx] + [shift])
      - Pas de touches dédiés à F1, F2, etc ( [Fx] + [1], [Fx] + [2])
      - Les touches "Escape" et "Tab" plus bas.

      Ce qui donnerait, pour la dernière ligne du clavier:
      [Super] [Alt] [Ctrl] [Entré] [barre d'espace] [Retour arrière] [Ctrl] [AltGr] [←] [↑] [↓] [→]

  • # Readline

    Posté par  (site web personnel) . Évalué à 10.

    À noter que ce ne sont pas vraiment des raccourcis claviers de bash mais de readline et donc utilisable dans plein d'outils.

    D'autre part, ces raccourcis sont configurables et il existe un mode vi, ce qui est encore plus pratique (certes echap est au coin du clavier mais ça évite les combinaisons acrobatiques et puis avec un peu de bricolage, on peut la remplacer par une pédale).

    • [^] # Re: Readline

      Posté par  (site web personnel, Mastodon) . Évalué à 9.

      Pourquoi du bricolage? C'est un périphérique tout à fait standard et pas très cher:

      http://www.dx.com/p/fs1-1-usb-foot-switch-keyboard-mouse-control-foot-pedal-black-190cm-cable-198679#.Wb_ID3WslFQ

      Il y a même une version pour les gens qui veulent utiliser leurs trois jambes:

      http://www.dx.com/p/usb-triple-action-foot-switch-keyboard-control-foot-pedal-56508#.Wb_IFHWslFQ

      • [^] # Re: Readline

        Posté par  . Évalué à 1. Dernière modification le 20 septembre 2017 à 09:22.

        J'aurais plutôt tendance à faire confiance à Kinesis pour la qualité du matos, sa durée de vie et les drivers.

        • [^] # pédalier clavier usb maison

          Posté par  . Évalué à 1. Dernière modification le 24 octobre 2017 à 04:38.

          Pourtant avec deux trois notions de bidouille et d'électronique on peut faire la même chose soi en pure construction (par le biais ou non d'un makerspace/Fablab) soi en hackant un pédalier de guitare.
          Et j'ai plus confiance à un microcontroleur de type Atmel AVR et quelques boutons, voire potentiomètres ou résistances variables pour des pédales analogiques, pour dix fois moins cher en composants standards et facilement réparables plutôt qu'à Kinesis ou un noname chinois qui ne propose ni datasheet ni code source et certainement une configuration bien plus limitée que les possibilités du controleur.

      • [^] # Re: Readline

        Posté par  . Évalué à 1.

        Génial ça ! Je ne connaissais pas. Les 3 pédales c'est aussi pratique pour les pianistes :). couplé à un clavier midi maître ça fait tout ce qu'il faut.

        Il y a aussi dans le genre les pédales fait pour les simulateurs de vols qui envoient des coordonnées analogiques, je n'en ai jamais essayé, en périph usb, mais normalement, il y a au moins gauche opposé à droit (pour l'aileron, et poussée en avant pour les freins, donc, on peut imaginer de l'appliquer à la bar de défilement, sans bouger la main ou souris de l’emplacement où elle se situe.

        Du coup j'imagine aussi un pédalier (pas sur que ça s'appelle comme ça, comme un clavier, mais pour les pieds) pour taper du texte quand on a pas de mains (pour un pingouin ou manchot donc par exemple).

    • [^] # Re: Readline

      Posté par  . Évalué à 5.

      En effet, voici par exemple mon fichier ~/.inputrc

      $include  /etc/inputrc                                                          
      $if mode=emacs                                                                  
      "\e[1;3C": end-of-line                                                          
      "\e[1;3D": beginning-of-line                                                    
      "\e[1;5P" dump-functions                                                        
      $endif                                                                          
      
      $if Bash                                                                        
         # Quote the current or previous word                                        
         "\C-xq": "\eb\"\ef\""
      $endif
      

      Les 2 premières commandes me permettent d'utiliser A-Left et A-Right pour me déplacer en début et fin de ligne (équivalent à C-a et C-e)

      La troisième commande permet d'utiliser C-F1 pour afficher toutes les fonctions de readline avec leur raccourcis clavier. Sur mon terminal, "\e[1;5P" correspond à C-F1 mais cela peut varier (voir ci dessous) En pratique, ce raccourci est équivalent à la commande bash bind -P sauf que C-F1 peut être utilisé sans casser la commande en cours d'écriture.

      La quatrième commande est en fait une macro qui transforme C-x q en A-b (backward-word) " A-e (forward-word) " . En pratique cela transforme le mot actuel en "chaîne"

      Pour trouver la séquence correspondant à une combinaison de touches j'utilise généralement la commande cat sans arguments.

      (bash) cat
      ^[[1;3Q^[[1;3R^C
      

      Dans cet exemple, j'ai utilisé les raccourcis A-F2, A-F3 et finalement C-c pour quitter cat.

      ^[ est le caractère d’échappement qui doit devenir \e dans votre .inputrc

      Par exemple, je pourrais associer A-F2 à la macro "Salut" dans mon .inputrc

          "\e[1;3Q":  "Salut"
      

      ou alors depuis un prompt bash avec la commande bind:

      (bash) bind '"\e[1;3Q": "Salut"'
      

      Il est aussi possible d'associer des commandes bash à des raccourcis clavier. Par exemple pour que C-x l transforme la ligne en cours d'édition en minuscules il suffit d'ajouter les lignes suivantes à votre .bashrc:

      lowercase-line () {
         READLINE_LINE="$(echo -n "$READLINE_LINE" | tr A-Z a-z)" ; 
      }
      bind -x '"\C-xl": lowercase-line'
      
    • [^] # Re: Readline

      Posté par  . Évalué à 1.

      Je ne sais pas si c'est lié à readline, VTE ou une autre couche dans X11, mais en général sur les terminaux (au moins VTE), on peut couper/copier/coller avec ctrl+shift+X/C/V, ça permet de ne pas avoir de conflit avec ctrl-C et de garder le tampon du surlignement de souris/bouton milieu pour d'autres données :).

  • # Raccourcis bash = raccourcis emacs ou vi

    Posté par  . Évalué à 4. Dernière modification le 18 septembre 2017 à 13:24.

    Les raccourcis bash sont par défaut réglés sur des raccourcis façon emacs, d'où la touche Ctrl à tout va. En cas de troubles troubles musculo-squelettiques, autrement dit de douleurs aux doigts ou poignets, passez plutôt aux binding type vi, ça évite de forcer sur l'auriculaire gauche.

    set -o vi
    

    L'autre solution classique (que j'utilise) est de remapper votre clavier pour inverser maj lock et control, voire supprimer maj lock. Comment faire ça varie suivant l'OS et le modèle de clavier, mais une horde de gens sur les internets a déjà fait une tonne de tutos là dessus. A noter qu'il y a aussi des gens qui utilisent des pédaliers pour maj et ctrl.

    En tous cas, merci pour le guide parce les guides en français ne sont pas légion.

  • # Je ne m'étais jamais renseigné

    Posté par  . Évalué à 2. Dernière modification le 18 septembre 2017 à 13:24.

    Bien que j'utilise mon terminal quotidiennement, je ne m'étais jamais trop renseigné sur les raccourcis possibles. Je connaissais quelques raccourcis présentés ici, pas plus. Ton post a au moins pour mérite de m'y faire penser. :)

    PS: j'espère que ces raccourcis sont également disponibles sur d'autres interpréteurs, Bash est quand même peu répandu sur mes machines.

  • # On est en 2017

    Posté par  . Évalué à -3.

    Les navigateurs savent très bien mettre en page si la ligne déborde de l'écran…

    • [^] # Re: On est en 2017

      Posté par  . Évalué à 0.

      IT'S THE CURRENT YEAR !!1one

      "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: On est en 2017

      Posté par  . Évalué à 5.

      Entièrement d'accord mais pour sa défense, le markdown de LinuxFr.org ne gère pas le retour à la ligne comme les implémentations les plus répandues. Normalement, si on fait un retour la ligne, il n'est pas prix en compte (à moins que la ligne finisse par deux espaces), ici, ça fait un retour à ligne. Cela vient d'utilisateur qui se sont plains du fonctionnement classique de Markdown lorsque ce dernier a été mis en place ici (personnellement, je préfère le comportement classique).

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Zsh

    Posté par  . Évalué à 4.

    Aujourd'hui je vais parler des raccourcis clavier sur Bash

    Ces raccourcis concernent également Zsh.

    Poster une information ne signifie pas nécessairement adhésion

  • # Et l'indispensable C-o (ou Ctrl+o)

    Posté par  . Évalué à 3.

    C-o permet de valider une commande (comme Enter ou C-m) puis d'afficher la commande suivante dans l'historique.
    Ça s'utilise donc en combinaison avec C-r ou C-p afin de refaire une série de commandes déjà exécutées auparavant.

    • [^] # Re: Et l'indispensable C-o (ou Ctrl+o)

      Posté par  . Évalué à 5.

      Il y a aussi Alt-# qui commente la commande que tu es en train de taper et passe à la ligne suivante. La commande est alors stockée dans l'historique (précédée par #) sans être exécutée.

      *splash!*

  • # merci

    Posté par  . Évalué à 4.

    merci pour ce rappel, très intéressent.

    perso pour l'historique j'ai un fichier .inputrc avec

    "\e[A": history-search-backward
    "\e[B": history-search-forward
    set show-all-if-ambiguous on
    set completion-ignore-case on

    ça me permet de taper le début de la commande que je veux, puis avec les flèches haut/bas de trouver la commande + les args voulut.
    donc de filtrer.

  • # Dernier argument

    Posté par  . Évalué à 7. Dernière modification le 18 septembre 2017 à 18:47.

    Un autre raccourci que j'utilise quotidiennement: Escape-_ rappelle le dernier argument tapé lors de la dernière commande.

    Par exemple:
    $ ls dossier
    $ cd Escape-_

    • [^] # Re: Dernier argument

      Posté par  (site web personnel) . Évalué à 3.

      Il y a !$ pour le dernier argument de la précédente ligne de commande, je crois que j'utilise plus souvent ce raccourci que la touche tab.

      !:n pour récupérer le nième argument.

      ^ foo ^ bar (sans les espaces) pour remplacer foo par bar dans la précédente ligne de commande

      • [^] # Re: Dernier argument

        Posté par  (Mastodon) . Évalué à 5. Dernière modification le 19 septembre 2017 à 07:46.

        Les chapeaux ne permettent que de remplacer la première occurence. Même si c'est plus long à taper je lui préfère souvent !!:s/foo/bar et !!:gs/foo/bar (le g pour remplacer toutes les occurences) pour un meilleur contrôle.

        À utiliser avec précaution cela-dit

        Jami: beabb2b063da0a2f0a2acaddcd9cc1421245d5de

      • [^] # Re: Dernier argument

        Posté par  (Mastodon) . Évalué à 1. Dernière modification le 19 septembre 2017 à 08:00.

        Et accessoirement le Escape-_ reste utile si la même chaine de caractère est présente à plusieurs endroits et que tu changes un début ou fin de ligne.

        Jami: beabb2b063da0a2f0a2acaddcd9cc1421245d5de

  • # C-l

    Posté par  . Évalué à 2.

    C-l: Nettoie l'écran, pour ne montrer qu'une invite de commande vide. Similaire à la commande clear.

    Avec C-l, c'est l'écran qui est nettoyé, pas la ligne de commande. Si quelque chose a déjà été saisi, en faisant C-l, l'écran est effacé, mais pas ce qui a déjà été saisi.

    Concrètement, il me semble que ce sont des retours à la ligne qui sont ajoutées, à peu près autant que la hauteur de la console.

    • [^] # Re: C-l

      Posté par  . Évalué à 1.

      Personnellement, je n'utilise jamais clear, mais uniquement C-l, parce que :

      • c'est plus court (2 touches vs. 6 touches),
      • C-l peut être utilisé à n'importe quel moment, même quand la ligne est déjà commencée, contrairement à clear.
      • [^] # Re: C-l

        Posté par  . Évalué à 3.

        L'avantage de la commande clear est quand qu'on peut la mettre dans un script…

  • # Titre de journal mal choisi : emacs vs viistes

    Posté par  . Évalué à 0.

    Ton journal nous décrit comment se servir de bash en mode emacs. Qui est le mode par défaut (tiens tiens on se demande pourquoi :-) ?)

    Mais on peut aussi se servir de bash en mode vi.
    Avec la commande :

    $ set -o vi

    Et ensuite on se sert des commandes "vi" pour effectuer le rappel de commande etc..

    Dommage que ce rappel n'ait pas été fait, il y a un parti pris pour emacs que je trouve regrettable pour la liberté de choix :-)

  • # ASCII

    Posté par  . Évalué à 10. Dernière modification le 20 septembre 2017 à 17:32.

    Pour exécuter une commande que vous venez de taper, pressez: C-m: Retour charriot

    Il existe un raccourci pour envoyer le caractère EOF (End Of File): C-d.

    Il est possible de supprimer un caractère avant ou après le curseur avec les raccourcis:
    C-d: Supprimer le caractère qui se trouve après le curseur

    On note que ça fait double-emploi…

    Faire appel à l'auto-complétion de Bash peut se faire avec le raccourci: C-i: Équivalant à la touche TAB

    Il est possible de manipuler ce que montre Bash à l'écran avec ces trois raccourcis:

    C-l: Nettoie l'écran, pour ne montrer qu'une invite de commande vide. Similaire à la commande clear.
    C-s: Stop l'affichage. Très utile quand un programme très verbeux s'exécute.
    C-q Reprend l'affichage stoppé avec C-s.

    Ça vaut le coup de rappeler que tous les « raccourcis » ci-dessus, même si certains d'entre eux restent interceptés par le shell, ne sont pas des combinaisons choisies arbitrairement par lui, mais font partie à la base du code ASCII.

    Il est utile de rappeler également que la touche « Ctrl » n'est pas une simple meta-key comme Alt, mais sert en principe à émettre les codes de contrôle de la table ASCII (soit les codes 0 à 31 en début de table), codes qui étaient le seul moyen de piloter les appareils et terminaux lorsqu'il étaient reliés à leur hôte à l'aide d'une ligne série. Donc saisir Ctrl+A, Ctrl+B, Ctrl+C… jusqu'à Ctrl+Z, permet d'émettre les codes 1 à 26.

    C'est aussi pour cela que Escape est placé juste après cette gamme, sur le code 27. ESC étant justement le code permettant de s'échapper du flux ASCII standard et d'annoncer une séquence hors-protocole, ce qui permet de passer la main à n'importe quel standard.

    Et c'est pour cela encore qu'on trouve la touche sur pratiquement tous les ordinateurs et terminaux depuis les années 1960. Elle est donc réellement censée émettre un caractère à chaque fois qu'on la combine avec une lettre, et pas n'importe lequel : le code de 1 à 26, soit 0x01 à 0x1a en hexadécimal. Donc, on doit pouvoir capter la saisie de ce caractère avec un simple fgetc() ou équivalent (sauf s'il est intercepté entre les deux par une sous-fonction du shell ou autre). Essayez avec stty -icanon ; od -tx1 -vw1, par exemple. C'est totalement différent de « Alt » par exemple, qui à ma connaissance est spécifique à l'IBM PC (même si d'autres machines ont des meta-key similaires depuis longtemps) et qui n'est pas du tout tenue d'émettre quoi que ce soit (ce qui rendait d'ailleurs son exploitation compliqué quand on écrivait ses premiers programmes en BASIC).

    Du coup :
    - Ctrl+I : Neuvième lettre, 09 ou 0x09 → « HT Horizontal tabulation », donc le code ASCII d'une tabulation. C'est donc normal qu'elles émettent le même code. Essayez avec la commande ci-dessus pour vous en convaincre…

    • Ctrl+M : Treizième lettre, 13 ou 0x0d → « CR Carriage Return », code de retour en début de ligne.

    • Ctrl+L : Douzième lettre, 12 ou 0x0c → « FF Form Feed », soit littéralement : « alimentation en papier (ou même "en formulaire") ». C'est en principe à l'usage des imprimantes et cela sert à leur commander d'aspirer une feuille et de présenter le haut de la page devant la tête d'impression pour commencer à écrire dessus. Et évidemment, s'il y a déjà une feuille en cours de traitement, celle-ci est éjectée (laissant donc le reste vide) pour avancer directement à la suivante, ce qui correspond donc à un saut de page. Et sur les terminaux dont le système d'impression a été remplacé par un écran, ça revient donc à effacer la page et à replacer le curseur en haut à gauche.

    Ça marche normalement sur toute imprimante qui se respecte, mais à condition que ce soit une matricielle (continue ou feuille à feuille) ou à la limite une jet d'encre, qui peuvent encore fonctionner en mode texte même si les pilotes le font de moins en moins, mais pas les laser dont le mode de fonctionnement (dépôt de poudre sur la feuille puis passage au four) leur impose de traiter toute la feuille en une seule opération, sauf si elles peuvent bufferiser le texte jusqu'au moment où il faut éjecter la page, soit une page pleine ou justement un code 12 «FF».

    Côté écrans, ça marchait sur de nombreux huit bits, et notamment sur tout ce qui était Vidéotex, donc sur les Minitel et sur les 8 bits Thomson (MO6, TO8, etc.). C'était aussi plus pratique qu'un « CLS » pour avoir un écran vraiment propre et éviter le « OK » associé à la commande. Évidemment, l'une des exceptions est justement les DEC ANSI :-( Standard suivi par la console des PC, que ce soit DOS ou les consoles virtuelles de Linux, et par les XTerm. Par contre, le shell a conservé cette fonctionnalité et l'émule proprement (même si c'est lui qui le fait) et c'est pour cela qu'il en profite pour ré-afficher l'invite de commande.

    • Ctrl+S Ctrl+Q : Ce sont en fait directement les codes de XON et XOFF qui sont les codes dédiés au contrôle de flux lorsque la ligne n'est pas équipé de signaux physique pour le faire (comme RTS et CTS sur RS/232). Ce n'était pas directement ASCII mais presque : la page wikipédia indique que ça a été introduit par le Teletype Model 33 en 1963, c'est-à-dire l'année de publication de la première version du standard ASCII, et ces codes sont mappés sur DC1 et DC3, sachant qu'il y a quatre code DC1 à DC4 dans ASCII et que DC signifie « Device Control ». Ce sont donc des codes génériques permettant de piloter des fonctionnalités spécifiques à chaque appareil.

    Là encore, les terminaux et les premiers ordinateurs personnels fonctionnaient uniquement en mode texte, donc interrompre le flux en provenance du serveur permettait de suspendre le défilement à l'écran (c'était aussi pratique pour les imprimantes qui n'arrivaient pas forcément à suivre) et Linux mappe ça en principe, sur ses consoles virtuelles (pas sous X-Window) avec la touche Pause du PC et sa LED associée, touche qui sert initialement à ça même sur PC (apparu en 1981, pas dans les années 60). Bon, évidemment, je viens d'essayer avec une Fedora 25. Ctrl+S Ctrl-Q fonctionnent toujours mais plus la touche Pause. Bon.

    • Ctrl+D enfin, correspond à « EOT End of Transmission », ce qui est bien pratique pour dire « j'ai fini de parler », surtout sur les lignes half duplex. Du coup, sur un terminal, ça sert surtout à envoyer ce que l'on vient de saisir SANS appuyer sur Return et donc embarquer un retour chariot avec le reste. Ce n'est pas, à la base, directement un raccourci pour « exit », mais saisir Ctrl+D seul permet d'envoyer une charge utile de zéro caractère, ce qui est en soi reconnu par read() comme le signal d'une fin de connexion et de la refermeture du canal. Cela va donc provoquer un EOF exactement comme la fin d'un fichier qui aurait été atteinte si ce fichier avait été redirigé vers l'entrée standard du processus avec « < ». Le shell se termine donc normalement (en le détectant) mais ça fonctionne en fait avec tout processus à l'avant plan et fait pour gérer normalement l'entrée standard. Essayez avec cat par exemple.
    • [^] # Re: ASCII

      Posté par  . Évalué à 5.

      Dans certains cas, il peut être intéressant de pouvoir passer un caractère de contrôle à une commande bash. Une solution consiste à utiliser une string autorisant les séquence d’échappement. Par exemple, pour insérer le caractère #1

      (bash) echo -n $'===\001===' | hexdump -C
      00000000  3d 3d 3d 01 3d 3d 3d                              |===.===|
      00000007    
      

      Une alternative consiste à utiliser CTRL-V suivit du caractère de contrôle désiré. Pour insérer le charactère #1 (A), on utilisera donc CTRL-V CTRL-A. La commande doit alors ressembler à ceci:

      # dans la commande suivante le ^A est obtenu avec CTRL-V CTRL-A
      (bash) echo -n $'===^A===' | hexdump -C
      00000000  3d 3d 3d 01 3d 3d 3d                              |===.===|
      00000007    
      

      CTRL-V permet également d'insérer ESC ([) , tab, … par exemple pour emettre des séquences VT100

      # dans la ligne ci-dessous, chaque ^[ est obtenu avec CTRL-V ESC 
      # Attention: ^[[ est donc obtenu avec CTRL-V ESC [ 
      (bash) echo "j'aime le ^[[31mrouge^[[0m et le ^[[34mbleu^[[0m."
      j'aime le rouge et le bleu.
      

      CTRL-V permet aussi d'obtenir la séquence de caractère émise par les touches spéciale telles que Fn, Insert, Left, Right, …

      # dans la ligne ci-dessous, le ^[OS est obtenu avec CTRL-V F4 
      (bash)  bind '"^[OS": "salut"'
      # La touche F4 produit maintenant 'salut'  
      

      Pour les utilisateurs d'Emacs, le raccourcis clavier CTRL-Q permet de faire la même chose que CTRL-V sous bash.

      • [^] # Re: ASCII

        Posté par  . Évalué à 8. Dernière modification le 21 septembre 2017 à 09:47.

        Tout-à-fait :) Et cela a même deux autres avantages supplémentaires :

        — Ça permet de saisir une tabulation dans une chaîne, utile par exemple pour les regexps filtrant les blancs et ne disposant pas de classes dédiés : grep "[^V^I ]\+ (ou ^V^I correspond à la saisie de Ctrl+V Ctrl+I et est traduit à l'écran par une belle tabulation (un blanc de plusieurs caractères), suivi d'un(e) vrai(e) espace ;
        – En faisant Ctrl+V Ctrl+O; ça permet de récupérer le jeu de caractères normal quand on a fait un cat d'un fichier binaire à l'écran et que l'affichage est sans dessus dessous. Bien sûr, il existe reset mais ça permet d'éviter de lancer une commande rien que pour ça et également de s'en sortir quand celle-ci n'est pas disponible (et en plus, c'est plus rapide).

        Là encore, pour l'anecdote, Ctrl+N et Ctrl+O correspondent aux codes 14 et 15 (0x0e et 0x0ef), soit respectivement « SO: Shift Out » et « SI : Shift In ». Et ces codes servaient à décaler le ruban d'impression, comme sur les machines à écrire, pour changer de couleur.

        Sur les terminaux à écran, c'est devenu « C0 » et » C1 » (Zero et Un) mais c'est sympa parce que les glyphes correspondent : SO↔C0 et SI↔C1.

        Au passage, C1 est censé contenir des caractères spéciaux et notamment graphiques (principalement pour faire des bordures), donc le Vidéotex a eu la bonne idée d'utiliser les mêmes codes pour passer du jeu alphanumérique au semi-graphique (les gros pixels sur le Minitel) et réciproquement. Et Ctrl+V servait aussi à introduire un caractère, mais qui servait à accentuer la minuscule qui suivait (ce qui donnait des séquences de 3 caractères pour les caractères spéciaux contre 1 en temps normal, un peu comme en UTF-8).

        Et par conséquent, pour les masochistes, Ctrl+V Ctrl+N permet donc de faire volontairement foirer son terminal. :)

        Bon, ÉVIDEMMENT, ça ne marche plus non plus sous gnome-shell, que ce soit avec le Xterm ou le gnome-terminal (je suppose qu'ils en ont profité pour empêcher également les terminaux de passer accidentellement dans l'autre jeu) mais l'insertion d'une tabulation fonctionne toujours et le tout est toujours valables avec les consoles virtuelles Linux en mode texte.

  • # Merci

    Posté par  . Évalué à 3.

    Merci, je ne les connaissais pas tous.

    de mon côté j'utilise énormément la séquence [Echap][_], qui permet rappeler le dernier argument de la commande précédente, et ça remonte dans les commandes quand on fait cette séquence plusieurs fois.

    ++

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.