2017-02-22 69 views
0

我想在我的python curses程序中使用外部終端文本編輯器和尋呼機。我使用它的子進程庫。大多數情況下,除非退出文本編輯器(與nemovi相同),否則我無法再次使光標不可見。而且,在調用子進程之後,庫不會在退出時清理屏幕。我錯過了什麼?從python curses程序運行終端文本編輯器

P.S.我知道curses.textpad,但我更喜歡使用外部編輯器和尋呼機。

這裏有一個程序:

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) 

回答

1

你沒告訴你離去的library(當你離開運行納米,例如),並詛咒想起了什麼狀態,你告訴它用於光標可視性。所以它忽略了你的改變,因爲它不會像詛咒知道的那樣改變。

如果您打算離開,請使用endwin函數。當你回來時,一個refresh撤消了。