"Faux" espaces avec Ubuntu

Depuis que j’utilise Ubuntu, j’ai un problème assez embêtant. De temps en temps, je tape un espace, et ça fait des choses comme ça :

***lucas@blop:~$ ls | grep a bash:  grep: command not found

Plutôt étrange, non ? Après des mois où j’ai simplement accepté ce petit désagrément, j’ai pris le taureau par les cornes et j’ai essayé de comprendre.

Le caractère qui s’affiche n’est pas un espace (code ascii 0x20) mais un espace insécable (code ascii 0xc2a0). Oui, mais pourquoi s’affiche-t-il sous Ubuntu, et pas sous Debian, par exemple ? En fait, le clavier “français” par défaut sous Ubuntu est fr-latin9, alors que sous Debian, on utilise généralement fr. Et si on regarde /etc/X11/xkb/symbols/fr, on comprend vite le problème : fr-latin9 complète fr en rajoutant plein de caractères accessibles via la touche ALTGR. Par exemple, Ë s’obtient avec ALTGR + Maj + d. Le comportement de la barre d’espace change également, avec l’envoi d’un Nobreakspace lorsqu’on fait ALTGR + espace.

En tapant “ls | grep a” je relâche parfois ALTGR après avoir appuyé sur espace, d’où l’apparition de ce caractère.

Solutions : il y en a plusieurs.

  • Utiliser fr à la place de fr-latin9 en supprimant Option “XkbVariant” “latin9” dans /etc/X11/xorg.conf (ne pas oublier de redémarrer X ensuite, évidememment).
  • Utiliser xmodmap pour modifier le comportement de la barre d’espace avec la commande xmodmap -e “keycode 65 = space space space NoSymbol space” ou simplement xmodmap -e “keycode 65 = space”. Pour que le changement soit durable, on peut ajouter keycode 65 = space à son fichier .xmodmap.
  • Apprendre à taper : oui, mais c’est dur, car on ne voit pas la différence entre un espace insécable et un espace. Certains éditeurs permettent d’utiliser des mappings pour remplacer certains caractères. Dans vim, par exemple, on peut utiliser imap <espace insécable ici> X. Ainsi, les espaces insécables sont remplacés par des “X”, et plus facilement détectés.

La liste des combinaisons de touches disponibles est visible dans le fichier /etc/X11/xkb/symbols/fr. Je la recopie ici :

//  ____                                     _________ _____________ _______ // | S A| S = Shift,  A = AltGr + Shift     | Imprime | Arrêt défil | Pause | // | s a| s = normal, a = AltGr             |  Exec   |             | Halte | //  ¯¯¯¯                                     ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ //  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______ // | ½ "| 1 ·| 2 É| 3 ,| 4 '| 5 "| 6 || 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + °| | | a â| z å| e ¤| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ê|   | W  | X  | C  | V  | B  | N  | ?  | .  | /  | §  |     ^     | // | |   | 

11 thoughts on “"Faux" espaces avec Ubuntu

  1. Super, merci pour l’info. Ça m’est arrivé plusieurs fois d’avoir cette erreur, sans trop savoir pourquoi, même sous debian, car j’utilise toujours le keymap fr-latin1 qui est beaucoup mieux que le fr dont les combinaisons de touches avec alt-gr sont juste copiés à la sauvette depuis le keymap us. Exemple, en "fr" les caractères "«" et "»", ne sont pas obtenus avec des touches l’une a coté de l’autre en azerty (alors qu’elles sont a coté en qwerty (z et x). Le keymap fr-latin1 les mets plus logiquement sur "w" et "x" qui sont a coté. Et puis on peut aussi taper sur la touche "²" ce qui nous donne un beau "œ" qui fait chaud au cœur ;-)

  2. Alors la je suis sur le cul … Vois tu, j’avais également vu ce problème, mais j’ai trouvé le pourquoi du comment … au pif …

    Ton explication m’a éclairé sur le pourquoi, et le comment …

    Dans les solutions il y a également ls |grep a qui marche ;) c’est ce que j’ai pris l’habitude de faire … pas d’espaces après le pipe ;)

  3. En fait, le problème, c’est que je code beaucoup en Ruby, et qu’en Ruby, on a souvent besoin d’écrire qqchose comme :

    [ 1, 2 ].each { |i| puts i }

    Ce qui fait des tonnes d’endroits où on peut se planter …

  4. Merci pour cette astuce.

    Puisque tu as l’air de t’y connaitre, tu veux pas nous faire un article sur le clavier latin9 et nous parler des combinaisons de touche disponibles. COmment faire un Ç, un «», un "o e" lié etc.

  5. gaerun: it’s not a bug, it’s a feature.

    Kagou: regarde dans /etc/X11/xkb/symbols/fr, tu as un dessin de clavier avec tous les caractères disponibles en fr-latin9. Allez, je le recopie ici :

    //  ____                                     _________ _____________ _______ // | S A| S = Shift,  A = AltGr + Shift     | Imprime | Arrêt défil | Pause | // | s a| s = normal, a = AltGr             |  Exec   |             | Halte | //  ¯¯¯¯                                     ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ //  ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______ // | ½ "| 1 ·| 2 É| 3 ,| 4 '| 5 "| 6 || 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + °| < --   | // | ¼ "| & '| é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }|       | //  ======================================================================== // | |<-  | A ä| Z Å| E ¢| R Ç| T Þ| Y Ý| U ü| I ï| O ö| P '| " `| $ ë|   , | // |  ->| | a â| z å| e ¤| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ê| < -' | //  ===================================================================¬    | // |       | Q Ä| S Ø| D Ë| F ª| G Æ| H Ð| J Ü| K Ï| L Ö| M º| % Ù| µ ¥|    | // | MAJ   | q Â| s ø| d Ê| f ±| g æ| h ð| j Û| k Î| l Ô| m ¹| ù ²| * ³|    | //  ======================================================================== // | ^   | >  | W  | X  | C  | V  | B  | N  | ?  | .  | /  | §  |     ^     | // | |   | < || w «| x »| c ©| v ®| b ß| n ¬| , ¿| ; ×| : ÷| ! ¡|     |     | //  ======================================================================== // |      |      |      |                       |       |      |     |      | // | Ctrl | Meta | Alt  | Space    Nobreakspace | AltGr | Multi|Menu | Ctrl | //  ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯ 
  6. gaerun: fituralacon: ça dépend™ : moi dans les mails, j’ai souvent envie d’en mettre, pour ne pas que emacs me coupe les lignes à des endroits désagréables. Mais effectivement, ça ne sert à rien dans le terminal.

    Moralité: utiliser une config clavier "rustique" dans le terminal (puisque «, ou ¼, ou ¶, æ n’y sont pas d’une grande utilité), et taper ses mails dans un un Bon Logiciel.

    Et alors tu trouveras la voie.

  7. ah, oui, au fait :

    ;;——————————————–
    ;; l’espace insécable

    (defun etk-non-breaking-space () (interactive)
    (insert "\240")
    (highlight-regexp "\240" ‘hi-pink)) ;; 240: espace insécable (cf man latin1)

    (global-set-key (kbd "C-< SPC") ‘etk-non-breaking-space)

Comments are closed.