1 points par GN⁺ 22 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Le bug de l’éditeur web de Medium, où seule la majuscule polonaise Ś ne pouvait pas être saisie, résultait d’un enchevêtrement entre habitudes de saisie, contexte d’importation des PC, réflexes liés au raccourci d’enregistrement et façon dont Windows traite Right Alt
  • Le polonais utilise l’alphabet latin enrichi de 9 lettres diacritées, et dans les premiers environnements PC, au lieu d’un clavier dédié, les combinaisons Alt+lettre latine du « programmer’s layout » se sont imposées comme standard de fait
  • Comme Windows mappe en interne Right Alt comme Ctrl+Alt, la combinaison Right Alt+S utilisée pour saisir Ś apparaissait du point de vue du système comme Ctrl+Alt+S
  • Medium interceptait Ctrl+S pour empêcher l’ouverture de la boîte de dialogue d’enregistrement du navigateur en appelant preventDefault(), mais sans vérifier la présence d’Alt, ce qui bloquait la saisie du caractère elle-même
  • La correction a consisté en une petite modification ajoutant !e.altKey à la condition de blocage de Ctrl+S, montrant comment des conventions informatiques centrées sur les 26 lettres de l’anglais peuvent créer des exceptions et des frictions pour les utilisateurs d’autres langues

Le Ś disparu sur Medium

  • Un utilisateur a signalé qu’en commençant à écrire un texte en polonais sur Medium, toutes les autres lettres pouvaient être saisies sauf Ś
  • Medium ne traitait aucune langue de manière particulière, et il semblait donc étrange au départ que, parmi les 32 lettres du polonais, une seule pose problème
  • La cause n’était pas un défaut d’une fonction isolée, mais le résultat d’un chevauchement entre méthodes de saisie et traitement par le système d’exploitation accumulé sur plusieurs décennies

Le polonais et ses lettres supplémentaires

  • Le polonais est la langue slave la plus parlée après le russe, devant l’ukrainien
  • Contrairement au russe et à l’ukrainien, le polonais repose sur l’alphabet anglais/latin en y ajoutant quelques lettres
  • À l’origine, les mots polonais ne contiennent pas Q, V ni X, mais ces lettres sont conservées pour le latin et les emprunts
  • À la place, la langue utilise 9 lettres diacritées fondées sur l’alphabet latin
  • Au début du XXe siècle, les machines à écrire ont dû intégrer ces lettres supplémentaires ; certaines ont obtenu leur propre touche, tandis que les autres partageaient les touches numériques
    • Les majuscules pouvaient aussi être « simulées » en tapant d’abord la lettre latine, puis en revenant en arrière avec retour arrière pour y superposer l’accent
    • Pour faire de la place aux lettres supplémentaires, des signes de ponctuation comme le point-virgule ou les parenthèses étaient parfois sacrifiés

L’environnement PC de la Pologne communiste et le programmer’s layout

  • Dans les années 1980, les débuts de l’informatique personnelle en Pologne se faisaient sous la contrainte du faible revenu disponible et de l’interdiction d’importer commercialement des ordinateurs occidentaux
  • Les ordinateurs venus d’Occident arrivaient souvent avec leur documentation d’origine, des logiciels non traduits et un clavier américain
  • Des pays comme la France et l’Allemagne recevaient des claviers adaptés à la disposition de leurs machines à écrire, mais la Pologne a dû trouver un moyen de saisir 9 lettres supplémentaires sur un clavier américain
  • Comme Ctrl était déjà très utilisé pour les raccourcis et Alt relativement moins, les combinaisons avec Alt se sont imposées comme standard de fait
    • 8 lettres diacritées ont été attribuées à leur lettre latine correspondante
    • La dernière a été attribuée à une touche voisine
  • L’ancienne disposition était appelée « typist’s layout », la nouvelle « programmer’s layout »
    • Peut-être parce que les premiers utilisateurs de PC étaient surtout des programmeurs
    • Peut-être aussi parce qu’elle conservait telle quelle la ponctuation souvent utilisée en programmation
  • Le programmer’s layout était peu ergonomique, car avec un seul Alt à gauche il fallait appuyer d’une même main sur des touches proches, mais il s’est imposé car il était facile à comprendre sans modification matérielle ni autocollants
  • Plus tard, des claviers typist’s dédiés sont apparus, mais presque personne n’a changé, dans une dynamique comparable à celle d’un QWERTY largement adopté malgré ses défauts

