Xshell配色转WindowsTerminal配色

1. 本文目标

Xshell中的配色方案迁移到WindowsTerminal中使用。

  • 将Xshell配色方案导出
  • 更改字符集为UTF-8
  • 通过Java程序将Xshell配色方案转变成Windows Terminal配色方案
  • 配置Windows Terminal

2. 操作步骤

2.1 导出Xshell配色

在Xshell菜单栏中依次点击工具->配色方案,会弹出选择配色方案窗口。在窗口中选择(按住Ctrl可以多选)想要导出的配色方案,然后点击导出按钮,本文以导出New BlackNew WhiteXTerm为例,如下图所示:
在这里插入图片描述
选择要导出的目录,本文以D://data/为例,文件名为ColorSchemes.xcs
在这里插入图片描述

2.2 更改字符集为UTF-8

Xshell6导出的配色方案默认是UCS-2 Little Endian编码,Java:StandardCharsets.UTF_16LE

本文将采用UTF-8进行解析,所以需要将字符集改为UTF-8,使用Notepad++打开在菜单栏中点击编码->使用UTF-8编码,然后点击保存按钮。
在这里插入图片描述

2.3 配色方案转换

需要调整的地方为导出配色方案的路径,本例为D:\data\ColorSchemes.xcs

package terminal;

import com.alibaba.fastjson.JSON;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * Xshell配色转WindowsTerminal配色
 *
 * @author faith.huan 2020-01-31
 */
public class ColorXshellToWinTerminal {

    public static void main(String[] args) throws IOException {

        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("D:\\data\\ColorSchemes.xcs"), StandardCharsets.UTF_8);

        Map<String, Map<String, String>> map = new HashMap<>(300);

        BufferedReader reader = new BufferedReader(inputStreamReader);
        String line = reader.readLine();
        String key = "";
        while (line != null) {
            // System.out.println("line = " + line);

            if (line.startsWith("[")) {
                key = line.substring(1, line.length() - 1);
                // System.out.println(key);
            } else {
                String[] split = line.split("=");
                if (!"Names".equals(key) && split.length == 2) {
                    String fieldName = fieldMap.get(split[0]);
                    if (fieldName != null) {
                        String fieldValue = "#" + split[1];
                        if (map.containsKey(key)) {
                            map.get(key).put(fieldName, fieldValue);
                        } else {
                            Map<String, String> m = new TreeMap<>(new FieldComparator());
                            m.put("name", key);
                            m.put(fieldName, fieldValue);
                            map.put(key, m);
                        }
                    }
                }
            }

            line = reader.readLine();
        }

        System.out.println(JSON.toJSONString(map.values(), true));

    }

    private static Map<String, String> fieldMap = new HashMap<>();

    static {
        /*
         * 定义Xshell配色字段与WinTerminal配色字段映射关系
         */
        fieldMap.put("text", "foreground");
        fieldMap.put("background", "background");
        fieldMap.put("black", "black");
        fieldMap.put("black(bold)", "brightBlack");
        fieldMap.put("red", "red");
        fieldMap.put("red(bold)", "brightRed");
        fieldMap.put("green", "green");
        fieldMap.put("green(bold)", "brightGreen");
        fieldMap.put("yellow", "yellow");
        fieldMap.put("yellow(bold)", "brightYellow");
        fieldMap.put("blue", "blue");
        fieldMap.put("blue(bold)", "brightBlue");
        fieldMap.put("magenta", "purple");
        fieldMap.put("magenta(bold)", "brightPurple");
        fieldMap.put("cyan", "cyan");
        fieldMap.put("cyan(bold)", "brightCyan");
        fieldMap.put("white", "white");
        fieldMap.put("white(bold)", "brightWhite");
        fieldMap.put("text(bold)", null);
        fieldMap.put(null, null);
    }


    /**
     * 控制输出的Window Terminal 配色方案字段排序
     */
    static class FieldComparator implements Comparator<String> {
        private Map<String, Integer> orderMap = new HashMap<>();

        FieldComparator() {
            orderMap.put("name", 1);
            orderMap.put("foreground", 2);
            orderMap.put("background", 3);
            orderMap.put("black", 4);
            orderMap.put("red", 5);
            orderMap.put("green", 6);
            orderMap.put("yellow", 7);
            orderMap.put("blue", 8);
            orderMap.put("purple", 9);
            orderMap.put("cyan", 10);
            orderMap.put("white", 11);
            orderMap.put("brightBlack", 12);
            orderMap.put("brightRed", 13);
            orderMap.put("brightGreen", 14);
            orderMap.put("brightYellow", 15);
            orderMap.put("brightBlue", 16);
            orderMap.put("brightPurple", 17);
            orderMap.put("brightCyan", 18);
            orderMap.put("brightWhite", 19);
        }

        @Override
        public int compare(String o1, String o2) {
            return orderMap.get(o1).compareTo(orderMap.get(o2));
        }
    }

}

