1. 本文目标
将
Xshell
中的配色方案遷移到
WindowsTerminal
中使用。
- 将Xshell配色方案導出
- 更改字元集為UTF-8
- 通過Java程式将Xshell配色方案轉變成Windows Terminal配色方案
- 配置Windows Terminal
2. 操作步驟
2.1 導出Xshell配色
在Xshell菜單欄中依次點選工具->配色方案,會彈出選擇配色方案視窗。在視窗中選擇(按住Ctrl可以多選)想要導出的配色方案,然後點選導出按鈕,本文以導出New Black、New White、XTerm為例,如下圖所示:
選擇要導出的目錄,本文以
D://data/
為例,檔案名為
ColorSchemes.xcs
2.2 更改字元集為UTF-8
Xshell6導出的配色方案預設是編碼,Java:
UCS-2 Little Endian
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": []
}