L’habitude de Ctrl+S et le conflit avec l’éditeur web

  • Avant la généralisation de l’enregistrement automatique, l’habitude d’enregistrer manuellement ses documents était essentielle
  • Dans les années 1980-1990, l’enregistrement était lent, usait peu à peu les supports comme les disques, et pouvait parfois monopoliser fortement le CPU au point de gêner toute autre tâche
  • Les utilisateurs ont pris l’habitude d’appuyer sur Command+S ou Ctrl+S chaque fois qu’ils faisaient une pause en écrivant
    • Certains le faisaient à chaque paragraphe
    • D’autres à chaque phrase, puis plus tard tous les quelques mots
  • Dans les éditeurs web, cette habitude provoquait l’ouverture de la boîte de dialogue du navigateur permettant d’enregistrer le HTML de la page courante
  • Medium aussi cherchait autrefois à l’empêcher en détectant Ctrl+S ou Command+S dans le code de l’éditeur, puis en lançant l’enregistrement et en bloquant l’action par défaut
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Ce code lançait l’enregistrement dans l’éditeur quand metaKey sur Mac ou ctrlKey sur Windows/Linux était utilisé avec S, et empêchait l’ouverture de la boîte de dialogue d’enregistrement du navigateur
  • Le problème était que, dans certains environnements, la saisie du Ś polonais n’apparaissait pas comme un simple Alt+S

La manière dont Windows traite Right Alt

  • Windows 3.x et Windows 95 permettaient d’accéder rapidement aux éléments de menu et aux contrôles des boîtes de dialogue via Alt+lettre soulignée
  • En Pologne, Alt servait déjà à saisir les lettres diacritées, ce qui entrait en conflit avec les raccourcis Windows
  • Avec l’évolution des claviers, une touche Alt secondaire est apparue à droite de la barre d’espace, rendant possible l’usage de l’Alt gauche pour les raccourcis Windows et de l’Alt droit pour la saisie en polonais
  • Mais comme la fonction de Right Alt devait aussi rester disponible sur les anciens claviers n’ayant qu’une seule touche Alt, Microsoft a choisi de mapper en interne Right Alt vers la combinaison, rarement utilisée, de Ctrl+Alt
  • À cause de cette décision, Right Alt+S, utilisé pour saisir Ś en polonais, apparaissait au système comme Ctrl+Alt+S
  • Le code de Medium qui bloquait Ctrl+S ne vérifiait pas si Alt était également enfoncé, et finissait donc par intercepter la saisie de Ś comme s’il s’agissait du raccourci d’enregistrement

La correction : ne pas traiter Ctrl+S comme tel quand Alt est enfoncé

  • Une fois la cause identifiée, la correction a été simple
  • Au lieu de bloquer systématiquement Ctrl+S, la condition a été modifiée pour ne le bloquer que si Alt n’était pas enfoncé, même lorsque Ctrl l’était
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
  this._editors.save()
  e.preventDefault()
}
  • Après ce changement, la saisie de Right Alt+S n’entrait plus dans la condition de blocage de l’enregistrement par Ctrl+S
  • Medium a corrigé ce bug, et cette condition s’est ensuite enrichie de nombreux commentaires pour rester compréhensible par des humains

Un problème plus vaste derrière une petite condition

  • En Pologne, le communisme s’est effondré en 1989, et les ordinateurs peuvent désormais être importés légalement aussi bien par des particuliers que par des entreprises
  • Aujourd’hui, les Windows et Mac achetés en Pologne prennent totalement en charge le polonais et les systèmes d’exploitation sont localisés
  • Malgré cela, le programmer’s layout est toujours présent dans les réglages système et reste le plus utilisé des deux dispositions
  • Ce petit bug renvoie à une réalité plus large : les conventions informatiques de type américain se sont développées autour des 26 lettres non accentuées de l’anglais
  • Le polonais a dû composer en naviguant entre des variantes dérivées du QWERTY, et les langues qui utilisent des systèmes d’écriture encore plus éloignés de l’anglais peuvent se retrouver dans une situation plus défavorable

