天天看點

Xshell配色轉WindowsTerminal配色

1. 本文目标

Xshell

中的配色方案遷移到

WindowsTerminal

中使用。

  • 将Xshell配色方案導出
  • 更改字元集為UTF-8
  • 通過Java程式将Xshell配色方案轉變成Windows Terminal配色方案
  • 配置Windows Terminal

2. 操作步驟

2.1 導出Xshell配色

在Xshell菜單欄中依次點選工具->配色方案,會彈出選擇配色方案視窗。在視窗中選擇(按住Ctrl可以多選)想要導出的配色方案,然後點選導出按鈕,本文以導出New Black、New White、XTerm為例,如下圖所示:

Xshell配色轉WindowsTerminal配色

選擇要導出的目錄,本文以

D://data/

為例,檔案名為

ColorSchemes.xcs

Xshell配色轉WindowsTerminal配色

2.2 更改字元集為UTF-8

Xshell6導出的配色方案預設是

UCS-2 Little Endian

編碼,Java:

StandardCharsets.UTF_16LE

本文将采用UTF-8進行解析,是以需要将字元集改為UTF-8,使用Notepad++打開在菜單欄中點選編碼->使用UTF-8編碼,然後點選儲存按鈕。

Xshell配色轉WindowsTerminal配色

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++)打開配置檔案檔案。

Xshell配色轉WindowsTerminal配色

将上文生成的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配色

Xshell配色轉WindowsTerminal配色

3.1 New White配色

Xshell配色轉WindowsTerminal配色

3.3 New Black配色

Xshell配色轉WindowsTerminal配色

圖示下載下傳位址: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": []
}