İzlediğim bir videoda gördüğüm powershell prompt'u hoşuma gitti, kopyalamak istedim. Videoda iki satırlı bir prompt vardı. İkinci satırın en solunda bir yuvarlak (led ışık gibi) vardı. En son çalıştırılan komut başarılı bir sonuç verirse yeşil led yanıyor (yeşil bir yuvarlak), hatalı sonuç verirse kırmızı led yanıyordu (kırmızı yuvarlak). Buraya kadar kolay. Eğer satıra birşey yazmadan (veya sadece boşluk varken) enter'a basınca da led sönüyordu (içi boş yuvarlak). Bu son kısmı nasıl yapacağımı bilemedim.
İlk bölüm için powershell $? powershell otomatik değişkenini kullandım. Prompt fonksiyonumun içinde şöyle bir koşul oluşturdum:
$IsOk = $?
...
if ($IsOk) {
$statstr = "$green$dolu_top $reset"
} else {
$statstr = "$red$dolu_top $reset"
}
Burada $IsOk değişkeninin atamasının yapıldığı satır prompt fonksiyonunun ilk satırı olmak zorunda. Aksi takdirde prompt satırına yazdığımız komutun sonucu değil, fonksiyonun içinde en son çalışan satırın sonucuna dair çıktı üretmiş oluruz. Dolu top için U+25CF karakterini kullandım. Yeşil renk olması için önüne
$green = "$esc[38;2;168;216;185m" # #A8D8B9
$reset = "$esc[0m"
$dolu_top = [char]0x25CF
$bos_top = [char]0x25CB
ekledim. bash'te de kullanılan ANSI Escape Code ekledim. Ayrıca sönük led için U+25CB unicode karakterini ekledim. Bu çalıştı. Sıra geldi boş satır için sönük led eklemeye. Powershell komut geçmişine boş satırlar dahil edilmiyor; ne Get-History'ye ne de Get-PSReadlineHistory'ye. Bunun yerine enter karakteri işlem düzenine müdahale ederek satır işlenmeden boş satır gelip gelmediğini kontrol etmenin yolunu kullandım. Prompt fonksiyonunun dışına, ama profil dosyamın içine bir global değişken tanımlayıp altına da Set-PSReadLineKeyHandler satırını ekledim.
$global:IsEmptyCommand = $false
Set-PSReadLineKeyHandler -Key Enter -ScriptBlock {
param($key, $arg)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
if ([string]::IsNullOrWhiteSpace($line)) {
$global:IsEmptyCommand = $true
} else {
$global:IsEmptyCommand = $false
}
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine($key, $arg)
}
Bu bölümde belirlenen $global:IsEmptyCommand değişkeni ile prompt fonksiyonu içine sönük led (boş yuvarlak) eklenmesi mümkün oldu. İlk belirttiğim if-else koşulunu şöyle değiştirdim:
if ($global:IsEmptyCommand) {
$statstr = "$green$bos_top $reset"
}
else {
if ($IsOk) {
$statstr = "$green$dolu_top $reset"
} else {
$statstr = "$red$dolu_top $reset"
}
}
Sonrasında da prompt içinde iki satırdan oluşan prompt satırımın ikinci satırına $statstr ekledim ve durum hoşuma gitti.
Bazı faydalı özel unicode karakerleri şöyle:
| 0xE0B0, 0x25B6 | ▶ | |
| 0xE0B1, 0x003E | > | |
| 0xE0B2, 0x25C0 | ◀ | |
| 0xE0B3, 0x003C | < | |
| 0xE0B4, 0x25D7 | ◗ | |
| 0xE0B5 | sağ yarım çember | |
| 0xE0B6 | ◖ | |
| 0xE0B7 | sol yarım çember | |
| 0x256D | ╭ | |
| 0x256E | ╮ | |
| 0x256F | ╯ | |
| 0x2570 | ╰ | |
| 0x250C | ┌ | |
| 0x2510 | ┐ | |
| 0x2514 | └ | |
| 0x2518 | ┘ | |
| 0x2500 | ─ | |
| 0x2502 | │ |
----
https://www.w3schools.com/charsets/ref_utf_geometric.asp#gsc.tab=0