运行上面的Java代码会在控制台中输出如下json内容

[{
	"name":"XTerm",
	"foreground":"#e5e5e5",
	"background":"#002B36",
	"black":"#000000",
	"red":"#bb0000",
	"green":"#006400",
	"yellow":"#c8af00",
	"blue":"#1e90f5",
	"purple":"#bb00bb",
	"cyan":"#00cdcd",
	"white":"#ebebeb",
	"brightBlack":"#555555",
	"brightRed":"#ff5555",
	"brightGreen":"#55ff55",
	"brightYellow":"#fff555",
	"brightBlue":"#50beff",
	"brightPurple":"#ff55ff",
	"brightCyan":"#55ffff",
	"brightWhite":"#ffffff"
},{
	"name":"New White",
	"foreground":"#292929",
	"background":"#ffffff",
	"black":"#36342e",
	"red":"#a56434",
	"green":"#008000",
	"yellow":"#999606",
	"blue":"#0000cc",
	"purple":"#7b5175",
	"cyan":"#00a2c4",
	"white":"#cfd8d3",
	"brightBlack":"#535755",
	"brightRed":"#cf9e72",
	"brightGreen":"#1cc470",
	"brightYellow":"#e2e234",
	"brightBlue":"#2929ef",
	"brightPurple":"#a97ead",
	"brightCyan":"#50ebfc",
	"brightWhite":"#eceeee"
},{
	"name":"New Black",
	"foreground":"#f2f2f2",
	"background":"#242424",
	"black":"#36342e",
	"red":"#a56434",
	"green":"#008000",
	"yellow":"#999606",
	"blue":"#4646ff",
	"purple":"#7b5175",
	"cyan":"#00a2c4",
	"white":"#cfd8d3",
	"brightBlack":"#535755",
	"brightRed":"#cf9e72",
	"brightGreen":"#1cc470",
	"brightYellow":"#e2e234",
	"brightBlue":"#6f6ff4",
	"brightPurple":"#a97ead",
	"brightCyan":"#50ebfc",
	"brightWhite":"#eceeee"
}]

2.4 配置Windows Terminal

依次点击**﹀**->Settings,然后选择一个文本编辑器(此处使用Notepad++)打开配置文件文件。在这里插入图片描述
将上文生成的json数组内容(不包括开始符[,结束符]),复制到刚才打开的配置文件profiles.json中的"schemes": [],段的中括号内,如下所示。

    "schemes": 
	[
		{
			"name":"XTerm",
			"foreground":"#e5e5e5",
			"background":"#002B36",
			"black":"#000000",
			"red":"#bb0000",
			"green":"#006400",
			"yellow":"#c8af00",
			"blue":"#1e90f5",
			"purple":"#bb00bb",
			"cyan":"#00cdcd",
			"white":"#ebebeb",
			"brightBlack":"#555555",
			"brightRed":"#ff5555",
			"brightGreen":"#55ff55",
			"brightYellow":"#fff555",
			"brightBlue":"#50beff",
			"brightPurple":"#ff55ff",
			"brightCyan":"#55ffff",
			"brightWhite":"#ffffff"
		},{
			"name":"New White",
			"foreground":"#292929",
			"background":"#ffffff",
			"black":"#36342e",
			"red":"#a56434",
			"green":"#008000",
			"yellow":"#999606",
			"blue":"#0000cc",
			"purple":"#7b5175",
			"cyan":"#00a2c4",
			"white":"#cfd8d3",
			"brightBlack":"#535755",
			"brightRed":"#cf9e72",
			"brightGreen":"#1cc470",
			"brightYellow":"#e2e234",
			"brightBlue":"#2929ef",
			"brightPurple":"#a97ead",
			"brightCyan":"#50ebfc",
			"brightWhite":"#eceeee"
		},{
			"name":"New Black",
			"foreground":"#f2f2f2",
			"background":"#242424",
			"black":"#36342e",
			"red":"#a56434",
			"green":"#008000",
			"yellow":"#999606",
			"blue":"#4646ff",
			"purple":"#7b5175",
			"cyan":"#00a2c4",
			"white":"#cfd8d3",
			"brightBlack":"#535755",
			"brightRed":"#cf9e72",
			"brightGreen":"#1cc470",
			"brightYellow":"#e2e234",
			"brightBlue":"#6f6ff4",
			"brightPurple":"#a97ead",
			"brightCyan":"#50ebfc",
			"brightWhite":"#eceeee"
		}
	],

