linux-tools/modules/vim/module.py

90 lines
2.8 KiB
Python
Raw Normal View History

import json
import os
from pathlib import Path
from PyInquirer import prompt
from AbstractModule import AbstractModule
def get_vim_root():
# return Path().home().joinpath(".vim")
return Path(os.getcwd()).joinpath("devenv", ".vim")
class VimModule(AbstractModule):
def __init__(self):
2019-12-14 05:47:33 +01:00
super().__init__()
self.json_config = {}
with open("modules/vim/vimrc_conf.json") as plugins:
self.json_config = json.load(plugins)
self.plugins = self.json_config['plugins']
self.settings = self.json_config['settings']
def do_plugin_selection(self):
mapped_list = []
for choice in self.plugins.keys():
mapped_list.append({
"name": choice
})
print("Available Plugins:")
module_selection = [
{
'type': 'checkbox',
'message': 'Select plugins',
'name': 'modules',
'choices': mapped_list
}
]
return prompt(module_selection)['modules']
def run(self):
# Create necessary folder structure for vim
os.makedirs(str(get_vim_root().joinpath("autoload")), exist_ok=True)
os.makedirs(str(get_vim_root().joinpath("plugged")), exist_ok=True)
selected_plugins = self.do_plugin_selection()
default_settings = list(self.settings.values())
# print out selected plugins
print("\033[4mYour selection:\033[0m")
[print(x) for x in selected_plugins]
print("\n\033[4mDefault settings:\033[0m")
[print(i) for i in default_settings]
# Create vimrc file
vimrc_path = str(get_vim_root().joinpath(".vimrc"))
try:
with open(vimrc_path, "r") as vimrc_file:
vimrc_content = vimrc_file.readlines()
except FileNotFoundError:
vimrc_content = []
try:
index = vimrc_content.index("call plug#begin('~/.vim/plugged')\n") + 1
for plugin in selected_plugins:
vimrc_content.insert(index, self.plugins[plugin] + "\n")
except ValueError:
vimrc_content.append("call plug#begin('~/.vim/plugged')\n")
for element in selected_plugins:
vimrc_content.append(self.plugins[element] + "\n")
vimrc_content.append("call plug#end()\n")
default_settings.reverse()
for setting in default_settings:
vimrc_content.insert(0, setting + "\n")
seen = set()
seen_add = seen.add
vimrc_content = [x1 for x1 in vimrc_content if not (x1 in seen or seen_add(x1))]
with open(vimrc_path, "w") as vimrc_file:
for line in vimrc_content:
vimrc_file.write(line)
# TODO: check if existing plugin manager file
# TODO: else download plugin manager