因为最近终于更新上了Win10 1903,终于摸上了久仰大名的新Windows Terminal(一下简称Terminal),于是就折腾了一番,然后就有了这篇踩坑笔记。

小技巧:将Terminal的快捷方式(C:\Users\mnxxz\AppData\Local\Microsoft\WindowsApps\wt.exe)放桌面,然后右键属性,在“快捷键”中按下想要的快捷键,既可在几乎全局范围内快速启动终端。快捷方式必须在桌面才生效(假如放到`C:\Users\Public\Desktop`里被别的用户删掉了的话也失效)。
已知问题
- 尝试加入msys2的bash配置,发现对中文支持非常糟糕,有待摸索配置或官方改进。
- 以关闭最后一个标签的方式进行退出会卡很久。
配置Schema
继微软将“用json配置”的方式引入到vscode后,在Terminal有一次被发扬光大,因此我仿照vsc官方的json schema(TypeScript),写了一下Terminal配置的模板。由于官方还没有给出非常详细的配置教程,因此只能从默认配置以及百度到的一两条额外配置中(谷歌也不见更多,有空再读源码),推测出可能的配置和作用,因此以下内容不完全也不准确(而且也不完全符合TypeScript语法),故仅供参考,希望有更多人补充。
interface terminalProfilesConfiguration {
/**
* 全局设置
*/
globals : globalsConfiguration;
/**
* 配置
*/
profiles : profilesConfiguration[];
/**
* 样式
*/
schemes? : schemesConfiguration[];
}
/**
* guid: "{"GUID"}"
* GUID: hex{8}"-"hex{4}"-"hex{4}"-"hex{4}"-"hex{12}
* hex: [0-9A-Fa-f]
*/
type guid = string
/**
* url: ("ms-appdata://" | "ms-appx://" | LABEL":" ) + path
* LABEL: [a-zA-Z]
* path: "/"
*/
type url = string
/**
* color: "#"hex{6}
* hex: [0-9A-Fa-f]
*/
type color = string
interface globalsConfiguration {
/**
* 始终显示标签
* 当 `showTabsInTitlebar` 为 `false` 且 `alwaysShowTabs` 为 `false` 时,
* 只剩下一个标签时,不显示多标签
* 默认值: true
*/
alwaysShowTabs? : boolean;
/**
* 默认配置
* 启动 `profiles` 里 `guid` 匹配的配置
* 注: 如果找不到配置,将无法启动(启动立即退出)
* 另外,若配置成`{00000000-0000-0000-0000-000000000000}`将导致错误而启动内置默认配置
* 默认值: {61c54bbd-c2c6-5271-96e7-009a87ff44bf} 即"Windows PowerShell"
*/
defaultProfile : guid;
/**
* 启动时列数
* 相当于 "控制台窗口" > "属性" > "布局" > "窗口大小" > "宽度"
* 默认值: 120
*/
initialCols? : number;
/**
* 启动时行数
* 相当于 "控制台窗口" > "属性" > "布局" > "窗口大小" > "高度"
* 默认值: 30
*/
initialRows? : number;
/**
* 快捷键配置
*/
keybindings? : keybindingsConfiguration[];
/**
* 请求主题?
*/
requestedTheme? : "system";
/**
* 显示标题栏
*/
showTabsInTitlebar? : boolean;
/**
* 在标题栏显示标签标题
*/
showTerminalTitleInTitlebar? : boolean;
}
interface keybindingsConfiguration {
/**
* 配置命令
*/
command: "closeTab" | "newTab" | "nextTab" | "openSettings" | "prevTab" |
"newTabProfile0" | "newTabProfile1" | "newTabProfile2" | "newTabProfile3" | "newTabProfile4" | "newTabProfile5" | "newTabProfile6" | "newTabProfile7" | "newTabProfile8" |
"switchToTab0" | "switchToTab1" | "switchToTab2" | "switchToTab3" | "switchToTab4" | "switchToTab5" | "switchToTab6" | "switchToTab7" | "switchToTab8" |
"scrollDown" | "scrollDownPage" | "scrollUp" | "scrollUpPage";
/**
* 按键
* 例子: "ctrl+w", "alt+9", "alt+f2", "ctrl+tab", "ctrl+,", "shift+down", "ctrl+shift+pgdn"
* 注: 虽然是数组但是尚未支持绑定多个按键组合
*/
keys: string[];
}
interface profilesConfiguration {
/**
* 使用亚克力(毛玻璃)效果
*/
useAcrylic : boolean,
/**
* 亚克力(毛玻璃)效果透明度
* 取值范围: 0.0-1.0
*/
acrylicOpacity : Float64Array,
/**
* 背景颜色
*/
background : color,
/**
* 背景图片
* url: ("ms-appdata://" | "ms-appx://" ) + path
*/
backgroundImage : string,
/**
* 背景图片透明度
* 取值范围: 0.0-1.0
*/
backgroundImageOpacity : Float64Array,
/**
* 背景图片填充样式
*/
backgroundImageStrechMode : "fill" | "uniformToFill",
/**
* 光标颜色
*/
cursorColor : color,
/**
* 光标形状
* bar: 竖线
* vintage: 下划线
* ?: 方块?
*/
cursorShape : "vintage" | "bar",
/**
* 光标高度
* 仅当 `cursorShape` 为 `vintage` 时有效
* 取值范围: 1-100
*/
cursorHeight : number,
/**
* 字体
*/
fontFace : string,
/**
* 字体大小
* 注: 当为 0 时使用默认大小
* 当为负数时,当前终端空白屏
*/
fontSize : number,
/**
* 使用样式
* `schemes` 中的 `name` 值
*/
colorScheme : string,
/**
* 退出时关闭?
* 作用未知或目前无效
*/
closeOnExit : boolean,
/**
* 命令行
* 启动终端的命令行,可以包括参数
* 例如: "powershell.exe", "cmd", "C:/msys64/usr/bin/bash.exe"
*/
commandline : string,
/**
* GUID
* 识别ID,用于默认启动配置
*/
guid : guid,
/**
* 历史记录大小
* 相当于 "控制台窗口" > "属性" > "布局" > "屏幕缓冲区大小" > "高度"
*/
historySize : number,
/**
* 图标
* 右上角下拉菜单里本配置的图标
* url: ("ms-appdata://" | "ms-appx://" ) + path
*/
icon : string,
/**
* 名字
* 右上角下拉菜单里本配置的名字
*/
name : string,
/**
* 边缘宽度: 上, 右, 下, 左
* 格式: "%d, %d, %d, %d"
*/
padding : string,
/**
* ?
*/
snapOnInput : boolean,
/**
* 启动路径
* 相当于快捷方式的 "起始位置"
*/
startingDirectory: string
}
interface schemesConfiguration {
/**
* 样式名
*/
name: string,
/**
* 背景颜色
*/
background: color,
/**
* 其他颜色设置
*/
brightBlack : color,
brightBlue : color,
brightCyan : color,
brightGreen : color,
brightPurple : color,
brightRed : color,
brightWhite : color,
brightYellow : color,
black : color,
blue : color,
cyan : color,
foreground : color,
green : color,
purple : color,
red : color,
white : color,
yellow : color
}