Re: New IPython 5 prompt

Carl Smith <[email protected]> Sun, 21 Aug 2016 17:01:19 +0100
Newsgroups gmane.comp.python.ipython.user
Message-ID <CAP-uhDfrMegRRVunHmVQae=YB_QQiM-Jh-sQao28pTucqaBVSQ@mail.gmail.com>
--===============2246705366542396591==
Content-Type: multipart/alternative; boundary=001a113d9e96d7e5e9053a970a53

--001a113d9e96d7e5e9053a970a53
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Sorry for the noise. Just thought to share my prompt code too.

It changes the prompt based on whether you're entering a magic or command,
implicitly or explicitly etc. My config runs %rehashx when IPython starts
to turn all of the OS X commands into magics (except `from` as it conflicts
with `%autocall` and `from x import y`). My prompts class has a method
(`rehash`) for updating its list of line magics, and I have a magic named
`%rehash` that wraps `%rehashx` and `CustomPrompts.rehash`, for when new
commands are added to the system during an IPython session.

*from IPython.core.magic import register_line_magic as line_magic*
*from IPython.terminal.prompts import Prompts, Token*

*class CustomPrompts(Prompts):*

*    def __init__(self, shell):*

*        self.cli =3D None*
*        self.shell =3D shell*
*        self.rehash()*

*    def rehash(self):*

*        self.commands =3D self.shell.magics_manager.magics["line"].keys()*

*    def input_prompt(self, cli):*

*        if not cli: return "=E2=96=B9 "*
*        text =3D cli.buffers["DEFAULT_BUFFER"].text*
*        if text.startswith("%") or text.startswith("!"): return ": "*
*        magic =3D "\n" not in text and text.split(" ")[0] in self.commands=
*
*        return "% " if magic else "=E2=96=B9 "*

*    def in_prompt_tokens(self, cli=3DNone): return [*
*        (Token.Number, "("),*
*        (Token.Prompt, str(self.shell.execution_count)),*
*        (Token.Number, ")"),*
*        (Token.Prompt, self.input_prompt(cli))*
*        ]*

    *def out_prompt_tokens(self): return [*
*        (Token.Number, "("),*
*        (Token.OutPrompt, str(self.shell.execution_count)),*
*        (Token.Number, ")"),*
*        (Token.OutPrompt, "=E2=96=B9 ")*
*        ]*

*    def continuation_prompt_tokens(self, cli=3DNone, width=3DNone):*
*        if width is None: width =3D self._width()*
*        return [(Token.Prompt, " " * (width - 5) + "   =E2=96=B9 ")]*

*    def rewrite_prompt_tokens(self): return [*
*        (Token.Number, ('=E2=96=B9' * (self._width() - 2))),*
*        (Token.Number, '=E2=96=B9 ')*
*        ]*

*@line_magic*
*def rehash(silent=3DFalse):*

*    % rehashx*
*    del ip.magics_manager.magics["line"]["from"]*
*    ip.prompts.rehash()*
*    if not silent: print("System magic updated.")*

*ip =3D get_ipython()*
*ip.prompts =3D CustomPrompts(ip)*

*% rehash quiet*

*del rehash*

I know the code's a bit messy. It's just what I had, and should offer
enough clues to figure out how to do most things.

Hope it helps,

-- Carl Smith
[email protected]

On 21 August 2016 at 16:36, Carl Smith <[email protected]> wrote:

> I have this in my ipython_config file:
>
> *from pygments.token import Token*
>
> *c.TerminalInteractiveShell.highlighting_style =3D 'lovelace'*
>
> *c.TerminalInteractiveShell.highlighting_style_overrides =3D {*
> *    Token.Prompt: '#00cccc',*
> *    Token.PromptNum: '#00bbcc bold',*
> *    Token.OutPrompt: '#cc00cc',*
> *    Token.OutPromptNum: '#bb00cc bold',*
> *    }*
>
> With a dark background, it looks really nice. It uses a teal/cyan colour
> for inputs and hotpink for outputs, so if you like cyan, you might like
> this. You can use it as a starting point at least.
>
> Best,
>
> -- Carl Smith
> [email protected]
>
> On 21 August 2016 at 16:27, Carl Smith <[email protected]> wrote:
>
>> On 21 August 2016 at 16:05, Thomas Kluyver <[email protected]> wrote:
>>
>>>
>>> We appreciate this is a bit more fiddly for simple custom prompts, but
>>> the advantages of using prompt_toolkit outweigh it.
>>>
>>
>> =E2=80=8BAgreed=E2=80=8B. It is more complex, but once you understand th=
e API, you can
>> easily do everything you could do before, and there's some really nice n=
ew
>> features and fixes. Prompt toolkit is awesome.
>>
>> -- Carl Smith
>> [email protected]
>>
>>
>

