2015-06-01 3 views
-2

Я пишу программу на проклятиях python, и мне было интересно, есть ли способ заблокировать изменение размеров терминалов, чтобы предотвратить сбой ругательств как на Linux, так и на Windows. Это то, что происходит. Могу ли я предотвратить это? Под Windows это не бывает причиной изменения размеров окна не влияет на быстрые пропорции ... http://alessio.ragno.info/Before%20Resize.png http://alessio.ragno.info/After%20Resize.pngPrevent Terminal resize python curses

`

import curses 
screenTest = curses.initscr() 
boxTest = curses.newwin(24,80,0,0) 
boxTest.box() 
curses.noecho() 
curses.cbreak() 
curses.start_color() 
screenTest.keypad(1) 
curses.init_pair(1,curses.COLOR_BLACK, curses.COLOR_CYAN) 
curses.init_pair(2,curses.COLOR_YELLOW, curses.A_NORMAL) 
boxTest.border(0) 
boxTest.addstr(1,1,78*"_") 
boxTest.addstr(10,10,"Press ESC to quit...") 
boxTest.refresh() 
x = screenTest.getch() 
while x != 27: 
    boxTest.addstr(1,1,78*"_") 
    boxTest.addstr(10,10,"Press ESC to quit...") 
    boxTest.refresh() 
    x = screenTest.getch() 

curses.endwin() 
exit() 

`

ответ

0

Терминалы собираются, чтобы изменить размер, потому что пользователи делают это. Существует нет общего способа предотвратить это: подавление оконных украшений для устранения ручек изменения размера является частичным решением, которое не является переносным. Вы можете иногда встречаться с комментариями по поводу различных аспектов этого, но без комплексных решений. Вот несколько ссылок:

В проклятиях/Ncurses (не в PDCurses), библиотека обращает внимание на переменные окружения LINES и COLUMNS исключения случаев, когда отключен с помощью функции use_env. ncurses добавляет обработчик сигнала для SIGWINCH во время инициализации, который он использует для определения (и ответа) на изменение размера окна (например, resizeterm). Если эти переменные среды установлены, ncurses не будут реагировать. Однако (см. Ниже) изменение этого специального случая не приведет к сбою Python, потому что у Python больше проблем.

ncurses обработал изменение размеров окон почти на 20 лет; есть приложения, которые не работают с этим. Без какой-либо конкретной тестовой программы для обсуждения нет способа определить причину сбоя программы.

Что касается программы испытаний добавленным в начале июня 2:

Запуск тест-программы с Valgrind, я вижу ряд ошибок, которые почти все в Python сам (2.6.6 и 2.7.9 на Debian 6 и 8) и небольшая часть, где Python освобождает память, принадлежащую ncurses. В каждом случае Python освобождает память, которая уже была освобождена. Он делает это даже без изменения размера (хотя некоторые неправильные значения связаны с изменением размера). Я запускал это несколько раз, и по крайней мере один раз ни один обнаруженных ошибок был в ncurses. Согласно valgrind, в Python имеется несколько десятков точек, которые генерируют эти ошибки, некоторые из которых учитывают 2/3 из более чем 400 обнаруженных случаев. Поэтому вопрос неверен. (Я мог бы предложить некоторые улучшения самой тестовой программы, но, похоже, реальной проблемой является Python).

+0

Есть ли способ отключить изменение размера терминала или не влиять на столбцы и строки при изменении размера, как в командной строке Windows? потому что, если я изменяю размер окна окон, проваливаются проклятия. –

+0

http://alessio.ragno.info/Before%20Resize.png http://alessio.ragno.info/After%20Resize.png –

+0

Нет никакой программы, которую кто-то мог бы проверить, никакой полезной информации. –