You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Pasting a function definition does not work in 3.13 REPL with Windows Terminal #124096
I use Python downloaded from python.org without using a graphical environment such as IPython. Instead, I use the Windows Terminal with the REPL built into python.exe. In 3.12.6, I can paste a function definition copied from a text editor directly into the REPL and everything works fine. In 3.13.rc2 this does not work; the indentation is all messed up and I get an IndentationError.
defletter_colors(word, guess):
'''Compute letter colors for Wordle guesses. B=black Y=yellow G=green'''if (n:=len(word)) !=len(guess):
raiseValueError('Word and guess must be the same length.')
result= ['G'ifwl==glelse'B'for (wl, gl) inzip(word, guess)]
unused= [wfor (w, r) inzip(word, result) ifr=='B']
fori, cinenumerate(guess):
ifresult[i] !='G'andcinunused:
result[i] ='Y'unused.remove(c)
return''.join(result)
This is not a duplicate. It's a Windows-specific issue that WinAPI requires a console application to set their input handle with ENABLE_VIRTUAL_TERMINAL_INPUT flag before it can be talked in VT escaped sequences. The flag isn't set in windows_console.py, so it's impossible to have bracketed-paste wrapping sequences sent to PYREPL.
Even if it is set, the default Windows command prompt, at least on 21H2 LTSC, does not support bracketed-paste. A modern terminal emulator like your Windows Terminal is required for this feature. We need to figure out a way to make an educated guess at user's terminal and turn off the autoindentation if necessary.
PYREPL is atm only scanning virtual key codes under Windows, once the console is configured as a virtual terminal, all the keys will be sent in VT sequences.
I am using VS Code on Windows, and extra indentations are added when I shift+enter my code to run in the terminal. Also, even if I just copy the code into the terminal extra indentations are added. Any solution to the problem so far? The problem seems similar to microsoft/vscode-python#24256 where it was solved for some by the pre-lease version of python extension for vs code, but still exist for me on Windows.
Uninstalled every extension but python's:
I am using the pre-lease version:
the python version of 3.13.0 64-bit:
Started a new window, a brand new py file but after shift+enter, the same behaviour is found as before:
If i ctrl c ctrl v the code into the terminal, extra indents are added just by the copying of the code into the terminal:
Adding to @MMateo1120 folks are also able to repro this outside of VS Code terminal (in external terminal) where indentations breaks like the image above.
I use Linux and vim, opening a terminal to execute python with . The same indentation error happens to me. I find no way to send "bracketed code" to the terminal. Even pasting a block of code doesn't work. The only workaround, other than using python 3.12, that seems to work for me is the following.
Translate this:
def signo(x):
if x > 0:
return '+'
elif x < 0:
return '-'
else:
return '0'
into this:
f01="def signo(x):\n if x > 0:\n return '+'\n elif x < 0:\n return '-'\n else:\n return '0'"
exec(f01)
I have the same issue with Python 3.13. and I tried with Notepad, Notepad++, Visualstudio.
In the second I paste the code into the Pythong Terminal the code will be ruined:
Here you can see the problem:
I sent a message to Python Help and I got an answer that
"Please use “paste mode” (the F3 key) for pasting text to the console.
Making it work without F3 on Windows is work in progress, tracked here: #124096"
However for me even the F3 on Windows not help, as not pasting anything to the terminal.
Can anyone please help somehow as the Indentation changes itself when I copying the code from Notepad, Notepad++, or from Visualstudio to Python 3.13?
Is there any other way to use Python on Windows like with a Virtual Machine or with any other application?
The code:
importpandasaspdimportrequestsimportos# Load the input fileinput_file='companies.csv'df=pd.read_csv(input_file)
# Your SerpAPI keySERPAPI_KEY='INSERT Your SERPAPI_KEY_HERE'base_url='https://serpapi.com/search'# Create a list to hold resultsresults= []
# Loop through each company name and fetch websiteforcompanyindf['Company Name']:
params= {
'api_key': SERPAPI_KEY,
'engine': 'google',
'q': company,
'hl': 'en',
'gl': 'us'
}
response=requests.get(base_url, params=params)
data=response.json()
# Get the first organic result linkif'organic_results'indataandlen(data['organic_results']) >0:
website=data['organic_results'][0].get('link')
results.append({'Company Name': company, 'Website': website})
else:
results.append({'Company Name': company, 'Website': None})
# Create a DataFrame and save to CSVresults_df=pd.DataFrame(results)
results_df.to_csv('company_websites.csv', index=False)
Hi, I solved the problem by writing the code into Visualstudio and run in cmd with the
cd path
py script.py
At the beginning of the code I wrote
print("Starting the script...");
and the end
print("Finished processing for company:", company)
in Visualstudio.
I run it, but got an indentation error on line 17 regarding the params inside the for loop. I used 4 white spaces to fix it and another 4 spaces to fix lines under:
Then I saved it in Visualstudio and run it again in cmd with
cd path
py get_websites.py
and voila it run successfully
and did not try to copy and paste into Python terminal.
So writing a code in Visualbasic and then saving it, and then running with cmd looks like a solution so far.
Sorry but ughh... using F3 is honestly the ugliest way of going about it, what is even a 'paste mode'? Is it like an insert mode but not quite? Sounds confusing.
It should be that if I paste text inside the console, it gets pasted. Maybe an ask if there are multiple lines of code and that's it.
That solution is a workaround at best. There is no need for a 'special mode' to do one of the most trivial operations ever done on a computer.
Another thing to take into account is that tabs vs spaces when pasting, it also seems like another issue that lasted for years at this point.
Example here:
That's because of stuff like this that everybody complains about the python REPL on Windows.
Folks should look at Powershell 7 and take some notes in terms of copy/pasting as well as history navigation, because the way you are going about it, is not it at all.
We are almost may 2025 and this problem still persists...
Virtual terminal support has just been backported to 3.13, so in Windows terminals this will work now.
Only in legacy terminals F3 (paste mode) is still needed, since they do not support bracketed pasting.
Activity
terryjreedy commentedon Sep 15, 2024
The code you show looks fine to me. Is this what you see in 3.13?
Please copy and paste the full traceback or message.
Wulian233 commentedon Sep 15, 2024
The bug can be reproduced, here is a screenshot
Duplicate #122237
PR #122383
terryjreedy commentedon Sep 15, 2024
Thank you for the additional clear info. Closing as duplicate.
y5c4l3 commentedon Sep 16, 2024
This is not a duplicate. It's a Windows-specific issue that WinAPI requires a console application to set their input handle with
ENABLE_VIRTUAL_TERMINAL_INPUTflag before it can be talked in VT escaped sequences. The flag isn't set inwindows_console.py, so it's impossible to have bracketed-paste wrapping sequences sent to PYREPL.Even if it is set, the default Windows command prompt, at least on 21H2 LTSC, does not support bracketed-paste. A modern terminal emulator like your Windows Terminal is required for this feature. We need to figure out a way to make an educated guess at user's terminal and turn off the autoindentation if necessary.
PYREPL is atm only scanning virtual key codes under Windows, once the console is configured as a virtual terminal, all the keys will be sent in VT sequences.
PR: #124119
Wulian233 commentedon Sep 16, 2024
oh, you are right
@terryjreedy We need reopen this
MMateo1120 commentedon Nov 16, 2024
I am using VS Code on Windows, and extra indentations are added when I shift+enter my code to run in the terminal. Also, even if I just copy the code into the terminal extra indentations are added. Any solution to the problem so far? The problem seems similar to microsoft/vscode-python#24256 where it was solved for some by the pre-lease version of python extension for vs code, but still exist for me on Windows.
Uninstalled every extension but python's:

