diff --git a/connect.py b/connect.py index 4c7989614..c3d575249 100755 --- a/connect.py +++ b/connect.py @@ -303,6 +303,7 @@ class SshTty(Tty): data = '' input_str = '' input_mode = False + vim_end_flag = False try: tty.setraw(sys.stdin.fileno()) tty.setcbreak(sys.stdin.fileno()) @@ -363,12 +364,13 @@ class SshTty(Tty): if input_str != x: data += input_str if self.vim_flag: - match = self.ps1_pattern.search(self.vim_data) + match = re.compile(r'\x1b\[\?1049', re.X).findall(self.vim_data) if match: - self.vim_flag = False - data = self.deal_command(data)[0:200] - if len(data) > 0: - TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() + if vim_end_flag or len(match) == 2: + self.vim_flag = False + vim_end_flag = False + else: + vim_end_flag = True else: data = self.deal_command(data)[0:200] if len(data) > 0: diff --git a/run_server.py b/run_server.py index a123d3ebf..95c7c1448 100755 --- a/run_server.py +++ b/run_server.py @@ -374,13 +374,13 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): match = self.term.ps1_pattern.search(self.term.vim_data) if match: self.term.vim_flag = False - data = self.term.deal_command(self.term.data)[0:200] - if len(data) > 0: - TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=data).save() + result = self.term.deal_command(self.term.data)[0:200] + if len(result) > 0: + TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=result).save() else: - data = self.term.deal_command(self.term.data)[0:200] - if len(data) > 0: - TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=data).save() + result = self.term.deal_command(self.term.data)[0:200] + if len(result) > 0: + TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=result).save() self.term.vim_data = '' self.term.data = '' self.term.input_mode = False