mirror of
https://github.com/powerline/powerline.git
synced 2025-07-29 08:45:15 +02:00
Add IPython prompt support
This commit is contained in:
parent
98269a4bb5
commit
0b251425da
@ -134,3 +134,26 @@ Add the following line to your :file:`tmux.conf`, where ``{path}`` is the
|
|||||||
absolute path to your Powerline installation directory::
|
absolute path to your Powerline installation directory::
|
||||||
|
|
||||||
source '{path}/powerline/bindings/tmux/powerline.conf'
|
source '{path}/powerline/bindings/tmux/powerline.conf'
|
||||||
|
|
||||||
|
IPython prompt
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
For IPython<0.11 add the following lines to your
|
||||||
|
:file:`.ipython/ipy_user_conf.py`::
|
||||||
|
|
||||||
|
# top
|
||||||
|
from powerline.bindings.ipython.pre_0_11 import setup as powerline_setup
|
||||||
|
|
||||||
|
# main() function (assuming you launched ipython without configuration to
|
||||||
|
# create skeleton ipy_user_conf.py file):
|
||||||
|
powerline_setup()
|
||||||
|
|
||||||
|
For IPython>=0.11 add the following line to your :file:`ipython_config.py`
|
||||||
|
file in the profile you are using::
|
||||||
|
|
||||||
|
c.InteractiveShellApp.extensions = [
|
||||||
|
'powerline.bindings.ipython.post_0_11'
|
||||||
|
]
|
||||||
|
|
||||||
|
IPython=0.11* is not supported and does not work. IPython<0.10 was not
|
||||||
|
tested (not installable by pip).
|
||||||
|
0
powerline/bindings/ipython/__init__.py
Normal file
0
powerline/bindings/ipython/__init__.py
Normal file
23
powerline/bindings/ipython/post_0_11.py
Normal file
23
powerline/bindings/ipython/post_0_11.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
from powerline.core import Powerline
|
||||||
|
|
||||||
|
from IPython.core.prompts import PromptManager
|
||||||
|
|
||||||
|
|
||||||
|
class PowerlinePromptManager(PromptManager):
|
||||||
|
powerline = None
|
||||||
|
|
||||||
|
def __init__(self, powerline, **kwargs):
|
||||||
|
self.powerline = powerline
|
||||||
|
super(PowerlinePromptManager, self).__init__(**kwargs)
|
||||||
|
|
||||||
|
def _render(self, name, color=True, *args, **kwargs):
|
||||||
|
if name != 'in':
|
||||||
|
return super(PowerlinePromptManager, self)._render(name, color, *args, **kwargs)
|
||||||
|
return self.powerline.renderer.render(color=color)
|
||||||
|
|
||||||
|
|
||||||
|
def load_ipython_extension(ip):
|
||||||
|
powerline = Powerline('ipython')
|
||||||
|
|
||||||
|
ip.prompt_manager = PowerlinePromptManager(powerline=powerline,
|
||||||
|
shell=ip.prompt_manager.shell, config=ip.prompt_manager.config)
|
27
powerline/bindings/ipython/pre_0_11.py
Normal file
27
powerline/bindings/ipython/pre_0_11.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from powerline.core import Powerline
|
||||||
|
from IPython.Prompts import BasePrompt
|
||||||
|
from IPython.ipapi import get as get_ipython
|
||||||
|
|
||||||
|
|
||||||
|
class PowerlinePrompt(BasePrompt):
|
||||||
|
def __init__(self, powerline, *args, **kwargs):
|
||||||
|
self.powerline = powerline
|
||||||
|
super(PowerlinePrompt, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_p_str(self):
|
||||||
|
self.p_str = self.powerline.renderer.render()
|
||||||
|
self.p_str_nocolor = self.powerline.renderer.render(color=False)
|
||||||
|
|
||||||
|
|
||||||
|
def setup(prompt='1'):
|
||||||
|
ip = get_ipython()
|
||||||
|
|
||||||
|
powerline = Powerline('ipython')
|
||||||
|
|
||||||
|
attr = 'prompt' + prompt
|
||||||
|
|
||||||
|
def late_startup_hook():
|
||||||
|
old_prompt = getattr(ip.IP.outputcache, attr)
|
||||||
|
setattr(ip.IP.outputcache, attr, PowerlinePrompt(powerline,
|
||||||
|
old_prompt.cache, old_prompt.sep, '', old_prompt.pad_left))
|
||||||
|
ip.IP.hooks.late_startup_hook.add(late_startup_hook)
|
25
powerline/config_files/colorschemes/ipython/default.json
Normal file
25
powerline/config_files/colorschemes/ipython/default.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "Default color scheme for IPython prompt",
|
||||||
|
"colors": {
|
||||||
|
"black": 16,
|
||||||
|
"white": 231,
|
||||||
|
|
||||||
|
"darkcyan": 74,
|
||||||
|
|
||||||
|
"gray0": 233,
|
||||||
|
"gray1": 235,
|
||||||
|
"gray2": 236,
|
||||||
|
"gray3": 239,
|
||||||
|
"gray4": 240,
|
||||||
|
"gray5": 241,
|
||||||
|
"gray6": 244,
|
||||||
|
"gray7": 245,
|
||||||
|
"gray8": 247,
|
||||||
|
"gray9": 250,
|
||||||
|
"gray10": 252
|
||||||
|
},
|
||||||
|
"groups": {
|
||||||
|
"virtualenv": { "fg": "white", "bg": "darkcyan" },
|
||||||
|
"prompt": { "fg": "gray9", "bg": "gray4" }
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,10 @@
|
|||||||
"local_themes": {
|
"local_themes": {
|
||||||
"help": "help"
|
"help": "help"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"ipython": {
|
||||||
|
"colorscheme": "default",
|
||||||
|
"theme": "default"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
powerline/config_files/themes/ipython/default.json
Normal file
16
powerline/config_files/themes/ipython/default.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"default_module": "powerline.segments.common",
|
||||||
|
"segments": {
|
||||||
|
"left": [
|
||||||
|
{
|
||||||
|
"name": "virtualenv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"contents": "In:",
|
||||||
|
"highlight_group": ["prompt"],
|
||||||
|
"draw_divider": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
16
powerline/renderers/ipython.py
Normal file
16
powerline/renderers/ipython.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from powerline.renderers.shell import ShellRenderer
|
||||||
|
|
||||||
|
|
||||||
|
class IpythonRenderer(ShellRenderer):
|
||||||
|
'''Powerline ipython segment renderer.'''
|
||||||
|
def render(self, color=True, *args, **kwargs):
|
||||||
|
self.color = color
|
||||||
|
return super(IpythonRenderer, self).render(*args, **kwargs)
|
||||||
|
|
||||||
|
def hl(self, *args, **kwargs):
|
||||||
|
if not self.color:
|
||||||
|
return ''
|
||||||
|
else:
|
||||||
|
return '\x01' + super(IpythonRenderer, self).hl(*args, **kwargs) + '\x02'
|
Loading…
x
Reference in New Issue
Block a user