mirror of
https://github.com/powerline/powerline.git
synced 2025-07-22 21:35:14 +02:00
Move code to powerline.vim.setup
This commit is contained in:
parent
0823f29f7d
commit
35e723e093
@ -15,18 +15,18 @@ if ! has('python') && ! has('python3')
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:powerline_pycmd = substitute(get(g:, 'powerline_pycmd', has('python') ? 'py' : 'py3'),
|
let s:pycmd = substitute(get(g:, 'powerline_pycmd', has('python') ? 'py' : 'py3'),
|
||||||
\'\v^(py)%[thon](3?)$', '\1\2', '')
|
\'\v^(py)%[thon](3?)$', '\1\2', '')
|
||||||
let s:powerline_pyeval = get(g:, 'powerline_pyeval', s:powerline_pycmd.'eval')
|
let s:pyeval = get(g:, 'powerline_pyeval', s:pycmd.'eval')
|
||||||
|
|
||||||
let s:import_cmd = 'from powerline.vim import VimPowerline'
|
let s:import_cmd = 'from powerline.vim import setup as powerline_setup'
|
||||||
try
|
try
|
||||||
exec s:powerline_pycmd "try:\n"
|
execute s:pycmd "try:\n"
|
||||||
\ ." ".s:import_cmd."\n"
|
\ ." ".s:import_cmd."\n"
|
||||||
\ ."except ImportError:\n"
|
\ ."except ImportError:\n"
|
||||||
\ ." import sys, vim\n"
|
\ ." import sys, vim\n"
|
||||||
\ ." sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n"
|
\ ." sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n"
|
||||||
\ ." ".s:import_cmd
|
\ ." ".s:import_cmd
|
||||||
let s:launched = 1
|
let s:launched = 1
|
||||||
finally
|
finally
|
||||||
if !exists('s:launched')
|
if !exists('s:launched')
|
||||||
@ -40,23 +40,5 @@ finally
|
|||||||
endif
|
endif
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
if !get(g:, 'powerline_debugging_pyeval') && exists('*'. s:powerline_pyeval)
|
execute s:pycmd 'powerline_setup(pyeval=vim.eval("s:pyeval"), pycmd=vim.eval("s:pycmd"))'
|
||||||
let PowerlinePyeval = function(s:powerline_pyeval)
|
execute s:pycmd 'del powerline_setup'
|
||||||
else
|
|
||||||
exec s:powerline_pycmd 'import json, vim'
|
|
||||||
exec "function! PowerlinePyeval(e)\n".
|
|
||||||
\ s:powerline_pycmd." vim.command('return ' + json.dumps(eval(vim.eval('a:e'))))\n".
|
|
||||||
\"endfunction"
|
|
||||||
endif
|
|
||||||
|
|
||||||
augroup Powerline
|
|
||||||
autocmd! ColorScheme * :exec s:powerline_pycmd 'powerline.reset_highlight()'
|
|
||||||
autocmd! VimEnter * :redrawstatus!
|
|
||||||
autocmd! VimLeavePre * :exec s:powerline_pycmd 'powerline.shutdown()'
|
|
||||||
augroup END
|
|
||||||
|
|
||||||
exec s:powerline_pycmd 'powerline = VimPowerline()'
|
|
||||||
exec s:powerline_pycmd 'del VimPowerline'
|
|
||||||
" Is immediately changed when PowerlineNew() function is run. Good for global
|
|
||||||
" value.
|
|
||||||
set statusline=%!PowerlinePyeval('powerline.new_window()')
|
|
||||||
|
@ -9,6 +9,9 @@ from powerline.matcher import gen_matcher_getter
|
|||||||
import vim
|
import vim
|
||||||
from itertools import count
|
from itertools import count
|
||||||
|
|
||||||
|
if not hasattr(vim, 'bindeval'):
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
vim_exists = vim_get_func('exists', rettype=int)
|
vim_exists = vim_get_func('exists', rettype=int)
|
||||||
vim_getwinvar = vim_get_func('getwinvar')
|
vim_getwinvar = vim_get_func('getwinvar')
|
||||||
@ -26,13 +29,11 @@ def _override_from(config, override_varname):
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
WINDOW_STASUSLINE = '%!PowerlinePyeval(\'powerline.statusline({0})\')'
|
|
||||||
|
|
||||||
|
|
||||||
class VimPowerline(Powerline):
|
class VimPowerline(Powerline):
|
||||||
def __init__(self):
|
def __init__(self, pyeval='PowerlinePyeval'):
|
||||||
super(VimPowerline, self).__init__('vim')
|
super(VimPowerline, self).__init__('vim')
|
||||||
self.last_window_id = 1
|
self.last_window_id = 1
|
||||||
|
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
|
||||||
|
|
||||||
def add_local_theme(self, key, config):
|
def add_local_theme(self, key, config):
|
||||||
'''Add local themes at runtime (during vim session).
|
'''Add local themes at runtime (during vim session).
|
||||||
@ -111,7 +112,7 @@ class VimPowerline(Powerline):
|
|||||||
curwindow_id = self.last_window_id
|
curwindow_id = self.last_window_id
|
||||||
self.last_window_id += 1
|
self.last_window_id += 1
|
||||||
window.vars['powerline_window_id'] = curwindow_id
|
window.vars['powerline_window_id'] = curwindow_id
|
||||||
statusline = WINDOW_STASUSLINE.format(curwindow_id)
|
statusline = self.window_statusline.format(curwindow_id)
|
||||||
if window.options['statusline'] != statusline:
|
if window.options['statusline'] != statusline:
|
||||||
window.options['statusline'] = statusline
|
window.options['statusline'] = statusline
|
||||||
if curwindow_id == window_id if window_id else window is vim.current.window:
|
if curwindow_id == window_id if window_id else window is vim.current.window:
|
||||||
@ -129,7 +130,7 @@ class VimPowerline(Powerline):
|
|||||||
curwindow_id = self.last_window_id
|
curwindow_id = self.last_window_id
|
||||||
self.last_window_id += 1
|
self.last_window_id += 1
|
||||||
vim_setwinvar(winnr, 'powerline_window_id', curwindow_id)
|
vim_setwinvar(winnr, 'powerline_window_id', curwindow_id)
|
||||||
statusline = WINDOW_STASUSLINE.format(curwindow_id)
|
statusline = self.window_statusline.format(curwindow_id)
|
||||||
if vim_getwinvar(winnr, '&statusline') != statusline:
|
if vim_getwinvar(winnr, '&statusline') != statusline:
|
||||||
vim_setwinvar(winnr, '&statusline', statusline)
|
vim_setwinvar(winnr, '&statusline', statusline)
|
||||||
if curwindow_id == window_id if window_id else window is vim.current.window:
|
if curwindow_id == window_id if window_id else window is vim.current.window:
|
||||||
@ -146,3 +147,46 @@ class VimPowerline(Powerline):
|
|||||||
def new_window(self):
|
def new_window(self):
|
||||||
window, window_id, winnr = self.win_idx(None)
|
window, window_id, winnr = self.win_idx(None)
|
||||||
return self.render(window, window_id, winnr)
|
return self.render(window, window_id, winnr)
|
||||||
|
|
||||||
|
if not hasattr(vim, 'bindeval'):
|
||||||
|
# Method for PowerlinePyeval function. Is here to reduce the number of
|
||||||
|
# requirements to __main__ globals to just one powerline object
|
||||||
|
# (previously it required as well vim and json)
|
||||||
|
@staticmethod
|
||||||
|
def pyeval():
|
||||||
|
vim.command('return ' + json.dumps(eval(vim.eval('a:e'))))
|
||||||
|
|
||||||
|
|
||||||
|
def setup(pyeval=None, pycmd=None):
|
||||||
|
import sys
|
||||||
|
import __main__
|
||||||
|
if not pyeval:
|
||||||
|
pyeval = 'pyeval' if sys.version_info < (3,) else 'py3eval'
|
||||||
|
if not pycmd:
|
||||||
|
pycmd = 'python' if sys.version_info < (3,) else 'python3'
|
||||||
|
|
||||||
|
# pyeval() and vim.bindeval were both introduced in one patch
|
||||||
|
if not hasattr(vim, 'bindeval'):
|
||||||
|
vim.command(('''
|
||||||
|
function! PowerlinePyeval(e)
|
||||||
|
{pycmd} powerline.pyeval()
|
||||||
|
endfunction
|
||||||
|
''').format(pycmd=pycmd))
|
||||||
|
pyeval = 'PowerlinePyeval'
|
||||||
|
|
||||||
|
powerline = VimPowerline(pyeval)
|
||||||
|
__main__.powerline = powerline
|
||||||
|
|
||||||
|
# Cannot have this in one line due to weird newline handling (in :execute
|
||||||
|
# context newline is considered part of the command in just the same cases
|
||||||
|
# when bar is considered part of the command (unless defining function
|
||||||
|
# inside :execute)). vim.command is :execute equivalent regarding this case.
|
||||||
|
vim.command('augroup Powerline')
|
||||||
|
vim.command(' autocmd! ColorScheme * :{pycmd} powerline.reset_highlight()'.format(pycmd=pycmd))
|
||||||
|
vim.command(' autocmd! VimEnter * :redrawstatus!')
|
||||||
|
vim.command(' autocmd! VimLeavePre * :{pycmd} powerline.shutdown()'.format(pycmd=pycmd))
|
||||||
|
vim.command('augroup END')
|
||||||
|
|
||||||
|
# Is immediately changed after new_window function is run. Good for global
|
||||||
|
# value.
|
||||||
|
vim.command('set statusline=%!{pyeval}(\'powerline.new_window()\')'.format(pyeval=pyeval))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user