启用XTerm配色方案,以ubuntu18.04为例,使用colorScheme指定配色方案XTerm

   "profiles":
    [
		 {
            "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
            "hidden": false,
            "name": "Ubuntu-18.04",
            "source": "Windows.Terminal.Wsl",
			"colorScheme": "XTerm",
			"icon":"D://javaDev/pic/u18.ico",
			"startingDirectory" : "//wsl$/Ubuntu-18.04/home/faith"
        },
        ...
	]        

3. 配色展示

3.1 XTerm配色

在这里插入图片描述

3.1 New White配色

在这里插入图片描述

3.3 New Black配色

在这里插入图片描述


图标下载地址:https://www.easyicon.net/ ,Tab上的图标下载32*32的即可,太大会模糊
完整profiles.json

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
	"copyOnSelect": true,

    "profiles":
    [
		 {
            "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
            "hidden": false,
            "name": "Ubuntu-18.04",
            "source": "Windows.Terminal.Wsl",
			"colorScheme": "XTerm",
			"icon":"D://javaDev/pic/u18.ico",
			"startingDirectory" : "//wsl$/Ubuntu-18.04/home/faith"
        },
		{
            "guid": "{6f9994f0-4403-5e85-9cce-98e5da3839bb}",
            "hidden": false,
            "name": "Ubuntu-16.04",
            "source": "Windows.Terminal.Wsl",
			"colorScheme": "XTerm",
			"icon": "D://JavaDev/pic/u16.ico",
			"startingDirectory" : "//wsl$/Ubuntu-16.04/home/faith"
			
        },
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": true,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],

    // Add custom color schemes to this array
    "schemes": 
	[
		{
			"name":"XTerm",
			"foreground":"#e5e5e5",
			"background":"#002B36",
			"black":"#000000",
			"red":"#bb0000",
			"green":"#006400",
			"yellow":"#c8af00",
			"blue":"#1e90f5",
			"purple":"#bb00bb",
			"cyan":"#00cdcd",
			"white":"#ebebeb",
			"brightBlack":"#555555",
			"brightRed":"#ff5555",
			"brightGreen":"#55ff55",
			"brightYellow":"#fff555",
			"brightBlue":"#50beff",
			"brightPurple":"#ff55ff",
			"brightCyan":"#55ffff",
			"brightWhite":"#ffffff"
		},{
			"name":"New White",
			"foreground":"#292929",
			"background":"#ffffff",
			"black":"#36342e",
			"red":"#a56434",
			"green":"#008000",
			"yellow":"#999606",
			"blue":"#0000cc",
			"purple":"#7b5175",
			"cyan":"#00a2c4",
			"white":"#cfd8d3",
			"brightBlack":"#535755",
			"brightRed":"#cf9e72",
			"brightGreen":"#1cc470",
			"brightYellow":"#e2e234",
			"brightBlue":"#2929ef",
			"brightPurple":"#a97ead",
			"brightCyan":"#50ebfc",
			"brightWhite":"#eceeee"
		},{
			"name":"New Black",
			"foreground":"#f2f2f2",
			"background":"#242424",
			"black":"#36342e",
			"red":"#a56434",
			"green":"#008000",
			"yellow":"#999606",
			"blue":"#4646ff",
			"purple":"#7b5175",
			"cyan":"#00a2c4",
			"white":"#cfd8d3",
			"brightBlack":"#535755",
			"brightRed":"#cf9e72",
			"brightGreen":"#1cc470",
			"brightYellow":"#e2e234",
			"brightBlue":"#6f6ff4",
			"brightPurple":"#a97ead",
			"brightCyan":"#50ebfc",
			"brightWhite":"#eceeee"
		}
	],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值