Я создаю приложение, которое использует curses
для создания простого пользовательского интерфейса. Он также использует модуль subprocess
для запуска внешнего текстового редактора, чтобы пользователь мог набрать текст, затем закрыть редактор и вернуться к основной программе.
Проблема в том, что когда редактор работает на консоли, такой как Vim или Nano, curses не деинициализируется должным образом. Это означает, что если используется цветовой режим (curses.start_color()
), терминал остается цветным после завершения программы.
Вот тестовый скрипт, который имеет эту проблему (по крайней мере для меня, я использую Ubuntu и gnome-терминал):
import curses
import subprocess
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(1)
try:
curses.curs_set(0)
except curses.error:
pass
curses.start_color()
screen.addstr(0, 0, 'hello, world!')
screen.refresh()
while 1:
c = screen.getch()
if c == ord('q'):
break
if c == ord('r'):
subprocess.call('vim', shell=False)
screen.clear()
screen.addstr(0, 0, 'hello, world!')
screen.refresh()
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.curs_set(1)
curses.endwin()
(Нажмите r
для входа в Vim, затем q
для выхода.)
Есть ли способ это исправить?