mirror of
https://github.com/powerline/powerline.git
synced 2025-07-31 01:35:40 +02:00
Implement powerline reloading in libzpython bindings
This commit is contained in:
parent
015a2160ce
commit
23a3dc8f3c
@ -1,18 +1,22 @@
|
|||||||
# vim:fileencoding=utf-8:noet
|
# vim:fileencoding=utf-8:noet
|
||||||
from __future__ import absolute_import, unicode_literals, division, print_function
|
from __future__ import absolute_import, unicode_literals, division, print_function
|
||||||
|
|
||||||
import zsh
|
|
||||||
import atexit
|
import atexit
|
||||||
|
|
||||||
|
import zsh
|
||||||
|
|
||||||
|
from weakref import WeakValueDictionary, ref
|
||||||
|
|
||||||
from powerline.shell import ShellPowerline
|
from powerline.shell import ShellPowerline
|
||||||
from powerline.lib import parsedotval
|
from powerline.lib import parsedotval
|
||||||
from powerline.lib.unicode import unicode
|
from powerline.lib.unicode import unicode
|
||||||
|
|
||||||
|
|
||||||
used_powerlines = []
|
used_powerlines = WeakValueDictionary()
|
||||||
|
|
||||||
|
|
||||||
def shutdown():
|
def shutdown():
|
||||||
for powerline in used_powerlines:
|
for powerline in tuple(used_powerlines.values()):
|
||||||
powerline.shutdown()
|
powerline.shutdown()
|
||||||
|
|
||||||
|
|
||||||
@ -94,17 +98,28 @@ environ = Environment()
|
|||||||
|
|
||||||
|
|
||||||
class ZshPowerline(ShellPowerline):
|
class ZshPowerline(ShellPowerline):
|
||||||
|
def init(self, **kwargs):
|
||||||
|
super(ZshPowerline, self).init(Args(), **kwargs)
|
||||||
|
|
||||||
def precmd(self):
|
def precmd(self):
|
||||||
self.args.last_pipe_status = zsh.pipestatus()
|
self.args.last_pipe_status = zsh.pipestatus()
|
||||||
self.args.last_exit_code = zsh.last_exit_code()
|
self.args.last_exit_code = zsh.last_exit_code()
|
||||||
|
|
||||||
|
def do_setup(self, zsh_globals):
|
||||||
|
set_prompt(self, 'PS1', 'left', None, above=True)
|
||||||
|
set_prompt(self, 'RPS1', 'right', None)
|
||||||
|
set_prompt(self, 'PS2', 'left', 'continuation')
|
||||||
|
set_prompt(self, 'RPS2', 'right', 'continuation')
|
||||||
|
set_prompt(self, 'PS3', 'left', 'select')
|
||||||
|
used_powerlines[id(self)] = self
|
||||||
|
zsh_globals['_powerline'] = self
|
||||||
|
|
||||||
|
|
||||||
class Prompt(object):
|
class Prompt(object):
|
||||||
__slots__ = ('powerline', 'side', 'savedpsvar', 'savedps', 'args', 'theme', 'above')
|
__slots__ = ('powerline', 'side', 'savedpsvar', 'savedps', 'args', 'theme', 'above', '__weakref__')
|
||||||
|
|
||||||
def __init__(self, powerline, side, theme, savedpsvar=None, savedps=None, above=False):
|
def __init__(self, powerline, side, theme, savedpsvar=None, savedps=None, above=False):
|
||||||
self.powerline = powerline
|
self.powerline = powerline
|
||||||
powerline.setup(self)
|
|
||||||
self.side = side
|
self.side = side
|
||||||
self.above = above
|
self.above = above
|
||||||
self.savedpsvar = savedpsvar
|
self.savedpsvar = savedpsvar
|
||||||
@ -143,8 +158,6 @@ class Prompt(object):
|
|||||||
def __del__(self):
|
def __del__(self):
|
||||||
if self.savedps:
|
if self.savedps:
|
||||||
zsh.setvalue(self.savedpsvar, self.savedps)
|
zsh.setvalue(self.savedpsvar, self.savedps)
|
||||||
used_powerlines.remove(self.powerline)
|
|
||||||
if self.powerline not in used_powerlines:
|
|
||||||
self.powerline.shutdown()
|
self.powerline.shutdown()
|
||||||
|
|
||||||
|
|
||||||
@ -155,18 +168,18 @@ def set_prompt(powerline, psvar, side, theme, above=False):
|
|||||||
savedps = None
|
savedps = None
|
||||||
zpyvar = 'ZPYTHON_POWERLINE_' + psvar
|
zpyvar = 'ZPYTHON_POWERLINE_' + psvar
|
||||||
prompt = Prompt(powerline, side, theme, psvar, savedps, above)
|
prompt = Prompt(powerline, side, theme, psvar, savedps, above)
|
||||||
|
zsh.eval('unset ' + zpyvar)
|
||||||
zsh.set_special_string(zpyvar, prompt)
|
zsh.set_special_string(zpyvar, prompt)
|
||||||
zsh.setvalue(psvar, '${' + zpyvar + '}')
|
zsh.setvalue(psvar, '${' + zpyvar + '}')
|
||||||
|
return ref(prompt)
|
||||||
|
|
||||||
|
|
||||||
def setup():
|
def reload():
|
||||||
powerline = ZshPowerline(Args())
|
for powerline in tuple(used_powerlines.values()):
|
||||||
used_powerlines.append(powerline)
|
powerline.reload()
|
||||||
used_powerlines.append(powerline)
|
|
||||||
set_prompt(powerline, 'PS1', 'left', None, above=True)
|
|
||||||
set_prompt(powerline, 'RPS1', 'right', None)
|
def setup(zsh_globals):
|
||||||
set_prompt(powerline, 'PS2', 'left', 'continuation')
|
powerline = ZshPowerline()
|
||||||
set_prompt(powerline, 'RPS2', 'right', 'continuation')
|
powerline.setup(zsh_globals)
|
||||||
set_prompt(powerline, 'PS3', 'left', 'select')
|
|
||||||
atexit.register(shutdown)
|
atexit.register(shutdown)
|
||||||
return powerline
|
|
||||||
|
@ -122,7 +122,7 @@ _powerline_setup_prompt() {
|
|||||||
if test -z "${POWERLINE_NO_ZSH_ZPYTHON}" && { zmodload libzpython || zmodload zsh/zpython } &>/dev/null ; then
|
if test -z "${POWERLINE_NO_ZSH_ZPYTHON}" && { zmodload libzpython || zmodload zsh/zpython } &>/dev/null ; then
|
||||||
precmd_functions+=( _powerline_update_counter )
|
precmd_functions+=( _powerline_update_counter )
|
||||||
zpython 'from powerline.bindings.zsh import setup as _powerline_setup'
|
zpython 'from powerline.bindings.zsh import setup as _powerline_setup'
|
||||||
zpython '_powerline = _powerline_setup()'
|
zpython '_powerline_setup(globals())'
|
||||||
zpython 'del _powerline_setup'
|
zpython 'del _powerline_setup'
|
||||||
else
|
else
|
||||||
if test -z "${POWERLINE_COMMAND}" ; then
|
if test -z "${POWERLINE_COMMAND}" ; then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user