##// END OF EJS Templates
usability and cross browser compat for completer...
usability and cross browser compat for completer - dissmiss the completer, append what alredy type, **Plus** one caracter in some cases List of special caracter that are handle are in a given list `()[]./\-+` for the moment. usefull for exaple when typing : >>> np.s<tab>in( and not having to type '(' twice. they are handle separately has the [a-zA-Z] ones because otherwise they will screw up the regexp, and are opt-in to avoid bugs with invisible caracters send because some browser have 'keypress' event for meta keys close #1080 Note to this commit : list of test for the completer across browser with --pylab=inline flag #test direct one completion plt.an<tab> -> plt.annotate #test filter,tab, only one completion plt.a<tab>n<tab> -> plt.annotate # test partial common beggining # test dismmised if user erase plt.a<tab>nn<backspace><backspace>u<tab> -> completer to `aut` ........................................<tab><tab><tab> -> nothing should append .......................................................<backspace><backspace<backspace> -> completer cancelled #test dismiss if no more completion plt.s<tab>c -> completer 3 choices ...........u -> dismissed whith what user have typed. `plt.scu` # test dismiss in no completion, special symbol # opt-in list of caracters +-/\()[]. np<tab>.s -> a 'dot' sould dismiss the completer and be appended .........<tab>in( -> np.sin( np.s<tab>in[ -> np.sin[

File last commit:

r5390:c82649ea
r5635:c630b34a
Show More
heartbeat.py
48 lines | 1.6 KiB | text/x-python | PythonLexer
"""The client and server for a basic ping-pong style heartbeat.
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import socket
import sys
from threading import Thread
import zmq
from IPython.utils.localinterfaces import LOCALHOST
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class Heartbeat(Thread):
"A simple ping-pong style heartbeat that runs in a thread."
def __init__(self, context, addr=(LOCALHOST, 0)):
Thread.__init__(self)
self.context = context
self.ip, self.port = addr
if self.port == 0:
s = socket.socket()
# '*' means all interfaces to 0MQ, which is '' to socket.socket
s.bind(('' if self.ip == '*' else self.ip, 0))
self.port = s.getsockname()[1]
s.close()
self.addr = (self.ip, self.port)
self.daemon = True
def run(self):
self.socket = self.context.socket(zmq.REP)
self.socket.bind('tcp://%s:%i' % self.addr)
zmq.device(zmq.FORWARDER, self.socket, self.socket)