Skip to content

Odpicowany Windows Terminal - moja wersja

Posted on:29 stycznia 2021 at 10:45
Reading TIme:9 min czytania
Feature Image for  Odpicowany Windows Terminal - moja wersja

O Windows Terminal wspomniałem w zeszłym roku i nie spodziewałem się, że stanie się podstawowym narzędziem w codziennej pracy. Na dodatek, niesamowicie prosty w konfiguracji i personalizacji.

Windows Terminal - kolejna dobra zmiana Microsoftu

Windows Terminal to aplikacja konsolowa typu open source z obsługą wielu zakładek, sponsorowaną przez firmę Microsoft. Każda z tych zakładek może obsłużyć konsole cmd, Powershell, a także pracować z podsystemem WSL, środowiskami, odpalonymi z poziomu dockera, a nawet połączyć się ze zdalnymi zasobami dzięki protokołom SSH. W tym ostatnim przypadku należałoby dodać usługę OpenSSH (dostępna jako ficzer systemu Windows).

Porzucam wszelkie inne alternatywy, takie jak: Conemu2, Fluent Terminal czy Hyper.is. Mam nadzieję, ze stanie się domyślną konsolą w kolejnych wydaniach systemu Windows.

Zalety Windows Terminal

Ustawienia

Wszelkie personalizacje zakładek, profili czy zmiana globalnej konfiguracji dokonujemy z poziomu pliku konfiguracyjnego (dostaniecie się z poziomu aplikacji). Jest to plik JSON, więc od razu polecam ustawienia darmowego VS Code jako domyślnego edytora. Wszelkie zmiany, które zostaną wprowadzone, są widoczne z miejsca (po zapisie).

Struktura konfiguracji jest bardzo prosta, została podzielona na sekcje:

Podział okienka

Windows Terminal potrafi dzielić główny obszar na kilka paneli z różnymi powłokami systemowymi, dzięki czemu mam obok siebie pogląd np. na logi z Docker oraz logi z appki Node.js. Od dawna miał to Conemu2 czy CMDer, ma teraz Windows Terminal.

Tworzenie

Do dyspozycji mamy następujące kombinacje:

Przełączanie paneli

Aby przechodzić między panelami, wystarczy przy pomocy strzałek + alt przechodzić do interesującego panela (aktywny panel będzie wyróżniony obwódką).

Zmiana rozmiaru panelu

Nic bardziej trudnego. Wystarczy w aktywnym panelu przytrzymać alt + shift i za pomocą strzałek zmieniać rozmiar.

Paleta komend

Nie mogło zabraknąć i palety komend, dobrze znanej z VS Code, w którym pracuję na codzień. Kombinacja ctrl + shift + p otworzy paletę (szufladę) komend z możliwością filtrowania akcji czy poleceń, wbudowanych w terminal.

Dokumentacja

Jak na open-source’ową aplikację przystało, to Windows Terminal posiada bogatą dokumentację. Dlatego tutaj znajdziecie wszelkie informacje na temat paneli.

Moja konfiguracja

