themer/cli/packages/conemu/lib/index.js
2020-04-25 07:23:16 -06:00

69 lines
3.8 KiB
JavaScript

const { mapValues } = require('lodash');
const formatColors = colors =>
mapValues(colors, hex => {
const elements = hex.replace('#', '').match(/.{2}/g);
elements.push('00');
elements.reverse();
return elements.join('');
});
const renderTheme = colorSet => Promise.resolve({
name: `themer-${colorSet.name}.xml`,
contents: Buffer.from(
`
<value name="ColorTable00" type="dword" data="${colorSet.colors.shade0}" />
<value name="ColorTable01" type="dword" data="${colorSet.colors.accent5}" />
<value name="ColorTable02" type="dword" data="${colorSet.colors.accent3}" />
<value name="ColorTable03" type="dword" data="${colorSet.colors.accent4}" />
<value name="ColorTable04" type="dword" data="${colorSet.colors.accent0}" />
<value name="ColorTable05" type="dword" data="${colorSet.colors.accent6}" />
<value name="ColorTable06" type="dword" data="${colorSet.colors.accent1}" />
<value name="ColorTable07" type="dword" data="${colorSet.colors.shade6}" />
<value name="ColorTable08" type="dword" data="${colorSet.colors.shade1}" />
<value name="ColorTable09" type="dword" data="${colorSet.colors.accent5}" />
<value name="ColorTable10" type="dword" data="${colorSet.colors.accent3}" />
<value name="ColorTable11" type="dword" data="${colorSet.colors.accent4}" />
<value name="ColorTable12" type="dword" data="${colorSet.colors.accent0}" />
<value name="ColorTable13" type="dword" data="${colorSet.colors.accent7}" />
<value name="ColorTable14" type="dword" data="${colorSet.colors.accent2}" />
<value name="ColorTable15" type="dword" data="${colorSet.colors.shade7}" />
<value name="ColorTable16" type="dword" data="${colorSet.colors.shade0}" />
<value name="ColorTable17" type="dword" data="${colorSet.colors.accent0}" />
<value name="ColorTable18" type="dword" data="${colorSet.colors.accent3}" />
<value name="ColorTable19" type="dword" data="${colorSet.colors.accent1}" />
<value name="ColorTable20" type="dword" data="${colorSet.colors.accent5}" />
<value name="ColorTable21" type="dword" data="${colorSet.colors.accent6}" />
<value name="ColorTable22" type="dword" data="${colorSet.colors.accent4}" />
<value name="ColorTable23" type="dword" data="${colorSet.colors.shade6}" />
<value name="ColorTable24" type="dword" data="${colorSet.colors.shade1}" />
<value name="ColorTable25" type="dword" data="${colorSet.colors.accent0}" />
<value name="ColorTable26" type="dword" data="${colorSet.colors.accent3}" />
<value name="ColorTable27" type="dword" data="${colorSet.colors.accent2}" />
<value name="ColorTable28" type="dword" data="${colorSet.colors.accent5}" />
<value name="ColorTable29" type="dword" data="${colorSet.colors.accent7}" />
<value name="ColorTable30" type="dword" data="${colorSet.colors.accent4}" />
<value name="ColorTable31" type="dword" data="${colorSet.colors.shade7}" />
`,
'utf8'
),
});
const render = colors => Object.keys(colors)
.map(name => ({
name,
colors: formatColors(colors[name]),
}))
.map(colorSet => renderTheme(colorSet));
const renderInstructions = paths => `
1. Open the ConEmu settings and navigate to Features > Colors. Take note of the location of \`ConEmu.xml\` for later.
2. Create a new color scheme by typing a name in the "Schemes" field and clicking Save.
3. Close ConEmu.
4. Open \`ConEmu.xml\` and locate the color scheme name you typed in step 2.
5. Replace the \`<value>\` elements \`ColorTable00\` through \`ColorTable31\` with the contents of your themer-generated XML (${paths.map(p => `\`${p}\``).join(' or ')}). Be sure to leave the others, like \`ExtendColors\`, etc. intact.
6. Open ConEmu and select your theme again in settings.
`;
module.exports = { render, renderInstructions };