              pass
          else:
              termios.tcsetattr(self.file_desc, termios.TCSAFLUSH, self.old_term)
  
      @staticmethod
      def getch():
          """ Returns a keyboard character after kbhit() has been called.
              Should not be called in the same program as getarrow(). """
          if os.name == "nt":
              return msvcrt.getch().decode("utf-8")
          return sys.stdin.read(1)
 
</s> remove     @staticmethod
    def getarrow():
 </s> add     def getarrow(self): </s> remove     @staticmethod
    def kbhit():
 </s> add     def kbhit(self):
    def getch(self):
              pass
          else:
              termios.tcsetattr(self.file_desc, termios.TCSAFLUSH, self.old_term)
  
    def getch(self):
    def getch(self):
          """ Returns a keyboard character after kbhit() has been called.
              Should not be called in the same program as getarrow(). """
          if os.name == "nt":
              return msvcrt.getch().decode("utf-8")
          return sys.stdin.read(1)
keep keep keep keep replace replace keep keep keep keep keep
 Config Changes + Bugfixes

Bugfix: Fully disable keypress monitor for GUI
Bugfix: Preview - Handle missing alignments file
Config changes:
    - Separate plugin defaults into their own files
    - Move mask_type to global training config
    - Add ability to pass in custom config files 
lib/keypress.py