// 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": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
  "copyOnSelect": true,
  "useTabSwitcher": true,
  "profiles": {
    "defaults": {
      "fontFace": "JetBrainsMono NF",
      "fontSize": 10
    },
    "list": [
      {
        // Make changes here to the powershell.exe profile
        "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
        "name": "PowerShell",
        "commandline": "powershell.exe",
        "fontFace": "JetBrainsMono NF",
        "fontSize": 10,
        "hidden": false,
        "acrylicOpacity": 0.5,
        "closeOnExit": true,
        "colorScheme": "Tomorrow Night",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        "startingDirectory": "d:/",
        // "startingDirectory": "%USERPROFILE%",
        "useAcrylic": false,
        "backgroundImage": "%USERPROFILE%\\desktop_dark_mode.jpg",
        "backgroundImageOpacity": 0.2,
        "backgroundImageStretchMode": "uniformToFill"
      },
      {
        // Make changes here to the cmd.exe profile
        "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
        "name": "cmd",
        "commandline": "cmd.exe",
        "hidden": false,
        "acrylicOpacity": 0.75,
        "closeOnExit": true,
        "colorScheme": "Night Owl",
        "cursorColor": "#FFFFFF",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        // "startingDirectory": "%USERPROFILE%",
        "startingDirectory": "d:/",
        "useAcrylic": false,
        "backgroundImage": "%USERPROFILE%\\desktop_dark_mode.jpg",
        "backgroundImageOpacity": 0.2,
        "backgroundImageStretchMode": "uniformToFill"
      },
      {
        "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
        "hidden": false,
        "name": "Ubuntu",
        "source": "Windows.Terminal.Wsl",
        "acrylicOpacity": 0.5,
        "closeOnExit": true,
        "colorScheme": "Campbell",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        "startingDirectory": "%USERPROFILE%",
        "useAcrylic": false,
        "backgroundImage": "%USERPROFILE%\\desktop_dark_mode.jpg",
        "backgroundImageOpacity": 0.2,
        "backgroundImageStretchMode": "uniformToFill"
      },
      {
        "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
        "hidden": false,
        "name": "Ubuntu-20.04",
        "source": "Windows.Terminal.Wsl",
        "acrylicOpacity": 0.5,
        "closeOnExit": true,
        "colorScheme": "Ubuntu",
        "padding": "0, 0, 0, 0",
        // "backgroundImage": "%USERPROFILE%\\desktop_dark_mode.jpg",
        "backgroundImage": "%USERPROFILE%\\ubuntu.png",
        "backgroundImageOpacity": 0.2,
        "backgroundImageStretchMode": "none",
        "backgroundImageAlignment": "bottomRight"
      },
      {
        "name": "Malinka",
        "tabTitle": "Malinka",
        "commandline": "ssh pi@192.168.8.2",
        "icon": "%USERPROFILE%\\raspberry-32.png",
        "hidden": false,
        "acrylicOpacity": 0.75,
        "closeOnExit": true,
        "colorScheme": "Dracula",
        "cursorColor": "#FFFFFF",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        "backgroundImage": "%USERPROFILE%\\raspberrypi.png",
        "backgroundImageOpacity": 0.3,
        // "backgroundImageStretchMode": "uniformToFill",
        "backgroundImageStretchMode": "none",
        "backgroundImageAlignment": "bottomRight"
      },
      {
        "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
        "hidden": true,
        "name": "Azure Cloud Shell",
        "source": "Windows.Terminal.Azure"
      }
    ]
  },
  // Add custom color schemes to this array
  "schemes": [
    {
      "background": "#0C0C0C",
      "black": "#0C0C0C",
      "blue": "#0037DA",
      "brightBlack": "#767676",
      "brightBlue": "#3B78FF",
      "brightCyan": "#61D6D6",
      "brightGreen": "#16C60C",
      "brightPurple": "#B4009E",
      "brightRed": "#E74856",
      "brightWhite": "#F2F2F2",
      "brightYellow": "#F9F1A5",
      "cyan": "#3A96DD",
      "foreground": "#CCCCCC",
      "green": "#13A10E",
      "name": "Campbell",
      "purple": "#881798",
      "red": "#C50F1F",
      "white": "#CCCCCC",
      "yellow": "#C19C00"
    },
    {
      "background": "#000000",
      "black": "#000000",
      "blue": "#000080",
      "brightBlack": "#808080",
      "brightBlue": "#0000FF",
      "brightCyan": "#00FFFF",
      "brightGreen": "#00FF00",
      "brightPurple": "#FF00FF",
      "brightRed": "#FF0000",
      "brightWhite": "#FFFFFF",
      "brightYellow": "#FFFF00",
      "cyan": "#008080",
      "foreground": "#C0C0C0",
      "green": "#008000",
      "name": "Vintage",
      "purple": "#800080",
      "red": "#800000",
      "white": "#C0C0C0",
      "yellow": "#808000"
    },
    {
      "background": "#282C34",
      "black": "#282C34",
      "blue": "#61AFEF",
      "brightBlack": "#5A6374",
      "brightBlue": "#61AFEF",
      "brightCyan": "#56B6C2",
      "brightGreen": "#98C379",
      "brightPurple": "#C678DD",
      "brightRed": "#E06C75",
      "brightWhite": "#DCDFE4",
      "brightYellow": "#E5C07B",
      "cyan": "#56B6C2",
      "foreground": "#DCDFE4",
      "green": "#98C379",
      "name": "One Half Dark",
      "purple": "#C678DD",
      "red": "#E06C75",
      "white": "#DCDFE4",
      "yellow": "#E5C07B"
    },
    {
      "background": "#FAFAFA",
      "black": "#383A42",
      "blue": "#0184BC",
      "brightBlack": "#4F525D",
      "brightBlue": "#61AFEF",
      "brightCyan": "#56B5C1",
      "brightGreen": "#98C379",
      "brightPurple": "#C577DD",
      "brightRed": "#DF6C75",
      "brightWhite": "#FFFFFF",
      "brightYellow": "#E4C07A",
      "cyan": "#0997B3",
      "foreground": "#383A42",
      "green": "#50A14F",
      "name": "One Half Light",
      "purple": "#A626A4",
      "red": "#E45649",
      "white": "#FAFAFA",
      "yellow": "#C18301"
    },
    {
      "background": "#002B36",
      "black": "#073642",
      "blue": "#268BD2",
      "brightBlack": "#002B36",
      "brightBlue": "#839496",
      "brightCyan": "#93A1A1",
      "brightGreen": "#586E75",
      "brightPurple": "#6C71C4",
      "brightRed": "#CB4B16",
      "brightWhite": "#FDF6E3",
      "brightYellow": "#657B83",
      "cyan": "#2AA198",
      "foreground": "#839496",
      "green": "#859900",
      "name": "Solarized Dark",
      "purple": "#D33682",
      "red": "#DC322F",
      "white": "#EEE8D5",
      "yellow": "#B58900"
    },
    {
      "background": "#FDF6E3",
      "black": "#073642",
      "blue": "#268BD2",
      "brightBlack": "#002B36",
      "brightBlue": "#839496",
      "brightCyan": "#93A1A1",
      "brightGreen": "#586E75",
      "brightPurple": "#6C71C4",
      "brightRed": "#CB4B16",
      "brightWhite": "#FDF6E3",
      "brightYellow": "#657B83",
      "cyan": "#2AA198",
      "foreground": "#657B83",
      "green": "#859900",
      "name": "Solarized Light",
      "purple": "#D33682",
      "red": "#DC322F",
      "white": "#EEE8D5",
      "yellow": "#B58900"
    },
    {
      "name": "vscode",
      "background": "#232323",
      "black": "#000000",
      "blue": "#579BD5",
      "brightBlack": "#797979",
      "brightBlue": "#9BDBFE",
      "brightCyan": "#2BC4E2",
      "brightGreen": "#1AD69C",
      "brightPurple": "#DF89DD",
      "brightRed": "#F6645D",
      "brightWhite": "#EAEAEA",
      "brightYellow": "#F6F353",
      "cyan": "#00B6D6",
      "foreground": "#D3D3D3",
      "green": "#3FC48A",
      "purple": "#CA5BC8",
      "red": "#D8473F",
      "white": "#EAEAEA",
      "yellow": "#D7BA7D"
    },
    {
      "background": "#011627",
      "black": "#011627",
      "blue": "#82AAFF",
      "brightBlack": "#44596B",
      "brightBlue": "#5CA7E4",
      "brightCyan": "#21C7A8",
      "brightGreen": "#22DA6E",
      "brightPurple": "#7E57C2",
      "brightRed": "#EF5350",
      "brightWhite": "#FFFFFF",
      "brightYellow": "#FFEB95",
      "cyan": "#7FDBCA",
      "foreground": "#CCCCCC",
      "green": "#ADDB67",
      "name": "Night Owl",
      "purple": "#C792EA",
      "red": "#F78C6C",
      "white": "#BEC5D4",
      "yellow": "#FFCB8B"
    },
    {
      "name": "Tomorrow Night",
      "black": "#000000",
      "red": "#cc6666",
      "green": "#b5bd68",
      "yellow": "#f0c674",
      "blue": "#81a2be",
      "purple": "#b294bb",
      "cyan": "#8abeb7",
      "white": "#ffffff",
      "brightBlack": "#000000",
      "brightRed": "#cc6666",
      "brightGreen": "#b5bd68",
      "brightYellow": "#f0c674",
      "brightBlue": "#81a2be",
      "brightPurple": "#b294bb",
      "brightCyan": "#8abeb7",
      "brightWhite": "#ffffff",
      "background": "#1d1f21",
      "foreground": "#c5c8c6"
    },
    {
      "name": "Ubuntu",
      "black": "#2e3436",
      "red": "#cc0000",
      "green": "#4e9a06",
      "yellow": "#c4a000",
      "blue": "#3465a4",
      "purple": "#75507b",
      "cyan": "#06989a",
      "white": "#d3d7cf",
      "brightBlack": "#555753",
      "brightRed": "#ef2929",
      "brightGreen": "#8ae234",
      "brightYellow": "#fce94f",
      "brightBlue": "#729fcf",
      "brightPurple": "#ad7fa8",
      "brightCyan": "#34e2e2",
      "brightWhite": "#eeeeec",
      "background": "#300a24",
      "foreground": "#eeeeec"
    },
    {
      "name": "Solarized Dark - Patched",
      "black": "#002831",
      "red": "#d11c24",
      "green": "#738a05",
      "yellow": "#a57706",
      "blue": "#2176c7",
      "purple": "#c61c6f",
      "cyan": "#259286",
      "white": "#eae3cb",
      "brightBlack": "#475b62",
      "brightRed": "#bd3613",
      "brightGreen": "#475b62",
      "brightYellow": "#536870",
      "brightBlue": "#708284",
      "brightPurple": "#5956ba",
      "brightCyan": "#819090",
      "brightWhite": "#fcf4dc",
      "background": "#001e27",
      "foreground": "#708284"
    },
    {
      "name": "Dracula",
      "cursorColor": "#F8F8F2",
      "selectionBackground": "#44475A",
      "background": "#282A36",
      "foreground": "#F8F8F2",
      "black": "#21222C",
      "blue": "#BD93F9",
      "cyan": "#8BE9FD",
      "green": "#50FA7B",
      "purple": "#FF79C6",
      "red": "#FF5555",
      "white": "#F8F8F2",
      "yellow": "#F1FA8C",
      "brightBlack": "#6272A4",
      "brightBlue": "#D6ACFF",
      "brightCyan": "#A4FFFF",
      "brightGreen": "#69FF94",
      "brightPurple": "#FF92DF",
      "brightRed": "#FF6E6E",
      "brightWhite": "#FFFFFF",
      "brightYellow": "#FFFFA5"
    }
  ],
  // Add any keybinding overrides to this array.
  // To unbind a default keybinding, set the command to "unbound"
  // settings.json
  "keybindings": [
    {
      "command": {
        "action": "copy",
        "singleLine": false
      },
      "keys": "ctrl+c"
    },
    {
      "command": "paste",
      "keys": "ctrl+v"
    },
    {
      "command": "find",
      "keys": "ctrl+f"
    },
    {
      "command": {
        "action": "splitPane",
        "split": "auto",
        "splitMode": "duplicate"
      },
      "keys": "alt+d"
    },
    {
      "command": {
        "action": "closePane"
      },
      "keys": "ctrl+w"
    },
    {
      "command": {
        "action": "newTab"
      },
      "keys": "ctrl+t"
    }
  ]
}

