Question

Je crée une application qui utilise curses pour construire une interface utilisateur simple. Il utilise également le module subprocess pour exécuter éditeur de texte externe de sorte qu'un utilisateur peut taper un texte, puis fermez l'éditeur et revenir au programme principal.

Le problème est que lorsque l'éditeur est tel ou Nano Vim sur console, malédictions n'a pas dé-initialiser correctement. Qui signifie que si le mode couleur est utilisé (curses.start_color()), des séjours terminaux de couleur après la fin du programme.

Voici un script de test qui a cette question (au moins pour moi, j'utilise Ubuntu et gnome-terminal):

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()

(Appuyez sur r pour entrer dans Vim, puis q pour quitter.)

Y at-il un moyen de résoudre ce problème?

Était-ce utile?

La solution

Would modifier votre code à:

if c == ord('q'):
    subprocess.call('reset', shell=False)
    break

soit suffisant pour vous? Ou est-il un comportement supplémentaire dans votre script réel qui est pas dans le code que vous avez collé ici, qui rend cette solution ne convient pas à votre objectif?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top