##// END OF EJS Templates
Merge pull request #1867 from mcelrath/menu_borders...
Merge pull request #1867 from mcelrath/menu_borders Fix 1px margin bouncing of selected menu item. This fixes the margin of the active menu item to zero, so now the text doesn't shift around, even if you use larger fonts. To reproduce the original error, zoom your notebook (ctrl-mousewheel, or ctrl-+ in most browsers) and try the menu.

File last commit:

r6270:35b8990b
r7406:9b250034 merge
Show More
completer.py
91 lines | 2.9 KiB | text/x-python | PythonLexer
Fernando Perez
Added files from our zmq prototype into main ipython tree....
r2597 """Tab-completion over zmq"""
# Trying to get print statements to work during completion, not very
# successfully...
from __future__ import print_function
import itertools
MinRK
allow IPython.zmq.completer to be imported without readline...
r5681 try:
import readline
except ImportError:
readline = None
Fernando Perez
Added files from our zmq prototype into main ipython tree....
r2597 import rlcompleter
import time
import session
class KernelCompleter(object):
"""Kernel-side completion machinery."""
def __init__(self, namespace):
self.namespace = namespace
self.completer = rlcompleter.Completer(namespace)
def complete(self, line, text):
# We'll likely use linel later even if now it's not used for anything
matches = []
complete = self.completer.complete
for state in itertools.count():
comp = complete(text, state)
if comp is None:
break
matches.append(comp)
return matches
class ClientCompleter(object):
"""Client-side completion machinery.
How it works: self.complete will be called multiple times, with
state=0,1,2,... When state=0 it should compute ALL the completion matches,
and then return them for each value of state."""
def __init__(self, client, session, socket):
MinRK
allow IPython.zmq.completer to be imported without readline...
r5681 # ugly, but we get called asynchronously and need access to some
# client state, like backgrounded code
assert readline is not None, "ClientCompleter depends on readline"
Fernando Perez
Added files from our zmq prototype into main ipython tree....
r2597 self.client = client
self.session = session
self.socket = socket
self.matches = []
def request_completion(self, text):
# Get full line to give to the kernel in case it wants more info.
line = readline.get_line_buffer()
# send completion request to kernel
msg = self.session.send(self.socket,
'complete_request',
dict(text=text, line=line))
# Give the kernel up to 0.5s to respond
for i in range(5):
MinRK
all sends/recvs now via Session.send/recv....
r3269 ident,rep = self.session.recv(self.socket)
MinRK
small changes in response to pyflakes pass...
r6270 rep = session.Message(rep)
Fernando Perez
Added files from our zmq prototype into main ipython tree....
r2597 if rep is not None and rep.msg_type == 'complete_reply':
matches = rep.content.matches
break
time.sleep(0.1)
else:
# timeout
print ('TIMEOUT') # Can't see this message...
matches = None
return matches
def complete(self, text, state):
if self.client.backgrounded > 0:
print("\n[Not completing, background tasks active]")
print(readline.get_line_buffer(), end='')
return None
if state==0:
matches = self.request_completion(text)
if matches is None:
self.matches = []
print('WARNING: Kernel timeout on tab completion.')
else:
self.matches = matches
try:
return self.matches[state]
except IndexError:
return None