linux-tools/modules/vim/VimModule.py
Marcel Schwarz 6061a7d224 Change from dynamic to explicit module loading
dynamic loading was removed to have an overall better flow control,
Remove Abstract Module, 
clear out module __init__.py
2020-03-06 02:34:57 +01:00

105 lines
3.6 KiB
Python

import json
import os
import subprocess
from pathlib import Path
from PyInquirer import prompt
class VimModule:
def __init__(self):
super().__init__()
self._debugFlag = False
self._json_config = {}
with open("modules/vim/vimrc_conf.json") as plugins:
self._json_config = json.load(plugins)
def _get_vim_root(self):
if self._debugFlag:
return Path(os.getcwd()).joinpath("devenv", ".vim")
else:
return Path().home().joinpath(".vim")
def _create_folder_structure(self):
os.makedirs(str(self._get_vim_root().joinpath("autoload")), exist_ok=True)
os.makedirs(str(self._get_vim_root().joinpath("plugged")), exist_ok=True)
def _get_vimplug_file(self):
vimplug_filepath = Path(str(self._get_vim_root().joinpath("autoload")))
print(vimplug_filepath)
if os.path.isfile(str(self._get_vim_root().joinpath("autoload", "plug.vim"))):
print("Vimplug already installed!")
else:
curl_request = "curl {} -o {}".format(
self._json_config['pluginmanager_url'],
str(self._get_vim_root().joinpath("autoload", "plug.vim"))
)
subprocess.call(curl_request, shell=True)
def _create_plugin_section(self):
vimrc_content = []
plugins = self._json_config['plugins']
print("Available Plugins:")
plugin_selection = [
{
'type': 'checkbox',
'message': 'Select plugins',
'name': 'modules',
'choices': list(map(lambda x: {"name": x}, plugins.keys()))
}
]
selected_plugins = prompt(plugin_selection)['modules']
if len(selected_plugins) > 0:
self._get_vimplug_file()
print("\033[4mYour selection:\033[0m")
[print(x) for x in selected_plugins]
vimrc_content.append("call plug#begin('~/.vim/plugged')\n")
for element in selected_plugins:
vimrc_content.append(plugins[element] + "\n")
vimrc_content.append("call plug#end()\n")
return vimrc_content
def _create_setting_section(self):
default_settings = list(self._json_config['settings'].values())
print("\n\033[4mDefault settings:\033[0m")
[print(i) for i in default_settings]
vimrc_content = list(map(lambda x: x + "\n", default_settings))
return vimrc_content
def _get_vimfile_working_copy(self):
vimrc_path = str(self._get_vim_root().joinpath(".vimrc"))
try:
with open(vimrc_path, "r") as vimrc_file:
vimrc_content = vimrc_file.readlines()
except FileNotFoundError:
vimrc_content = []
return vimrc_content
def _write_vimfile(self, vimrc_content):
seen = set()
seen_add = seen.add
vimrc_content = [x1 for x1 in vimrc_content if not (x1 in seen or seen_add(x1))]
vimrc_path = str(self._get_vim_root().joinpath(".vimrc"))
with open(vimrc_path, "w") as vimrc_file:
for line in vimrc_content:
vimrc_file.write(line)
def _exec_plugin_manager(self):
install_plugins = "vim +PlugInstall +qall +silent"
subprocess.call(install_plugins, shell=True)
def run(self, debug=False):
if debug:
self._debugFlag = True
self._create_folder_structure()
plugin_section = self._create_plugin_section()
settings_section = self._create_setting_section()
self._write_vimfile(settings_section + plugin_section)
self._exec_plugin_manager()