summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Silvester2014-07-31 14:02:57 -0500
committerSteven Silvester2014-07-31 14:02:57 -0500
commit04e97ea1696d252e5989adabc55891a028bb1a6f (patch)
tree1b4c14ba11a4516b4d025f42407f158f2cc53191
parent9ac082c0e007fdba0f0022dac6448a1282a0eb1f (diff)
downloadscilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.tar.gz
scilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.tar.bz2
scilab_kernel-04e97ea1696d252e5989adabc55891a028bb1a6f.zip
Add code completion
-rw-r--r--octave_kernel.py35
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)