--001a113d9e96d7e5e9053a970a53
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac=
e,monospace;font-size:small;color:rgb(68,68,68)">Sorry for the noise. Just =
thought to share my prompt code too.</div><div class=3D"gmail_default" styl=
e=3D"font-family:monospace,monospace;font-size:small;color:rgb(68,68,68)"><=
br></div><div class=3D"gmail_default" style=3D"font-family:monospace,monosp=
ace;font-size:small;color:rgb(68,68,68)">It changes the prompt based on whe=
ther you&#39;re entering a magic or command, implicitly or explicitly etc. =
My config runs %rehashx when IPython starts to turn all of the OS X command=
s into magics (except `from` as it conflicts with `%autocall` and `from x i=
mport y`). My prompts class has a method (`rehash`) for updating its list o=
f line magics, and I have a magic named `%rehash` that wraps `%rehashx` and=
 `CustomPrompts.rehash`, for when new commands are added to the system duri=
ng an IPython session.</div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace,monospace;font-size:small;color:rgb(68,68,68)"><br></div><div =
class=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospac=
e, monospace"><b>from IPython.core.magic import register_line_magic as line=
_magic</b></font><br></div><div class=3D"gmail_default" style=3D""><div cla=
ss=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospace, =
monospace"><b>from IPython.terminal.prompts import Prompts, Token</b></font=
></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=
=3D"monospace, monospace"><b><br></b></font></div><div class=3D"gmail_defau=
lt" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>cla=
ss CustomPrompts(Prompts):</b></font></div><div class=3D"gmail_default" sty=
le=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b><br></b></=
font></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" =
face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 def __init__(self, shell):</=
b></font></div><div class=3D"gmail_default" style=3D""><font color=3D"#4444=
44" face=3D"monospace, monospace"><b><br></b></font></div><div class=3D"gma=
il_default" style=3D""><font color=3D"#444444" face=3D"monospace, monospace=
"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.cli =3D None</b></font></div><div cla=
ss=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospace, =
monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.shell =3D shell</b></font></=
div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D=
"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.rehash()</b></fo=
nt></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" fa=
ce=3D"monospace, monospace"><b><br></b></font></div><div class=3D"gmail_def=
ault" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=
=C2=A0 =C2=A0 def rehash(self):</b></font></div><div class=3D"gmail_default=
" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b><br><=
/b></font></div><div class=3D"gmail_default" style=3D""><font color=3D"#444=
444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 self.comm=
ands =3D self.shell.magics_manager.magics[&quot;line&quot;].keys()</b></fon=
t></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" fac=
e=3D"monospace, monospace"><b><br></b></font></div><div class=3D"gmail_defa=
ult" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=
=C2=A0 =C2=A0 def input_prompt(self, cli):</b></font></div><div class=3D"gm=
ail_default" style=3D""><font color=3D"#444444" face=3D"monospace, monospac=
e"><b><br></b></font></div><div class=3D"gmail_default" style=3D""><font co=
lor=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 if not cli: return &quot;=E2=96=B9 &quot;</b></font></div><div class=3D=
"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospace, monos=
pace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 text =3D cli.buffers[&quot;DEFAULT_BUF=
FER&quot;].text</b></font></div><div class=3D"gmail_default" style=3D""><fo=
nt color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 if text.startswith(&quot;%&quot;) or text.startswith(&quot;!&quot;):=
 return &quot;: &quot;</b></font></div><div class=3D"gmail_default" style=