1 commentaires

 
Avis sur Hacker News
  • Je pense que le fait que le polonais utilise l’alphabet latin, avec seulement de petites variantes slaves pour les sons supplémentaires, a beaucoup facilité l’alignement de la Pologne sur une orientation occidentale.
    Le Polonais moyen est culturellement bien plus proche de ses voisins occidentaux que des Ukrainiens ou des Russes, la cuisine étant peut-être la seule exception.

    • Le Kazakhstan aussi a décidé de passer de l’alphabet cyrillique à l’alphabet latin pour s’aligner davantage sur l’Europe que sur la Russie https://www.bbc.com/worklife/article/20180424-the-cost-of-ch...
      Je me demande si, dans un avenir lointain, l’Ukraine suivra la même voie.
    • L’adoption de l’alphabet latin elle-même était un choix d’orientation occidentale visant à s’aligner sur les royaumes de la sphère latine plutôt que byzantine, et elle est aussi liée à l’adoption du catholicisme plutôt que de l’orthodoxie.
    • Pour résumer grossièrement, de même que le christianisme est arrivé en Pologne au Xe siècle lorsque Mieszko a épousé la princesse tchèque Doubravka/Dobrawa, on a aussi adopté l’écriture tchèque, issue des efforts de Jan Hus pour codifier le tchèque, c’est-à-dire l’alphabet latin.
      Les chercheurs considèrent qu’à peu près à la même époque, le polonais a commencé à se développer comme langue distincte, et jusqu’au XIIIe siècle il était possible de communiquer sans grande difficulté avec les voisins du sud.
      Aux XVe-XVIe siècles, l’orthographe polonaise s’est formée, et Stanisław Zaborowski ainsi que Jan Kochanowski ont tenté d’introduire des lettres pour refléter plus précisément la phonologie polonaise de l’époque, mais les alphabets qu’ils proposaient étaient assez longs.
      Pendant la période des partitions, il y a eu une forte russification visant à faire disparaître la langue et la culture polonaises, avec aussi des tentatives d’introduire l’alphabet cyrillique, mais elles ont finalement échoué ; la littérature de l’époque comptait beaucoup d’œuvres sur le patriotisme et l’amour de la patrie.
      La réforme linguistique de 1936 l’a rapproché de la forme que nous connaissons aujourd’hui, et pendant la période communiste, le pluriel de la deuxième personne a été introduit dans la langue officielle, comme le vykání en tchèque et en slovaque, mais c’était artificiel et très marqué politiquement, donc cela n’a pas duré.
      Le polonais a des dialectes, mais les différences se sont estompées après les migrations qui ont suivi la Seconde Guerre mondiale, et le polonais standard s’est également fixé à cette période ; aujourd’hui, les emprunts à l’anglais sont nombreux, au point que hater se naturalise en hejter.
    • Le fait d’être catholique aide aussi.
    • La cuisine polonaise ressemble beaucoup à la cuisine allemande.
      Dire cela va mettre pas mal de Polonais très en colère.
  • Le vrai problème, c’est que les navigateurs n’exposent pas de moyen simple de vérifier les combinaisons de touches, et que les développeurs ne le font pas non plus eux-mêmes.
    Sur beaucoup de sites, la combinaison prévue se déclenche aussi lorsqu’on ajoute des touches modificatrices comme alt ou shift.
    Le code présenté ici ne corrige qu’un problème plus important sous Windows ; alt+cmd+s reste bloqué.
    Il faudrait une proposition pour que les navigateurs exposent, dans les événements keydown/up/press, une propriété contenant un code de combinaison du type "CTRL+S" ou "CTRL+ALT+S".
    Les développeurs pourraient alors faire leurs branchements sur cette propriété au lieu de vérifier eux-mêmes le key code et les touches modificatrices.
    Ce serait bien aussi que les développeurs web créent eux-mêmes ce genre de propriété dans leur code, afin de comparer dessus plutôt que d’inspecter directement les touches modificatrices. Cela éviterait des bugs comme celui de l’article original et rendrait l’usage bien plus pratique.

    • Ce bug est apparu parce qu’un développeur, qui voulait empêcher l’ouverture de la boîte de dialogue d’enregistrement quand l’utilisateur appuie sur Control S, a touché à un comportement fondamental et propice aux bugs.
      Imaginez les dégâts si les développeurs avaient encore plus d’options leur permettant d’intervenir plus facilement.
      S’il faut intercepter les touches, il existe déjà des API de bas niveau ; autant s’en tenir là.
      Par ailleurs, HTML dispose d’un attribut accesskey permettant de définir des raccourcis clavier : https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
  • Le nouveau Copilot 365 fait exactement ça aussi. Chaque fois que j’essaie de saisir "Ć", Copilot surgit et je dois continuer à fermer l’app.

    • Chacune de ces petites choses fabrique un nouvel utilisateur Linux.
      Depuis que j’ai migré, je ne me suis jamais retourné.
      Écrit depuis SteamOS.
    • Évidemment, les idiots de MSFT ne connaissent même pas leurs propres API https://devblogs.microsoft.com/oldnewthing/20040329-00/?p=40...
    • J’ai vécu la même chose pendant un examen à l’école. J’essayais de taper & sur un clavier hongrois, et bien sûr c’était aussi altgr+c.
    • Vous vous souvenez quand alt+c lançait ATI Catalyst Control Center au lieu de "ć" ?
    • Le meilleur, c’est que ça s’installe automatiquement sans rien demander.
      Merci Microsoft. Ça fait plaisir de voir que l’assurance qualité tourne bien.
  • Fait amusant : quand on applique la normalisation par décomposition canonique d’Unicode, 8 des 9 lettres polonaises (ż, ó, ć, ę, ś, ą, ź, ń) se décomposent en lettre de base + signe diacritique combinant, mais ł reste tel quel.
    Du coup, avec le tokenizer unicode61 remove_diacritics de sqlite, on ne peut pas normaliser entièrement du texte polonais pour la recherche plein texte.

    • Je me souviens avoir découvert ça en écrivant du code pour un exercice d’entretien. La raison est simple : dans plusieurs systèmes de saisie comme ABC International sur Mac, même si la saisie de ł se fait comme une séquence de deux caractères, il n’existe pas réellement de caractère combinant correspondant à la barre qui traverse le l.
      Je n’en suis pas certain, mais j’imagine que le remove_diacritics de sqlite fonctionne comme ce que j’avais moi-même implémenté : conversion en NCD, puis suppression des caractères combinants dans la chaîne.
      Je m’attendrais à ce que d’autres cas particuliers non décomposables comme ħ ou ø se comportent de la même manière.
    • Un utilisateur polonais s’attend-il à ce qu’une recherche sur “ł” retourne aussi “l” ?
  • Polish is the second most-used Slavic language, right after Russian and just before Ukrainian
    Concernant l’ukrainien, ce n’est pas tout à fait exact. C’est bien la langue officielle de l’Ukraine, mais dans la réalité, il faut dire que tous les Ukrainiens ne parlent pas effectivement ukrainien.

    • Même si l’on remonte à 2019, il y avait déjà largement assez de locuteurs de l’ukrainien
      Lviv = 2,5 millions
      Vinnytsia = 1,5 million
      Ivano-Frankivsk = 1,3 million
      Khmelnytskyi = 1,2 million
      Rivne = 1,1 million
      Ternopil = 1 million
      Volyn = 1 million
      Chernivtsi = 800 000
      Zakarpattia = 800 000 (en excluant les Hongrois)
      Rien qu’avec ça, on obtient 11,2 millions d’Ukrainiens de l’ouest chez qui l’usage de l’ukrainien est écrasant, ce qui dépasse le nombre de locuteurs du tchèque même en ignorant complètement le reste du pays. Et le reste du pays n’était pas entièrement russophone non plus, et l’est encore moins aujourd’hui.
    • Cette « correction » ne propose aucune autre langue slave qui aurait plus de locuteurs que l’ukrainien et prendrait la 3e place derrière le russe et le polonais, donc le classement ne change pas.
  • Malheureusement, il n’y a pas que Medium : plusieurs applis Windows font pareil. Par exemple, dans Active Presenter, saisir un seul caractère — peut-être Ó — arrête l’enregistrement de l’écran, ce qui rend souvent impossible l’enregistrement d’une scène où l’on tape en polonais.
    D’autres applis semblent faire quelque chose de similaire en assignant des combinaisons Alt + Ctrl + lettre comme raccourcis, écrasant d’une façon ou d’une autre le pilote de disposition clavier.

  • Même en 2026, il est soudain devenu impossible de saisir un Ś majuscule dans Edge pour Mac. On a l’impression d’être revenu 25 ans en arrière.

    • J’ai vu la même chose dans Teams. Parce que ce sont deux applis MS ?
  • nvidia overlay a un raccourci Alt+Z, qui fonctionne avec Alt gauche comme avec Alt droit ; du coup, pour les utilisateurs polonais, impossible de taper « ż » sans ouvrir l’overlay ou réattribuer la touche, ce qui est assez pénible.
    Nvidia, corrigez ça, s’il vous plaît.

  • En résumé, c’est ça :

    Au lieu de bloquer Ctrl S de manière aveugle et agressive, il aurait suffi de bloquer Ctrl S uniquement quand la touche Alt n’était pas enfoncée.
    Le raccourci clavier du S polonais était Ctrl alt s, et en voulant améliorer l’action d’enregistrement, ils ont bloqué Ctrl s tout en bloquant aussi ctrl alt s.

    • Non. Le raccourci était alt+s, et c’est bien ce que les gens appuyaient réellement.
      Sous Windows, comme les combinaisons Alt étaient déjà utilisées, cela devenait Alt droit+s ; et même si Alt droit n’était pas utilisé par Windows lui-même, au lieu d’un code Alt droit distinct, Windows réécrivait cette touche comme une combinaison ctrl+alt.
      Si l’on veut résumer, il faut au moins avoir juste le détail le plus important. Les gens n’appuyaient que sur Alt, mais Windows transformait ça en « vous appuyez maintenant sur ctrl+alt », ce qui faisait qu’alt+s ressemblait à ctrl+s, avec un Alt attaché que personne ne vérifiait au moment d’intercepter et de tuer l’événement.