2017-02-22 1 views
0

Ich möchte externe Terminal-Text-Editor und Pager in meinem Python Curses-Programm verwenden. Ich benutze die Unterprozessbibliothek dafür. Zum größten Teil funktioniert es gut, außer wenn ich den Texteditor verlasse (dasselbe mit nemo und vi), kann ich den Cursor nicht wieder unsichtbar machen. Nachdem der Unterprozess aufgerufen wurde, bereinigt die Bibliothek den Bildschirm beim Beenden nicht. Was vermisse ich?Run-Terminal-Text-Editor von Python Curses-Programm

P.S. Ich bin mir bewusst, curses.textpad, aber ich würde lieber einen externen Editor und Pager verwenden.

Hier ist ein Programm:

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) 

Antwort

1

Sie nicht die Flüche Bibliothek erzählt hat, dass Sie verließen (wenn Sie nano, zum Beispiel auszuführen links) und Flüche erinnerte in welchem ​​Zustand Sie es gesagt hatte, für die Cursor-Sichtbarkeit zu verwenden. Also ignorierst du deine Veränderung, weil sie sich nicht so verändert hat, wie Flüche es wissen.

Wenn Sie zu gehen, verwenden Sie die endwin Funktion. Wenn Sie zurückkommen, macht eine refresh das rückgängig.