I am using the pre-lease version:

the python version of 3.13.0 64-bit:

Started a new window, a brand new py file but after shift+enter, the same behaviour is found as before:

If i ctrl c ctrl v the code into the terminal, extra indents are added just by the copying of the code into the terminal:

anthonykim1 commentedon Dec 2, 2024
Adding to @MMateo1120 folks are also able to repro this outside of VS Code terminal (in external terminal) where indentations breaks like the image above.
gocap55 commentedon Dec 19, 2024
I use Linux and vim, opening a terminal to execute python with . The same indentation error happens to me. I find no way to send "bracketed code" to the terminal. Even pasting a block of code doesn't work. The only workaround, other than using python 3.12, that seems to work for me is the following.
Translate this:
into this:
marslinks commentedon Feb 7, 2025
I have the same issue with Python 3.13. and I tried with Notepad, Notepad++, Visualstudio.
In the second I paste the code into the Pythong Terminal the code will be ruined:
Here you can see the problem:
I sent a message to Python Help and I got an answer that
"Please use “paste mode” (the F3 key) for pasting text to the console.
Making it work without F3 on Windows is work in progress, tracked here: #124096"
However for me even the F3 on Windows not help, as not pasting anything to the terminal.
Can anyone please help somehow as the Indentation changes itself when I copying the code from Notepad, Notepad++, or from Visualstudio to Python 3.13?
Is there any other way to use Python on Windows like with a Virtual Machine or with any other application?
The code:
marslinks commentedon Feb 7, 2025
Hi, I solved the problem by writing the code into Visualstudio and run in cmd with the
cd path
py script.py
At the beginning of the code I wrote
print("Starting the script...");
and the end
print("Finished processing for company:", company)
in Visualstudio.
I run it, but got an indentation error on line 17 regarding the params inside the for loop. I used 4 white spaces to fix it and another 4 spaces to fix lines under:
Then I saved it in Visualstudio and run it again in cmd with
cd path
py get_websites.py
and voila it run successfully
and did not try to copy and paste into Python terminal.
So writing a code in Visualbasic and then saving it, and then running with cmd looks like a solution so far.
gh-124096: Enable REPL virtual terminal support on Windows (#124119)
brokedarius commentedon Apr 27, 2025
Sorry but ughh... using F3 is honestly the ugliest way of going about it, what is even a 'paste mode'? Is it like an insert mode but not quite? Sounds confusing.
It should be that if I paste text inside the console, it gets pasted. Maybe an ask if there are multiple lines of code and that's it.
That solution is a workaround at best. There is no need for a 'special mode' to do one of the most trivial operations ever done on a computer.
Another thing to take into account is that tabs vs spaces when pasting, it also seems like another issue that lasted for years at this point.
Example here:
That's because of stuff like this that everybody complains about the python REPL on Windows.
Folks should look at Powershell 7 and take some notes in terms of copy/pasting as well as history navigation, because the way you are going about it, is not it at all.
We are almost may 2025 and this problem still persists...
pythongh-124096: Enable REPL virtual terminal support on Windows (pyt…
[3.13] gh-124096: Enable REPL virtual terminal support on Windows (GH…
chris-eibl commentedon May 6, 2025
Virtual terminal support has just been backported to 3.13, so in Windows terminals this will work now.
Only in legacy terminals F3 (paste mode) is still needed, since they do not support bracketed pasting.
@ambv I think this can be closed now?