mirror of
https://github.com/powerline/powerline.git
synced 2025-07-22 05:14:58 +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
|
||||
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', '')
|
||||
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
|
||||
exec s:powerline_pycmd "try:\n"
|
||||
\ ." ".s:import_cmd."\n"
|
||||
\ ."except ImportError:\n"
|
||||
\ ." import sys, vim\n"
|
||||
\ ." sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n"
|
||||
\ ." ".s:import_cmd
|
||||
execute s:pycmd "try:\n"
|
||||
\ ." ".s:import_cmd."\n"
|
||||
\ ."except ImportError:\n"
|
||||
\ ." import sys, vim\n"
|
||||
\ ." sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n"
|
||||
\ ." ".s:import_cmd
|
||||
let s:launched = 1
|
||||
finally
|
||||
if !exists('s:launched')
|
||||
@ -40,23 +40,5 @@ finally
|
||||
endif
|
||||
endtry
|
||||
|
||||
if !get(g:, 'powerline_debugging_pyeval') && exists('*'. s:powerline_pyeval)
|
||||
let PowerlinePyeval = function(s:powerline_pyeval)
|
||||
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()')
|
||||
execute s:pycmd 'powerline_setup(pyeval=vim.eval("s:pyeval"), pycmd=vim.eval("s:pycmd"))'
|
||||
execute s:pycmd 'del powerline_setup'
|
||||
|
@ -9,6 +9,9 @@ from powerline.matcher import gen_matcher_getter
|
||||
import vim
|
||||
from itertools import count
|
||||
|
||||
if not hasattr(vim, 'bindeval'):
|
||||
import json
|
||||
|
||||
|
||||
vim_exists = vim_get_func('exists', rettype=int)
|
||||
vim_getwinvar = vim_get_func('getwinvar')
|
||||
@ -26,13 +29,11 @@ def _override_from(config, override_varname):
|
||||
return config
|
||||
|
||||
|
||||
WINDOW_STASUSLINE = '%!PowerlinePyeval(\'powerline.statusline({0})\')'
|
||||
|
||||
|
||||
class VimPowerline(Powerline):
|
||||
def __init__(self):
|
||||
def __init__(self, pyeval='PowerlinePyeval'):
|
||||
super(VimPowerline, self).__init__('vim')
|
||||
self.last_window_id = 1
|
||||
self.window_statusline = '%!' + pyeval + '(\'powerline.statusline({0})\')'
|
||||
|
||||
def add_local_theme(self, key, config):
|
||||
'''Add local themes at runtime (during vim session).
|
||||
@ -111,7 +112,7 @@ class VimPowerline(Powerline):
|
||||
curwindow_id = self.last_window_id
|
||||
self.last_window_id += 1
|
||||
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:
|
||||
window.options['statusline'] = statusline
|
||||
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
|
||||
self.last_window_id += 1
|
||||
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:
|
||||
vim_setwinvar(winnr, '&statusline', statusline)
|
||||
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):
|
||||
window, window_id, winnr = self.win_idx(None)
|
||||
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