文章11
标签16
分类0
WT+PWSH+CMD大整改

WT+PWSH+CMD大整改

有一说一,windows自带的黑框框属实拉胯。不仅难用,还丑的一批。这两天找了个实现了弹弹play的api的python脚本,硬是给整吐了:

0be887998f6c954d5f3bc38b2bb2026a.webp

好嘛,那就整改一下。

因为直接在命令行窗口右键的话无论是默认还是当前都会有一些设置不了的项目,所以还是直接改注册表(HKEY_CURRENT_USER\Console\)来得舒服。

38491921d96123d7fc5848d8fb621d0e.webp

Console下的 %SystemRoot%_system32_xxx.exe、%SystemRoot%_SysWOW64_xxx.exe 分别是32和64位控制台程序(取决于xxx是什么)的注册表项,没有某些项就自己加上去完事。如果是针对所有控制台的统一设置,那就直接修改Console这一项,想细化到不同的控制台,那就分别修改对应的子项。

字体

其实可以直接更纱黑体一步到位(排除商店内的版本,Github上的版本cascadia-code更好),但是如果要使用Oh my Posh V3的话,Oh my Posh官方的建议是使用包含了额外图标的Nerd Font:

Oh my Posh was designed to use Nerd Fonts. Nerd Fonts are popular fonts that are patched to include icons. We recommend Meslo LGM NF, but any Nerd Font should be compatible with the standard themes.

To see the icons displayed in Oh my Posh, install a Nerd Font, and configure your terminal to use it.

挑了挑,感觉比起修改自Cascadia的Caskaydia NF,还是修改自JetBrains家的JetBrainsMono NF看起来最舒服,安装时最好选为所有用户安装,然后设置FaceName(这是个字符串值)为JetBrainsMonoMedium NF。

Font Name 连字效果 旧PowerLine图标 Oh my Posh V3图标
Cascadia Code Yes No No
Cascadia Mono No No No
Cascadia Code PL Yes Yes No
Cascadia Mono PL No Yes No
JetBrainsMono NF Yes Yes Yes

代码页

注册表Console项(针对所有终端)下CodePage(DWORD值)设置十进制65001即可。

默认的936是GBK,无法使用更纱黑体,所以直接65001(UTF-8)一步到位,省得每次都要敲一回chcp。而且如果没有设置默认65001而只是针对单个程序的话,在命令行内每敲一次回车画面都要闪烁一下,从65001(更纱黑体)→936(宋体)→65001(更纱黑体)来一次循环。

不过修改之后有一件很奇妙的事,那就是一个bat文件如果直接打开它,那就是正常的按照默认值65001的代码页来的,但如果给它建一个快捷方式然后双击快捷方式打开,那就又变回原本的936了。略迷

转义序列

Win32的命令行不能直接支持ansi转义序列,带了颜色代码或者加粗代码会在控制台显示出一堆乱码,除非借助一系列奇妙的方法,但自己写的时候可以勉强,用别人写的工具的时候就不太好改了。

一个解决办法是使用Ansicon这样的工具,但是2021年了,显然有更好的解决方案(console-virtual-terminal-sequences)。

在Win10某个版本之后,可以通过SetConsoleTextAttribute这个函数来实现让win32控制台支持ansi转义序列,如果懒得每次都这么做的话那也可以一步到位,注册表Console项(针对所有终端)下添加一个DWORD值VirtualTerminalLevel,并设为1即可。

b4bc9952e0efab33d6a96ad0eba7cbf1.webp

参考:How to make win32 console recognize ANSI/VT100 escape sequences?

PowerShell

Profile

自带那个太老,新的PowerShell Core可以在商店直接安装,但是其实更推荐在Github页面(PowerShell)下载,因为在商店安装的话会因为没有WindowsApps文件夹的权限而无法正常修改针对所有用户的Profile文件(about_profiles)。

Description Path
All Users, All Hosts $PSHOME\Profile.ps1
All Users, Current Host $PSHOME\Microsoft.PowerShell_profile.ps1
Current User, All Hosts $Home[My ]Documents\PowerShell\Profile.ps1
Current user, Current Host $Home[My ]Documents\PowerShell\ Microsoft.PowerShell_profile.ps1

