-
-
Notifications
You must be signed in to change notification settings - Fork 115
/
vim-lightline.ts
88 lines (83 loc) · 4.51 KB
/
vim-lightline.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import convert from 'color-convert';
import type { Template } from './index.js';
import { colorSetToVariants } from '../color-set/index.js';
import { source } from 'common-tags';
function gtermToCterm(hex: string): number {
return convert.hex.ansi256(hex);
}
const template: Template = {
name: 'Vim lightline',
render: async function* (colorSet) {
const variants = colorSetToVariants(colorSet);
const colorVars = variants
.map(
({ colors, name }) => source`
if &background == '${name}'
let s:guishade0 = "${colors.shade0}"
let s:guishade1 = "${colors.shade1}"
let s:guishade2 = "${colors.shade2}"
let s:guishade3 = "${colors.shade3}"
let s:guishade4 = "${colors.shade4}"
let s:guishade5 = "${colors.shade5}"
let s:guishade6 = "${colors.shade6}"
let s:guishade7 = "${colors.shade7}"
let s:guiaccent0 = "${colors.accent0}"
let s:guiaccent1 = "${colors.accent1}"
let s:guiaccent2 = "${colors.accent2}"
let s:guiaccent3 = "${colors.accent3}"
let s:guiaccent4 = "${colors.accent4}"
let s:guiaccent5 = "${colors.accent5}"
let s:guiaccent6 = "${colors.accent6}"
let s:guiaccent7 = "${colors.accent7}"
let s:shade0 = ${gtermToCterm(colors.shade0)}
let s:shade1 = ${gtermToCterm(colors.shade1)}
let s:shade2 = ${gtermToCterm(colors.shade2)}
let s:shade3 = ${gtermToCterm(colors.shade3)}
let s:shade4 = ${gtermToCterm(colors.shade4)}
let s:shade5 = ${gtermToCterm(colors.shade5)}
let s:shade6 = ${gtermToCterm(colors.shade6)}
let s:shade7 = ${gtermToCterm(colors.shade7)}
let s:accent0 = ${gtermToCterm(colors.accent0)}
let s:accent1 = ${gtermToCterm(colors.accent1)}
let s:accent2 = ${gtermToCterm(colors.accent2)}
let s:accent3 = ${gtermToCterm(colors.accent3)}
let s:accent4 = ${gtermToCterm(colors.accent4)}
let s:accent5 = ${gtermToCterm(colors.accent5)}
let s:accent6 = ${gtermToCterm(colors.accent6)}
let s:accent7 = ${gtermToCterm(colors.accent7)}
endif
`,
)
.join('\n');
yield {
path: `${colorSet.title.upperCamel}Lightline.vim`,
content: source`
${colorVars}
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
let s:p.normal.left = [ [ s:guishade1, s:guiaccent5, s:shade1, s:accent5 ], [ s:guishade7, s:guishade2, s:shade7, s:shade2 ] ]
let s:p.normal.right = [ [ s:guishade1, s:guishade4, s:shade1, s:shade4 ], [ s:guishade5, s:guishade2, s:shade5, s:shade2 ] ]
let s:p.inactive.right = [ [ s:guishade1, s:guishade3, s:shade1, s:shade3 ], [ s:guishade3, s:guishade1, s:shade3, s:shade1 ] ]
let s:p.inactive.left = [ [ s:guishade4, s:guishade1, s:shade4, s:shade1 ], [ s:guishade3, s:guishade0, s:shade3, s:shade0 ] ]
let s:p.insert.left = [ [ s:guishade1, s:guiaccent3, s:shade1, s:accent3 ], [ s:guishade7, s:guishade2, s:shade7, s:shade2 ] ]
let s:p.replace.left = [ [ s:guishade1, s:guiaccent1, s:shade1, s:accent1 ], [ s:guishade7, s:guishade2, s:shade7, s:shade2 ] ]
let s:p.visual.left = [ [ s:guishade1, s:guiaccent6, s:shade1, s:accent6 ], [ s:guishade7, s:guishade2, s:shade7, s:shade2 ] ]
let s:p.normal.middle = [ [ s:guishade5, s:guishade1, s:shade5, s:shade1 ] ]
let s:p.inactive.middle = [ [ s:guishade4, s:guishade1, s:shade4, s:shade1 ] ]
let s:p.tabline.left = [ [ s:guishade6, s:guishade2, s:shade6, s:shade2 ] ]
let s:p.tabline.tabsel = [ [ s:guishade6, s:guishade0, s:shade6, s:shade0 ] ]
let s:p.tabline.middle = [ [ s:guishade2, s:guishade4, s:shade2, s:shade4 ] ]
let s:p.tabline.right = copy(s:p.normal.right)
let s:p.normal.error = [ [ s:guiaccent0, s:guishade0, s:accent0, s:shade0 ] ]
let s:p.normal.warning = [ [ s:guiaccent2, s:guishade1, s:accent2, s:shade1 ] ]
let g:lightline#colorscheme#${colorSet.title.upperCamel}#palette = s:p
`,
};
},
renderInstructions: ([path], colorSet) => source`
1. Make sure that the \`background\` option is set in \`.vimrc\`.
2. Copy or symlink \`${path}\` to \`~/.vim/autoload/lightline/colorscheme/\`.
3. Set the colorscheme in \`.vimrc\`: \`let g:lightline = { 'colorscheme': '${colorSet.title.upperCamel}' }\`
4. Restart Vim.
`,
};
export default template;