New REPL crashes on an empty DELETE_WORD_BACKWARDS (^W) followed by CLEAR_TO_START (^K)
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Bug report
Bug description:
If, in the REPL, you:
- Delete the current word, backward, on an empty line using Control-W, then
- Delete to the end of line, using Control-K
The REPL will crash with an exception in readline.
Note: ^ denotes pressing the Control or Command key when pressing the next character.
>>> ^W^KTraceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/usr/lib64/python3.13/_pyrepl/__main__.py", line 6, in <module>
__pyrepl_interactive_console()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib64/python3.13/_pyrepl/main.py", line 59, in interactive_console
run_multiline_interactive_console(console)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/usr/lib64/python3.13/_pyrepl/simple_interact.py", line 143, in run_multiline_interactive_console
statement = multiline_input(more_lines, ps1, ps2)
File "/usr/lib64/python3.13/_pyrepl/readline.py", line 389, in multiline_input
return reader.readline()
~~~~~~~~~~~~~~~^^
File "/usr/lib64/python3.13/_pyrepl/reader.py", line 802, in readline
self.handle1()
~~~~~~~~~~~~^^
File "/usr/lib64/python3.13/_pyrepl/reader.py", line 785, in handle1
self.do_cmd(cmd)
~~~~~~~~~~~^^^^^
File "/usr/lib64/python3.13/_pyrepl/reader.py", line 710, in do_cmd
command.do()
~~~~~~~~~~^^
File "/usr/lib64/python3.13/_pyrepl/commands.py", line 157, in do
self.kill_range(r.pos, eol + 1)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.13/_pyrepl/commands.py", line 71, in kill_range
r.kill_ring[-1] = r.kill_ring[-1] + text
~~~~~~~~~~~^^^^
This exception is caused since kill_range is not called on an empty backward_kill_word, causing kill_ring to be empty: https://github.com/pypy/pyrepl/blob/ca192a80b76700118b9bfd261a3d098b92ccfc31/pyrepl/commands.py#L152-L156
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Linked PRs
- gh-131452
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece em pyrepl/commands.py por volta das linhas 152-156, onde são descritos a exclusão de palavras para trás e kill_range. Reproduza no REPL a sequência ^W seguida de ^K em uma linha vazia e rastreie o estado do kill-ring. Está concluído quando a sequência não gerar mais a exceção readline relatada; o PR vinculado gh-131452 indica que o trabalho já está em andamento.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- cli
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 30/100