Efekt powyżzszej konfiguracji mam taki:

Windows-Terminal

Dodatkowe informacje

Instalacja dedykowanych fontów z ligaturą (glyph)

Większość dostępnych fontów w systemie nie posiada specjalnych znaczków (glyphów), przez co w konsoli może objawić się pustymi znakami (prostokąty). Microsoft wypuścił rodzinę fontów Cascadia Code, dedykowaną do programowania (można ustawić zarówno w VS Code jak i w Windows Termnal). Ściągamy z repozytorium archiwum, rozpakowujemy i instalujemy dla wszystkich użytkowników. W konfiguracji konsoli czy terminala zmieniamy font-family na Cascadia Code PL.

Osobiście korzystam z JetBrains Mono ale zauważyłem, ze i tutaj są puste prostąkąty. Z pomoc przyszło świetne repozytorium termnalowych fontów - NerdFonts.com zawierające pokaźny katalog dostępnych odpowiednio zmodyfikowanych fontów. W tym ww. JetBrains Mono.

Doping powershella - Oh My Posh

Przyzwyczaiłem się do powłoki systemowej ZSH wraz z oh-my-zsh, która niemal zawsze ląduje na moich linuksowych zabawkach. Ze zdziwienieniem odkryłem fakt, ze podobne rozwiązanie mozna zastosować w Powershellu - z pomocą przychodzi oh-my-posh.