=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 magic =3D &quot;\n&quot; not in text and text.split(&quot=
; &quot;)[0] in self.commands</b></font></div><div class=3D"gmail_default" =
style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 return &quot;% &quot; if magic else &quot;=E2=96=B9 &q=
uot;</b></font></div><div class=3D"gmail_default" style=3D""><font color=3D=
"#444444" face=3D"monospace, monospace"><b><br></b></font></div><div class=
=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospace, mo=
nospace"><b>=C2=A0 =C2=A0 def in_prompt_tokens(self, cli=3DNone): return [<=
/b></font></div><div class=3D"gmail_default" style=3D""><font color=3D"#444=
444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (Token.Nu=
mber, &quot;(&quot;),</b></font></div><div class=3D"gmail_default" style=3D=
""><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (Token.Prompt, str(self.shell.execution_count)),</b></font></=
div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D=
"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (Token.Number, &quot;=
)&quot;),</b></font></div><div class=3D"gmail_default" style=3D""><font col=
or=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0=
 (Token.Prompt, self.input_prompt(cli))</b></font></div><div class=3D"gmail=
_default" style=3D""><font color=3D"#444444" face=3D"monospace, monospace">=
<b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ]</b></font></div><div class=3D"gmail_defaul=
t" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><br></f=
ont></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" f=
ace=3D"monospace, monospace">=C2=A0 =C2=A0 <b>def out_prompt_tokens(self): =
return [</b></font></div><div class=3D"gmail_default" style=3D""><font colo=
r=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
(Token.Number, &quot;(&quot;),</b></font></div><div class=3D"gmail_default"=
 style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0=
 =C2=A0 =C2=A0 =C2=A0 (Token.OutPrompt, str(self.shell.execution_count)),</=
b></font></div><div class=3D"gmail_default" style=3D""><font color=3D"#4444=
44" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (Token.Num=
ber, &quot;)&quot;),</b></font></div><div class=3D"gmail_default" style=3D"=
"><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (Token.OutPrompt, &quot;=E2=96=B9 &quot;)</b></font></div><di=
v class=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monosp=
ace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ]</b></font></div><div class=
=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"monospace, mo=
nospace"><b><br></b></font></div><div class=3D"gmail_default" style=3D""><f=
ont color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 def co=
ntinuation_prompt_tokens(self, cli=3DNone, width=3DNone):</b></font></div><=
div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=3D"mono=
space, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 if width is None: width =
=3D self._width()</b></font></div><div class=3D"gmail_default" style=3D""><=
font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 return [(Token.Prompt, &quot; &quot; * (width - 5) + &quot; =C2=
=A0 =E2=96=B9 &quot;)]</b></font></div><div class=3D"gmail_default" style=
=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b><br></b></fo=
nt></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" fa=
ce=3D"monospace, monospace"><b>=C2=A0 =C2=A0 def rewrite_prompt_tokens(self=
): return [</b></font></div><div class=3D"gmail_default" style=3D""><font c=
olor=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (Token.Number, (&#39;=E2=96=B9&#39; * (self._width() - 2))),</b></font>=
</div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=
=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (Token.Number, &#3=
9;=E2=96=B9 &#39;)</b></font></div><div class=3D"gmail_default" style=3D"">=
<font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 ]</b></font></div></div><div class=3D"gmail_default" style=3D"fo=
nt-family:monospace,monospace;font-size:small;color:rgb(68,68,68)"><br></di=
v><div class=3D"gmail_default" style=3D""><div class=3D"gmail_default" styl=
e=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>@line_magic=
</b></font></div><div class=3D"gmail_default" style=3D""><font color=3D"#44=
4444" face=3D"monospace, monospace"><b>def rehash(silent=3DFalse):</b></fon=
t></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" fac=
e=3D"monospace, monospace"><b><br></b></font></div><div class=3D"gmail_defa=
ult" style=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=
=C2=A0 =C2=A0 % rehashx</b></font></div><div class=3D"gmail_default" style=
=3D""><font color=3D"#444444" face=3D"monospace, monospace"><b>=C2=A0 =C2=
=A0 del ip.magics_manager.magics[&quot;line&quot;][&quot;from&quot;]</b></f=
ont></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" f=
ace=3D"monospace, monospace"><b>=C2=A0 =C2=A0 ip.prompts.rehash()</b></font=
></div><div class=3D"gmail_default" style=3D""><font color=3D"#444444" face=
=3D"monospace, monospace"><b>=C2=A0 =C2=A0 if not silent: print(&quot;Syste=
m magic updated.&quot;)</b></font></div><div style=3D"color:rgb(68,68,68);f=
ont-family:monospace,monospace;font-size:small"><b><br></b></div><div style=
=3D""><div style=3D"color:rgb(68,68,68);font-family:monospace,monospace;fon=
t-size:small"><b>ip =3D get_ipython()</b></div><div style=3D"color:rgb(68,6=
8,68);font-family:monospace,monospace;font-size:small"><b>ip.prompts =3D Cu=
stomPrompts(ip)</b></div><div style=3D"color:rgb(68,68,68);font-family:mono=
space,monospace;font-size:small"><b><br></b></div><div style=3D""><font col=
or=3D"#444444" face=3D"monospace, monospace"><b>% rehash quiet</b></font><b=
r></div><div style=3D""><font color=3D"#444444" face=3D"monospace, monospac=
e"><b>del rehash<br></b></font></div></div></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace,monospace;font-size:small;color:rgb(68,68=
,68)"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace=
,monospace;font-size:small;color:rgb(68,68,68)">I know the code&#39;s a bit=
 messy. It&#39;s just what I had, and should offer enough clues to figure o=
ut how to do most things.</div><div class=3D"gmail_default" style=3D"font-f=
amily:monospace,monospace;font-size:small;color:rgb(68,68,68)"><br></div><d=
iv class=3D"gmail_default" style=3D"font-family:monospace,monospace;font-si=
ze:small;color:rgb(68,68,68)">Hope it helps,</div></div><div class=3D"gmail=
_extra"><br clear=3D"all"><div><div class=3D"gmail_signature" data-smartmai=
l=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><div><div dir=
=3D"ltr"><span style=3D"color:rgb(115,115,115);font-style:italic;line-heigh=
t:18px"><font size=3D"1" face=3D"monospace, monospace">-- Carl Smith</font>=
</span><br></div></div><div><span style=3D"color:rgb(115,115,115);font-styl=
e:italic;line-height:18px"><font size=3D"1" face=3D"monospace, monospace"><=
a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]=
om</a></font></span></div></div></div></div></div></div>
<br><div class=3D"gmail_quote">On 21 August 2016 at 16:36, Carl Smith <span=
 dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monosp=
ace,monospace;font-size:small;color:rgb(68,68,68)">I have this in my ipytho=
n_config file:</div><div class=3D"gmail_default" style=3D"font-family:monos=
pace,monospace;font-size:small;color:rgb(68,68,68)"><br></div><div class=3D=
"gmail_default"><div class=3D"gmail_default" style=3D"color:rgb(68,68,68);f=
ont-family:monospace,monospace;font-size:small"><b>from pygments.token impo=
rt Token</b></div><div class=3D"gmail_default" style=3D"color:rgb(68,68,68)=
;font-family:monospace,monospace;font-size:small"><b><br></b></div><div><di=
v><font color=3D"#444444" face=3D"monospace, monospace"><b>c.TerminalIntera=
ctiveShell.<wbr>highlighting_style =3D &#39;lovelace&#39;</b></font></div><=
/div><div style=3D"color:rgb(68,68,68);font-family:monospace,monospace;font=
-size:small"><div><b><br></b></div><div><b>c.TerminalInteractiveShell.<wbr>=
highlighting_style_overrides =3D {</b></div><div><b>=C2=A0 =C2=A0 Token.Pro=
mpt: &#39;#00cccc&#39;,</b></div><div><b>=C2=A0 =C2=A0 Token.PromptNum: &#3=
9;#00bbcc bold&#39;,</b></div><div><b>=C2=A0 =C2=A0 Token.OutPrompt: &#39;#=
cc00cc&#39;,</b></div><div><b>=C2=A0 =C2=A0 Token.OutPromptNum: &#39;#bb00c=
c bold&#39;,</b></div><div><b>=C2=A0 =C2=A0 }</b></div><div><br></div><div>=
With a dark background, it looks really nice. It uses a teal/cyan colour fo=
r inputs and hotpink for outputs, so if you like cyan, you might like this.=
 You can use it as a starting point at least.</div><div><br></div><div>Best=
,</div></div></div></div><div class=3D"gmail_extra"><br clear=3D"all"><div>=
<div data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"l=
tr"><div><div dir=3D"ltr"><span style=3D"color:rgb(115,115,115);font-style:=
italic;line-height:18px"><font size=3D"1" face=3D"monospace, monospace">-- =
Carl Smith</font></span><br></div></div><div><span style=3D"color:rgb(115,1=
15,115);font-style:italic;line-height:18px"><font size=3D"1" face=3D"monosp=
ace, monospace"><a href=3D"mailto:[email protected]" target=3D"_blank">c=
[email protected]</a></font></span></div></div></div></div></div></div><d=
iv><div class=3D"h5">
<br><div class=3D"gmail_quote">On 21 August 2016 at 16:27, Carl Smith <span=
 dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex=
"><div dir=3D"ltr"><span><div class=3D"gmail_default" style=3D"font-family:=
monospace,monospace;font-size:small;color:rgb(68,68,68)"><span style=3D"fon=
t-family:arial,sans-serif;color:rgb(34,34,34)">On 21 August 2016 at 16:05, =
Thomas Kluyver </span><span dir=3D"ltr" style=3D"font-family:arial,sans-ser=
if;color:rgb(34,34,34)">&lt;<a href=3D"mailto:[email protected]" target=3D"_=
blank">[email protected]</a>&gt;</span><span style=3D"font-family:arial,sans=
-serif;color:rgb(34,34,34)"> wrote:</span><br></div></span><div class=3D"gm=
ail_extra"><div class=3D"gmail_quote"><span><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex"><div dir=3D"ltr"><span><div class=3D"gmail_extra"><div c=
lass=3D"gmail_quote"><br></div></div></span><div class=3D"gmail_extra">We a=
ppreciate this is a bit more fiddly for simple custom prompts, but the adva=
ntages of using prompt_toolkit outweigh it.</div></div></blockquote><div><b=
r></div></span><div><div class=3D"gmail_default" style=3D"font-family:monos=
pace,monospace;font-size:small;color:rgb(68,68,68)">=E2=80=8BAgreed=E2=80=
=8B. It is more complex, but once you understand the API, you can easily do=
 everything you could do before, and there&#39;s some really nice new featu=
res and fixes. Prompt toolkit is awesome.</div></div><span><font color=3D"#=
888888"><div class=3D"gmail_default" style=3D"font-family:monospace,monospa=
ce;font-size:small;color:rgb(68,68,68)"><br></div><div><div><div data-smart=
mail=3D"gmail_signature"><div dir=3D"ltr"><div dir=3D"ltr"><div><div dir=3D=
"ltr"><span style=3D"color:rgb(115,115,115);font-style:italic;line-height:1=
8px"><font size=3D"1" face=3D"monospace, monospace">-- Carl Smith</font></s=
pan><br></div></div><div><span style=3D"color:rgb(115,115,115);font-style:i=
talic;line-height:18px"><font size=3D"1" face=3D"monospace, monospace"><a h=
ref=3D"mailto:[email protected]" target=3D"_blank">[email protected]<=
/a></font></span></div><div><span style=3D"color:rgb(115,115,115);font-styl=
e:italic;line-height:18px"><br></span></div></div></div></div></div></div><=
/font></span></div></div></div>
</blockquote></div><br></div></div></div>
</blockquote></div><br></div>

--001a113d9e96d7e5e9053a970a53--

--===============2246705366542396591==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
IPython-User mailing list
[email protected]
https://mail.scipy.org/mailman/listinfo/ipython-user

--===============2246705366542396591==--