python / python/cpython

A combining mark in a `Textbox`'s last cell loses the base character

Ouverte
#157,210 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stdlib topic-curses type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
35.9k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug description:

Typing a combining mark into the lower-right cell of a curses.textpad.Textbox puts the mark in a cell of its own and pushes the character it should attach to off the window edge, so that character is lost. The same keystrokes one column earlier attach the mark correctly. Doc/library/curses.rst says of Textbox that "Entering and reading back the full Unicode range, including combining characters, is now supported when curses is built with wide-character support".

import curses, sys
from curses.textpad import Textbox

def typed(ncols):
    win = curses.newwin(1, ncols, 0, 0)
    box = Textbox(win)
    for ch in 'abe\u0301':      # COMBINING ACUTE ACCENT after the 'e'
        box.do_command(ch)
    return win.instr(0, 0, 40).decode()

out = curses.wrapper(lambda stdscr: (typed(3), typed(10)))
print('3 columns:  %a\n10 columns: %a' % out, file=sys.stderr)

Output:

3 columns:  'ab\u0301'
10 columns: 'abe\u0301       '

Expected 'abe\u0301' from both windows: the mark should join the e instead of taking its cell.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs
  • gh-157211

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par curses.textpad.Textbox.do_command et reproduisez le problème avec l’exemple fourni à trois colonnes et à dix colonnes sous Linux. Consultez Doc/library/curses.rst pour vérifier le comportement Unicode indiqué ; terminé lorsque les deux fenêtres préservent le caractère de base et le signe combinant sous la forme 'abe\u0301'.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
cli
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.