mirror of
https://github.com/powerline/powerline.git
synced 2025-07-07 14:04:57 +02:00
Add support for full powerline reloading at runtime
Is not guaranteed to work in all cases.
This commit is contained in:
parent
ca13bc53e4
commit
94354475b5
@ -336,7 +336,11 @@ class Powerline(object):
|
|||||||
Instance of the class that manages (re)loading of the configuration.
|
Instance of the class that manages (re)loading of the configuration.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.init_args = (args, kwargs)
|
||||||
|
self.init(*args, **kwargs)
|
||||||
|
|
||||||
|
def init(self,
|
||||||
ext,
|
ext,
|
||||||
renderer_module=None,
|
renderer_module=None,
|
||||||
run_once=False,
|
run_once=False,
|
||||||
@ -344,6 +348,10 @@ class Powerline(object):
|
|||||||
use_daemon_threads=True,
|
use_daemon_threads=True,
|
||||||
shutdown_event=None,
|
shutdown_event=None,
|
||||||
config_loader=None):
|
config_loader=None):
|
||||||
|
'''Do actual initialization.
|
||||||
|
|
||||||
|
__init__ function only stores the arguments.
|
||||||
|
'''
|
||||||
self.ext = ext
|
self.ext = ext
|
||||||
self.run_once = run_once
|
self.run_once = run_once
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
@ -732,10 +740,42 @@ class Powerline(object):
|
|||||||
def setup(self, *args, **kwargs):
|
def setup(self, *args, **kwargs):
|
||||||
'''Setup the environment to use powerline.
|
'''Setup the environment to use powerline.
|
||||||
|
|
||||||
To be overridden by subclasses, this one only saves args and kwargs.
|
To be overridden by subclasses, this one only saves args and kwargs and
|
||||||
|
unsets shutdown_event.
|
||||||
'''
|
'''
|
||||||
|
self.shutdown_event.clear()
|
||||||
self.setup_args = (args, kwargs)
|
self.setup_args = (args, kwargs)
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
'''Reload powerline after update.
|
||||||
|
|
||||||
|
Should handle most (but not all) powerline updates.
|
||||||
|
|
||||||
|
Purges out all powerline modules and modules imported by powerline for
|
||||||
|
segment and matcher functions. Requires defining ``setup`` function that
|
||||||
|
updates reference to main powerline object.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
Not guaranteed to work properly, use it at your own risk. It
|
||||||
|
may break your python code.
|
||||||
|
'''
|
||||||
|
from imp import reload
|
||||||
|
modules = self.imported_modules | set((module for module in sys.modules if module.startswith('powerline')))
|
||||||
|
modules_holder = []
|
||||||
|
for module in modules:
|
||||||
|
try:
|
||||||
|
# Needs to hold module to prevent garbage collecting until they
|
||||||
|
# are all reloaded.
|
||||||
|
modules_holder.append(sys.modules.pop(module))
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
PowerlineClass = getattr(__import__(self.__module__, fromlist=(self.__class__.__name__,)), self.__class__.__name__)
|
||||||
|
self.shutdown(set_event=True)
|
||||||
|
init_args, init_kwargs = self.init_args
|
||||||
|
powerline = PowerlineClass(*init_args, **init_kwargs)
|
||||||
|
setup_args, setup_kwargs = self.setup_args
|
||||||
|
powerline.setup(*setup_args, **setup_kwargs)
|
||||||
|
|
||||||
def shutdown(self, set_event=True):
|
def shutdown(self, set_event=True):
|
||||||
'''Shut down all background threads.
|
'''Shut down all background threads.
|
||||||
|
|
||||||
|
@ -43,12 +43,12 @@ class PowerlinePromptManager(PromptManager):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigurableIpythonPowerline(IpythonPowerline):
|
class ConfigurableIpythonPowerline(IpythonPowerline):
|
||||||
def __init__(self, ip, is_prompt, old_widths):
|
def init(self, ip, is_prompt, old_widths):
|
||||||
config = ip.config.Powerline
|
config = ip.config.Powerline
|
||||||
self.config_overrides = config.get('config_overrides')
|
self.config_overrides = config.get('config_overrides')
|
||||||
self.theme_overrides = config.get('theme_overrides', {})
|
self.theme_overrides = config.get('theme_overrides', {})
|
||||||
self.paths = config.get('paths')
|
self.paths = config.get('paths')
|
||||||
super(ConfigurableIpythonPowerline, self).__init__(is_prompt, old_widths)
|
super(ConfigurableIpythonPowerline, self).init(is_prompt, old_widths)
|
||||||
|
|
||||||
|
|
||||||
old_prompt_manager = None
|
old_prompt_manager = None
|
||||||
|
@ -86,11 +86,11 @@ class PowerlinePrompt2(PowerlinePromptOut):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigurableIpythonPowerline(IpythonPowerline):
|
class ConfigurableIpythonPowerline(IpythonPowerline):
|
||||||
def __init__(self, is_prompt, old_widths, config_overrides=None, theme_overrides={}, paths=None):
|
def init(self, is_prompt, old_widths, config_overrides=None, theme_overrides={}, paths=None):
|
||||||
self.config_overrides = config_overrides
|
self.config_overrides = config_overrides
|
||||||
self.theme_overrides = theme_overrides
|
self.theme_overrides = theme_overrides
|
||||||
self.paths = paths
|
self.paths = paths
|
||||||
super(ConfigurableIpythonPowerline, self).__init__(is_prompt, old_widths)
|
super(ConfigurableIpythonPowerline, self).init(is_prompt, old_widths)
|
||||||
|
|
||||||
|
|
||||||
def setup(**kwargs):
|
def setup(**kwargs):
|
||||||
|
@ -23,8 +23,8 @@ class RewriteResult(object):
|
|||||||
|
|
||||||
|
|
||||||
class IpythonPowerline(Powerline):
|
class IpythonPowerline(Powerline):
|
||||||
def __init__(self, is_prompt, old_widths):
|
def init(self, is_prompt, old_widths):
|
||||||
super(IpythonPowerline, self).__init__(
|
super(IpythonPowerline, self).init(
|
||||||
'ipython',
|
'ipython',
|
||||||
renderer_module=('.prompt' if is_prompt else None),
|
renderer_module=('.prompt' if is_prompt else None),
|
||||||
use_daemon_threads=True
|
use_daemon_threads=True
|
||||||
|
@ -14,10 +14,10 @@ def mergeargs(argvalue):
|
|||||||
|
|
||||||
|
|
||||||
class ShellPowerline(Powerline):
|
class ShellPowerline(Powerline):
|
||||||
def __init__(self, args, **kwargs):
|
def init(self, args, **kwargs):
|
||||||
self.args = args
|
self.args = args
|
||||||
self.theme_option = args.theme_option
|
self.theme_option = args.theme_option
|
||||||
super(ShellPowerline, self).__init__(args.ext[0], args.renderer_module, **kwargs)
|
super(ShellPowerline, self).init(args.ext[0], args.renderer_module, **kwargs)
|
||||||
|
|
||||||
def load_main_config(self):
|
def load_main_config(self):
|
||||||
r = super(ShellPowerline, self).load_main_config()
|
r = super(ShellPowerline, self).load_main_config()
|
||||||
|
@ -23,8 +23,8 @@ def _override_from(config, override_varname):
|
|||||||
|
|
||||||
|
|
||||||
class VimPowerline(Powerline):
|
class VimPowerline(Powerline):
|
||||||
def __init__(self, pyeval='PowerlinePyeval', **kwargs):
|
def init(self, pyeval='PowerlinePyeval', **kwargs):
|
||||||
super(VimPowerline, self).__init__('vim', **kwargs)
|
super(VimPowerline, self).init('vim', **kwargs)
|
||||||
self.last_window_id = 1
|
self.last_window_id = 1
|
||||||
self.pyeval = pyeval
|
self.pyeval = pyeval
|
||||||
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
|
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user