def inst(nvim: Nvim) -> Atomic: pkgs = { path: spec for path, spec in ((p_name(spec.git.uri), spec) for spec in pkg_specs) if path.exists() } atomic1 = Atomic() keymap = Keymap() for spec in pkgs.values(): for key in spec.keys: for lhs, rhs in key.maps.items(): attrgetter(key.modes)(keymap)(lhs, **asdict(key.opts)) << rhs for lhs, rhs in spec.vals.items(): atomic1.set_var(lhs, rhs) atomic2 = rtp_packages(nvim, plugins=pkgs) for spec in pkgs.values(): if spec.lua: lua = indent(spec.lua, " " * 2) lua_block = f"(function(){linesep}{lua}{linesep}end)()" atomic2.call_function("luaeval", (lua_block, ())) if spec.viml: atomic2.command(spec.viml) return atomic1 + keymap.drain(buf=None) + atomic2
def drain(nvim: Nvim) -> Tuple[Atomic, Sequence[RpcSpec]]: _atomic = Atomic() _atomic.call_function("setenv", ("PATH", PATH)) _atomic.call_function("setenv", ("PYTHONPATH", PYTHONPATH)) _atomic.set_var("mapleader", " ") _atomic.set_var("maplocalleader", " ") a0 = inst(nvim) a1 = settings.drain() a2, s0 = rpc.drain(nvim.channel_id) a3 = keymap.drain(buf=None) a4 = autocmd.drain() return _atomic + a0 + a1 + a2 + a3 + a4 + atomic, s0
def inst(nvim: Nvim) -> Atomic: pkgs = { path: spec for path, spec in ((p_name(spec.git.uri), spec) for spec in pkg_specs) if path.exists() } atomic1 = Atomic() keymap = Keymap() for spec in pkgs.values(): for key in spec.keys: for lhs, rhs in key.maps.items(): attrgetter(key.modes)(keymap)(lhs, **asdict(key.opts)) << rhs for lhs, rhs in spec.vals.items(): atomic1.set_var(lhs, rhs) atomic2 = Atomic() atomic2.command("packloadall") for spec in pkgs.values(): if spec.lua: body = indent(spec.lua, " " * 2) lua = f""" (function() local _, err = pcall(function() {body} end) if err then vim.api.nvim_err_writeln(err) end end)() """ atomic2.exec_lua(dedent(lua), ()) if spec.viml: lua = f""" (function(viml) local _, err = pcall(vim.cmd, viml) if err then vim.api.nvim_err_writeln(err) end end)(...) """ atomic2.exec_lua(dedent(lua), (spec.viml, )) return atomic1 + keymap.drain(buf=None) + atomic2