diff options
author | Steven Silvester | 2014-07-31 14:02:57 -0500 |
---|---|---|
committer | Steven Silvester | 2014-07-31 14:02:57 -0500 |
commit | 04e97ea1696d252e5989adabc55891a028bb1a6f (patch) | |
tree | 1b4c14ba11a4516b4d025f42407f158f2cc53191 | |
parent | 9ac082c0e007fdba0f0022dac6448a1282a0eb1f (diff) | |
download | scilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.tar.gz scilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.tar.bz2 scilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.zip |
Add code completion
-rw-r--r-- | octave_kernel.py | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/octave_kernel.py b/octave_kernel.py index 328caf1..83aabf5 100644 --- a/octave_kernel.py +++ b/octave_kernel.py @@ -40,19 +40,20 @@ class OctaveKernel(Kernel): def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False): - if (not code.strip() or code.strip() == 'keyboard' - or code.strip().startswith('keyboard(')): + code = code.strip() + if not code or code == 'keyboard' or code.startswith('keyboard('): return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [], 'user_expressions': {}} - if code.strip() == 'exit': + if (code == 'exit' or code.startswith('exit(') + or code == 'quit' or code.startswith('quit(')): # TODO: exit gracefully here pass - if code.strip().endswith('?'): - code = 'help("' + code.strip()[:-1] + '")' + if code.endswith('?'): + code = 'help("' + code[:-1] + '")' interrupted = False try: - output = self.octavewrapper._eval([code.rstrip()]) + output = self.octavewrapper._eval([code]) except KeyboardInterrupt: self.octavewrapper._session.proc.send_signal(signal.SIGINT) interrupted = True @@ -82,6 +83,28 @@ class OctaveKernel(Kernel): return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [], 'user_expressions': {}} + #def do_history(self, hist_access_type, output, raw, session=None, + # start=None, stop=None, n=None, pattern=None, unique=False): + # pass + + def do_complete(self, code, cursor_pos): + code = code[:cursor_pos] + if code[-1] == ' ': + return + tokens = code.replace(';', ' ').split() + if not tokens: + return + token = tokens[-1] + # check for valid function name + if not re.match('\A[a-zA-Z_]', token): + return + start = cursor_pos - len(code) + cmd = 'completion_matches("%s")' % token + output = self.octavewrapper._eval([cmd]) + return {'matches': output.split(), 'cursor_start': start, + 'cursor_end': cursor_pos, 'metadata': dict(), + 'status': 'ok'} + if __name__ == '__main__': from IPython.kernel.zmq.kernelapp import IPKernelApp IPKernelApp.launch_instance(kernel_class=OctaveKernel) |