这个文件其实也就是powershell每次打开时要先执行的内容,如果有什么函数/命令是需要在一打开powershell就要执行的话,写进这个文件内就可以了。

要查看这些配置文件的位置,直接在powershell内输入下面的字段即可:

Description Name
Current User, Current Host $PROFILE
Current User, Current Host $PROFILE.CurrentUserCurrentHost
Current User, All Hosts $PROFILE.CurrentUserAllHosts
All Users, Current Host $PROFILE.AllUsersCurrentHost
All Users, All Hosts $PROFILE.AllUsersAllHosts

oh-my-posh V3

详见:https://ohmyposh.dev/docs/installation

直接scoop安装

scoop install https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json

会把oh-my-posh.exeoh-my-posh-wsl加进系统变量,然后在profile文件内写入:

Invoke-Expression (oh-my-posh --init --shell pwsh --config "$(scoop prefix oh-my-posh)/themes/powerlevel10k_classic.omp.json")

比起在powershell内安装oh-my-posh然后每次启动前import要快得多(大概是2s降到800ms,其实还是很慢…)

下面是V2版本时的配置方式,已经过时:

PowerLine

详见:powerline-setup

首先确认已经有了Cascadia Code PL这个字体和Git,然后安装Posh-Git和Oh-My-Posh(图省事直接给所有用户上了),这俩分别是用来获取Git信息和设置主题的:

Install-Module posh-git -Scope AllUsers
Install-Module oh-my-posh -Scope AllUsers

然后在前面说的Porfile文件(范围自选)内写入下面的内容,主题随便挑一个:

Import-Module posh-git,oh-my-posh
Set-PoshPrompt powerlevel10k_classic

(注:下载慢的话可以把powershellgallery.com和azureedge.net加入代理)

ee995f3d06c8aac1e2b0f3eeadc62f5e.webp

PSReadLine

如果是PowerShell Core且还没有高亮/历史记录的话,那就可以再加上PSReadLine,这玩意是用来整一堆骚操作的:

Install-Module PSReadLine

然后可以在前面说的Porfile文件(范围自选)内写入下面的内容,用来开启基于历史记录的预测,具体的其他配置项和快捷键可以通过 Get-PSReadLineOptionGet-PSReadLineKeyHandler 查看:

Set-PSReadLineOption -PredictionSource History

效果:

05aec42e26ce7aa0ebe650ab085c4b22.webp

(注意:Ctrl+空格显示所有候选的功能需要干掉微软自带的拼音输入法,否则快捷键会冲突)

Winsows Terminal

支持标签页+毛玻璃/亚克力+集成多终端,商店即可下载,目前没有图形化的设置界面(据说马上就会有 已经有了),就是启动慢了点。

右键打开设置,是个json文件,按照注释和这里的文档来配置就行。这里直接用自带的Campbell主题:

......
"profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
            "acrylicOpacity" : 0.7,
            "colorScheme" : "Campbell",
            "cursorColor" : "#FFFFFD",
            "fontFace" : "JetBrainsMonoMedium NF",
            "useAcrylic" : true
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile.
                "guid": "{bla-bla-bla-bla}",
                "name": "PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile.
                "guid": "{bla-bla-bla-bla}",
                "name": "Command Prompt",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{bla-bla-bla-bla}",
                "name": "PowerShell Core",
                "source": "Windows.Terminal.PowershellCore",
                "hidden": false
            },
            {
                "guid": "{bla-bla-bla-bla}",
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure",
                "hidden": false
            }
        ]
    },
......

其中useAcrylic就是毛玻璃/亚克力效果的开关,acrylicOpacity则是设置其透明度的项。

9cf08abaa0462ef0ec90540a06d00cab.webp

啊~有Konsole的感觉了~

不过略怪的是,设置了毛玻璃/亚克力后,wt在前台时效果正常,一失去焦点就会变成全黑。Github上也有人提过这个issue #7158,给出的解释是调用Win10的AcrylicBrush只能这样,除非自己重新写一套(比如Wox和Fluent Terminal),因为这样不符合Win10的相关设计规范:design/style/acrylic

只能等有缘人提个pr并成功合入主线后再说了…

本文作者:.torrent
本文链接:https://blog.hitachimako.top/2021/beautify-console-in-win10/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可