This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2008年04月23日 15:41 by pbazant, last changed 2022年04月11日 14:56 by admin.
| Messages (6) | |||
|---|---|---|---|
| msg65700 - (view) | Author: Pavel Bazant (pbazant) | Date: 2008年04月23日 15:41 | |
When python is in interactive mode, curses does not react to resize
events properly.
test.py:
import curses
def run():
stdscr=curses.initscr()
key=0
while(key!=ord('q')):
key=stdscr.getch()
stdscr.addstr(0,0,str(stdscr.getmaxyx())+' '+str(key))
stdscr.refresh()
curses.endwin()
run()
When this is run directly, everything is ok. When it is called via
execfile() from the interactive prompt, it shows the right screen size
after the first keypress, but behaves oddly after the resize.
IMHO, the following happens:
For some reason, env. variables LINES and COLUMNS are set but they are
not reflected in the os.environ structure nor they respond to screen
size changes. If these variables are set then the ncurses library (see
man pages) uses their values instead of getting the term size via
ioctl.
The ncurses library receives a SIGWINCH and sees that LINES
and COLUMNS are set. However, their values are same as the
screen dimensions before the resize, so it is perplexed why there is
a SIGWINCH if the screen did not change and it just ungetchs an ERR
and ncurses internal structures are not changed appropriately.
From the resizeterm man page:
"If the environment variables LINES or COLUMNS are set, this overrides
the library's use of the window size obtained from the operating
system. Thus, even if a SIGWINCH is received, no screen size change may
be recorded. In that case, no KEY_RESIZE is queued for the next call to
getch; an ERR will be returned instead."
Executing
import os
os.environ['LINES']="blah"
del os.environ['LINES']
os.environ['COLUMNS']="blah"
del os.environ['COLUMNS']
solves the problem for me.
Perhaps the problem has sth to do with python using readline
in interactive mode???
PB
|
|||
| msg109298 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2010年07月05日 05:21 | |
Could somebody witht a nix box try this out, I'd do it myself if I had such a beast. |
|||
| msg109325 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2010年07月05日 15:21 | |
Well, I can run it, but I have no idea what it is telling me or how it demonstrates a bug. Pavel, is this still a problem in 2.6/2.7? |
|||
| msg161020 - (view) | Author: (poq) | Date: 2012年05月17日 21:51 | |
Just to confirm: curses SIGWINCH handling is still (2.7/3.2) broken after importing readline.
Readline seems to set the LINES/COLUMNS environment vars, and this confuses curses, even if curses is imported after readline.
Clearing the LINES/COLUMNS vars after import readline fixes the issue:
os.environ['LINES'] = os.environ['COLUMNS'] = ''
or
os.unsetenv('LINES'); os.unsetenv('COLUMNS')
(or other variations).
I spent a couple hours tearing my hair out over this, before I found this report.
It may be possible for Python to work around this readline behavior by saving LINES/COLUMNS and restoring them after initializing readline.
Or maybe this should just be documented somewhere.
|
|||
| msg161021 - (view) | Author: (poq) | Date: 2012年05月17日 22:06 | |
Issue 3948 is almost certainly a duplicate. |
|||
| msg265564 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2016年05月15日 01:05 | |
For the record, this is my interpretation of Pavel’s demo: If you press a key (other than lowercase "q") or resize the terminal, it displays the terminal dimensions in the top-left corner. Without Readline, the dimensions are updated when the terminal resizes. When Readline is used (interactive mode, or simply "import readline"), the reported dimensions are static, which I understand is the bug. Documentating this quirk may be a good start. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:33 | admin | set | github: 46927 |
| 2016年05月15日 01:05:47 | martin.panter | set | assignee: docs@python components: + Documentation versions: + Python 2.7, Python 3.5, Python 3.6, - Python 3.3 nosy: + docs@python, martin.panter messages: + msg265564 stage: test needed -> needs patch |
| 2016年05月15日 00:57:41 | martin.panter | link | issue3948 superseder |
| 2014年12月31日 16:20:57 | akuchling | set | nosy:
- akuchling |
| 2014年02月03日 19:12:11 | BreamoreBoy | set | nosy:
- BreamoreBoy |
| 2012年05月17日 22:06:23 | poq | set | messages: + msg161021 |
| 2012年05月17日 21:51:38 | poq | set | nosy:
+ poq messages: + msg161020 versions: + Python 3.3, - Python 2.4 |
| 2010年07月05日 15:21:49 | r.david.murray | set | nosy:
+ r.david.murray, akuchling messages: + msg109325 components: + Extension Modules, - None stage: test needed |
| 2010年07月05日 05:21:46 | BreamoreBoy | set | nosy:
+ BreamoreBoy messages: + msg109298 |
| 2008年04月23日 15:41:39 | pbazant | create | |