Instalacja jest trywialna.

  1. Instalacja modułów w Powershell
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
  1. Uruchomić polecenie notepad $PROFILE za pomocą kombinacji win+r albo w Powershellu.
  2. Otwiera się notatnik, Jeśli to pierwszy raz robimy, to pojawi sie pytanie o utworzenie pliku - klikamy na tak
  3. Wklejamy poniższy fragment kodu:
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Agnoster

Agnoster to nazwa motywu kolorystycznego, można zatem wybrać inny z dostępnej listy albo utworzyć własny.

  1. Przeładować / odświeżyć powershella za pomocą komendy . $profile

Protip: Skoro mamy utworzony skrypt, uruchamiający się wraz z powershellem, to możemy pokusić się o własne funkcje pomocnicze, dziąłające w terminalu.

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Agnoster

function U
{
param
(
[int] $Code
)

if ((0 -le $Code) -and ($Code -le 0xFFFF))
{
return [char] $Code
}

if ((0x10000 -le $Code) -and ($Code -le 0x10FFFF))
{
return [char]::ConvertFromUtf32($Code)
}

throw "Invalid character code $Code"
}

function ShowCharts
{
Write-Host "$(U 0xE0B0) $(U 0x00B1) $(U 0xE0A0) $(U 0x27A6) $(U 0x2718) $(U 0x26A1) $(U 0x2699)"
}

function GotoWorkspace
{
Set-Location d:\\w
}

function GotoProjekt
{
Set-Location d:\\w\\projekt
}

function Theme1
{
Set-Theme Agnoster
}
function Theme2
{
Set-Theme Paradox
}

Ściągawka znaleziona u Cezarego Walenciuka.

Podsumowanie

To nie są wszystkie możliwości windowsowego Terminala - patrząc na dość pokaźną dokumentację. Warto poświęcić czas na dopieszczenie terminala, urozmaicić codzienny workflow. Jako zatwardziały wieloletni użytkownik Okienek tym bardziej nie mam zamiaru zmieniać systemu. Praktycznie wszystko to, co potrzebuje do codziennej pracy jako web developer, mam pod ręką.

Z drugiej strony mocno przejechałem się na WSL2 i jego sławnej szybkości, ale to już temat na odrębny wpis.



Możesz napisać do mnie e-mail lub wyszukać mnie na Mastodonie.
Loading...