diff options
author | Steven Silvester | 2014-07-31 16:17:37 -0500 |
---|---|---|
committer | Steven Silvester | 2014-07-31 16:17:37 -0500 |
commit | a1ceb302e6c877a552bedd7022339c72f143db7e (patch) | |
tree | a66cef23b6a75f7f125dd6a41b911913ca000750 | |
parent | 61828919f4fd78d9d0a375938a34ba6f3dea97bc (diff) | |
download | scilab_kernel-a1ceb302e6c877a552bedd7022339c72f143db7e.tar.gz scilab_kernel-a1ceb302e6c877a552bedd7022339c72f143db7e.tar.bz2 scilab_kernel-a1ceb302e6c877a552bedd7022339c72f143db7e.zip |
Better help handling, refactoring.
-rw-r--r-- | octave_kernel.py | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/octave_kernel.py b/octave_kernel.py index c7cce92..5526f02 100644 --- a/octave_kernel.py +++ b/octave_kernel.py @@ -45,18 +45,35 @@ class OctaveKernel(Kernel): def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False): code = code.strip() + abort_msg = {'status': 'abort', + 'execution_count': self.execution_count} if not code or code == 'keyboard' or code.startswith('keyboard('): return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [], 'user_expressions': {}} - - if (code == 'exit' or code.startswith('exit(') + elif (code == 'exit' or code.startswith('exit(') or code == 'quit' or code.startswith('quit(')): # TODO: exit gracefully here self.do_shutdown(False) - return {'status': 'abort', 'execution_count': self.execution_count} - - if code.endswith('?'): - code = 'help("' + code[:-1] + '")' + return abort_msg + elif code == 'restart': + self.octavewrapper.restart() + return abort_msg + elif code.endswith('?'): + if code[:-1] in dir(self.octavewrapper): + output = getattr(self.octavewrapper, code[:-1]).__doc__ + stream_content = {'name': 'stdout', 'data': output} + self.send_response(self.iopub_socket, 'stream', stream_content) + return abort_msg + elif code.endswith('??') and code[:-2] in dir(self.octavewrapper): + output = getattr(self.octavewrapper, code[:-2]).__doc__ + stream_content = {'name': 'stdout', 'data': output} + self.send_response(self.iopub_socket, 'stream', stream_content) + return abort_msg + else: + if code.endswith('??'): + code = 'help("' + code[:-2] + '")\n\ntype ' + code[:-2] + else: + code = 'help("' + code[:-1] + '")' interrupted = False try: output = self.octavewrapper._eval([code]) @@ -77,18 +94,18 @@ class OctaveKernel(Kernel): self.send_response(self.iopub_socket, 'stream', stream_content) return {'status': 'error', 'execution_count': self.execution_count, 'ename': '', 'evalue': err, 'traceback': []} - - if output is None: - output = '' - elif output == 'Octave Session Interrupted': - interrupted = True + else: + if output is None: + output = '' + elif output == 'Octave Session Interrupted': + interrupted = True if not silent: stream_content = {'name': 'stdout', 'data': output} self.send_response(self.iopub_socket, 'stream', stream_content) if interrupted: - return {'status': 'abort', 'execution_count': self.execution_count} + return abort_msg return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [], 'user_expressions': {}} @@ -107,7 +124,11 @@ class OctaveKernel(Kernel): start = cursor_pos - len(token) cmd = 'completion_matches("%s")' % token output = self.octavewrapper._eval([cmd]) - return {'matches': output.split(), 'cursor_start': start, + output = output.split() + for item in dir(self.octavewrapper): + if item.startswith(token) and not item in output: + output.append(item) + return {'matches': output, 'cursor_start': start, 'cursor_end': cursor_pos, 'metadata': dict(), 'status': 'ok'} |