2017-02-22 1 views
0

Je souhaite utiliser l'éditeur de texte de terminal externe et le pager dans mon programme de curseurs python. J'utilise une bibliothèque de sous-processus pour cela. Pour la plupart, cela fonctionne bien, sauf quand je quitte l'éditeur de texte (même avec nemo et vi), je ne peux pas rendre le curseur invisible à nouveau. En outre, après l'appel de sous-processus, la bibliothèque ne nettoie pas l'écran à la sortie. Qu'est-ce qui me manque?Exécuter l'éditeur de texte du terminal à partir du programme python curses

P.S. Je suis au courant de curses.textpad, mais je préférerais utiliser un éditeur externe et un pager.

Voici un programme:

import curses 
import subprocess 

class tui(object): 

    def __init__(self): 
     pass 

    def setup(self, stdscr): 
     self.stdscr = stdscr 
     curses.use_default_colors() 
     curses.init_pair(1, curses.COLOR_WHITE, -1) 
     self.maxY, self.maxX = self.stdscr.getmaxyx() 
     try: 
      curses.curs_set(0) 
     except: 
      pass 
     self.win = curses.newwin(self.maxY, self.maxX, 0, 0) 
     self.stdscr.nodelay(0) 
     self.draw() 
     while True: 
      try: 
       c = self.win.getch() 
       ret = self.keypress(c) 
       if (ret == -1): 
        return 
      except KeyboardInterrupt: 
       break 


    def draw(self): 
     self.win.erase() 
     self.win = curses.newwin(self.maxY, self.maxX, 0, 0) 
     self.win.box() 
     self.win.refresh() 


    def nano(self): 
     curses.savetty() 
     subprocess.run("nano") 
     curses.resetty() 
     curses.curs_set(0) 

    def less(self): 
     curses.savetty() 
     subprocess.run(["less", "/etc/fstab"]) 
     curses.resetty() 
     curses.curs_set(0) 



    def keypress(self, char): 
     if char == curses.KEY_EXIT or char == ord('q'): 
      return -1 

     if char == ord('e'): 
      self.nano() 
      self.draw() 
      return 

     if char == ord('l'): 
      self.less() 
      self.draw() 
      return 

if __name__ == '__main__': 
    mytui = tui() 
    curses.wrapper(mytui.setup) 

Répondre

1

Vous n'a pas dit la bibliothèque de malédictions que vous partiez (lorsque vous avez quitté pour exécuter nano, par exemple), et malédictions souvenaient quel état vous avez dit qu'il utiliser pour la visibilité du curseur. Donc, c'est ignorer votre changement, car il n'est pas changé autant que les malédictions le savent. Si vous allez laissez, utilisez la fonction endwin. Quand vous revenez, un refresh l'annule.