2026-10-23

Firefox klavye kısayolları

Günümün yarısı Firefox ile geçiyor. Klavye kısayolları artık kaçınılmaz. Kopyala/yapıştır gibi basit kısayolların dışında az kullanılan klavye kısayollarını hatırlayabilmek için yazıyorum.

Alt + HomeBaşlangıç sayfasına (Home) git
Ctrl + Shift + RÖnbelleği görmezden gelerek sayfayı yeniden yükle
Ctrl + ZGeri al

Ctrl + Y / Ctrl + Shift + Z 

Geri aldığını tekrar yap
Ctrl + G / F3Tekrar bul (Shift ile geriye doğru)
Shift + Tab / Ctrl + oklar

Adres satırında arama motorları seçimine geç

(sonrasında yukarı aşağı yok turşları ile seçim)

Ctrl + E|K|L /Alt + D / F6Arama kutusuna (adres satırı) geç
Ctrl + Shift + PageUp/downSekmeyi sağa/sola taşı
Ctrl + MMevcut sekmenin sesini kapat/aç
Alt + Enter / Ctrl + EnterAdres satırında yazılan adresi yeni sekmede aç
Alt + Shift + Enter / Ctrl + Shift + EnterAdres satırında yazılan adresi arka planda yeni sekmede aç
Ctrl + D    Mevcut sekmeyi yer imlerine ekle
Ctrl + Shift + DAçık tüm sekmeleri yer imlerine ekle
Ctrl + HGeçmişi aç (diğer cihazlardaki geçmiş de görüntülenir)
Ctrl + Shift + H / Ctrl + Shift + OArşivi aç
Ctrl + Shift + BYer imleri araç çubuğunu görüntüle/kaldır
Ctrl + Shift + AEklentileri aç
Ctrl + Shift + I / F12Geliştirici araçlarını aç
Ctrl + Shift + STarayıcıdan ekran görüntüsü al
Ctrl + Shift + MResponsive design görünümünü aç
Ctrl + USayfanın kaynağını göster
Shift + DelSeçili otomatik form doldurma girişini sil
F7Klavye ile gezinme kipine geç
F9Okuma kipine geç
Shift + F10Sayfanın bağlam menüsünü aç
N-P veya J-K veya ok tuşlarıPDF görüntüleyicide sayfalar arası geçiş
R ve Ctrl + RPDF görüntüleyicide sayfayı döndür
S / HPDF görüntülenicide seçim / el (hand) aracına geçiş yap
Ctrl + Alt + PPDF görüntülenicide sunum kipine geç (tam sayfa)

2026-10-22

SAPI.SPVoice ile Türkçe konuşan Windows

Powershell ile metni sese dönüştürebiliriz. Varsayılan olarak Tükrçe sesler seçilemiyor ama galiba bir çözümünü buldum.

Normalde şöyle yapılıyor. Önce bir SAPI.SPVoice nesnesi oluşturuluyor.

$SObj = New-Object -ComObject SAPI.SPVoice

Sonra "konuş" demek yeterli.

$SObj.Speak("Hello World")

Ama Türkçe yerelleştirmeli bir Windows 11 Professional'da bile Türkçe ses yok. Sesleri listelemek için

$SObj.GetVoices() | ForEach-Object { $_.GetDescription() }

komutu gerek. Ama benim bilgisayarımda burada sadece Zira (English) görünüyor. Buna rağmen

Ayarlar > Zaman ve dil > Dil ve bölge

altında "Dil" bölümünde Türkçe, metin okumak için listeleniyor. Ayrıca

Ayarlar > Erişilebilirlik > Ekran okuyucusu > Ekran okuyucusunun sesi > Ses seçin

bölümünde Tolga sesi de görünüyor ve seçili.

Biraz registry'yi inceleyince

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens

altında Tolga sesini buldum. Bunu kullanmak için

$ses_adi = "MSTTS_V110_trTR_Tolga"
$reg_yolu = "HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\$ses_adi"

reg copy $reg_yolu "HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens\$ses_adi" /s /f
reg copy $reg_yolu "HKLM\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\$ses_adi" /s /f

kullanarak kullanılabilir Tolga token bilgisini ilgili yerlere kopyaladım. Bunun sonucunda

$SObj.GetVoices() | ForEach-Object { $_.GetDescription() }

kullanarak Tolga (Türkçe) sesini listeleyebildim. Ses seçimi yaparak bir konuşma yapan fonksiyon oluşturdum.

function Out-Speak {
    param(
    	[string]$text="Merhaba Dünyalı"
    )
    $SObj = New-Object -ComObject SAPI.SPVoice
    $SObj.voice = $SObj.GetVoices() | where {$_.GetDescription() -match "Tolga"}
    $SObj.Speak($text)
}

2026-10-21

Write-Progress

Powershell'de uzun süren görevlerin durumunu görüntülemeye yarayan bir "progress bar" gösterimi var. En basit haliyle işlerin ne durumda olduğunu göstermek için


...
Write-Progress -Activity "Aciliyor..."
...
Write-Progress -Activity "Isleniyor..."
...
Write-Progress -Activity "Kapaniyor..."
...

gibi bir kullanım mümkün. Sürecin neresinde olduğumuz konusunda genel bir fikir vermek için yeterli. Ama bu aşamada bir progress bar yok. Bunu yapabilmek için elimizdeki işin tümünün kaç birim olduğunu, şu bu işlerin ne kadarının işlendiğini bilmemiz gerek. Çok basit bir for döngüsü için


for ($i=0;$i -lt 10;$i++) {
	Write-Progress -Activity "Sayiyor..." -PercentComplete $($i*10)
    Start-Sleep 1
}

Çok hızlı saymasın diye, yavaşlatmak amacıyla Start-Sleep kullandım. Evet, bu bir ilerleme çubuğu verir, çünkü döngünün toplamda 10 kere tekrarlayacağı ve şu anda kaçıncı döngüde olduğumuz ($i) bilgisi elimizde var. Ama kafama birşey takıldı; ilerleme çubuğu ne zaman kayboluyor? -PercentComplete %100'e gelse bile kaybolmuyor. Ancak komut sonlandığında kayboluyor. Yani terminalde sadece

Write-Progress -Activity "Calisiyor..."

Yazıp enter'a basınca ilerleme çubuğu o kadar kısa bir sürede gösterilip kayboluyor ki göremiyorum bile. Peki, bir tuşa basılmasını bekleyen Read-Host ile kullansam?


Write-Progress -Activity "Calisiyor...";Read-Host

Faydasız, yine görünmedi. Peki Read-Host yerine Start-Sleep kullansam?


Write-Progress -Activity "Calisiyor...";Start-Sleep 1

Evet, şimdi 1 saniye boyunca bir ilerleme çubuğu görüntülendi. Buradan çıkan sonuç; -PercentComplete parametresi %100'e gelse bile görüntülenme devam ediyor, ancak console host kontrolü devralıncaya kadar. Klavye'den bir giriş yapılması gereken durumlarda progress bar kapanıyor. Ama bu kadar ile bitmiyor, Write-Progress'in bir de -Completed parametresi var. Bu sadece bu parametre progress bar'ı ekrandan kaldırabiliyor. Örnek:


Write-Progress -Activity "Calisiyor...";Start-Sleep 1;Write-Progress -Activity "Bitti" -Completed;Start-Sleep 2

Bunu çalıştırıp Enter'a basınca 1 saniye boyunca ekranda "Calisiyor..." yazıyor, sonrasında -Completed parametresi olan bir Write-Progress kullanımı olduğu için progress bar kayboluyor, 2 saniye de ekranda hiç progress bar gösterimi olmadan bekliyorum.

Write-Progress'in bundan biraz daha fazla ayrıntıya sahip parametreleri var. Örneğin -Activity parametresine ek bilgi sağlamak için -Status parametresi kullanılabilir. Bu parametre ile sağlanan bilgi, -Activity ile sağlanan bilginin altında görüntülenir.


Write-Progress -Activity "Calisiyor..." -Status "Dosya acildi"

gibi.

Aynı anda birden fazla progress bar gösterilmesi gereken durumlarda -Id paramteresi ile hangi progress bar'ın güncelleneceğini seçebiliriz.


for ($i=0; $i -lt 5; $i++) {
   Write-Progress -Id 1 -Activity "i degiskeni artiyor" -Status "i=$i" -PercentComplete $($i*10)
   for ($j=0; $j -lt 5; $j++) {
      Write-Progress -Id 2 -Activity "j degiskeni artiyor" -Status "j=$j" -PercentComplete $($j*10)
      Start-Sleep -Milliseconds 100
   }
}

Ama burada iki progress bar da aynı seviyede yer aldı. Birisinin (i) diğerinin (j) üstü olduğunu göstermek için -Parent parametresi var. Bunun yaptığı tek şey, aslında j döngüsüne ait olan Write-Progress'i soldan girintili bir şekilde göstermek. j'nin ilerlemesini gösteren progress bar'a ait Write-Progress'in -Parent parametresine, üstü olan i döngüsünün Write-Progress'inin Id'sini vermek gerek. Aşağıdaki gibi.


for ($i=0; $i -lt 5; $i++) {
   Write-Progress -Id 1 -Activity "i degiskeni artiyor" -Status "i=$i" -PercentComplete $($i*10)
   for ($j=0; $j -lt 5; $j++) {
      Write-Progress -Id 2 -Parent 1 -Activity "j degiskeni artiyor" -Status "j=$j" -PercentComplete $($j*10)
      Start-Sleep -Milliseconds 100
   }
}

2026-10-20

VS Code ve powershell remoting

Uzak bir bilgisayara

Enter-PSSession -Computername sunucu01

ile bağlanıp çalışıyorum. Bazen uzaktaki bilgisayarda bir metin dosyasını düzenlemek istiyorum. Yeni çıkan edit aracı çok güzel, ama powershell remoting ile çalıştıramadım. Üstelik de sunucularda yok.

Bu işe bir çözüm ararken farkettim [1, 2] ki uzak bilgisayardaki bir dosyayı yerel bilgisayarda kurulu VS Code ile düzenleyebiliyorum.

Tek yapmam gereken VS Code'un kendi terminalinden uzaktaki bilgisayara bağlanıp

psedit dosya.ps1

komutunu vermek. Uzaktaki dosya çalıştığım bilgisayarda geçici bir klasöre aktarılıp VS Code ile açılıyor. Kaydettiğimde de tekrar uzaktaki bilgisayara aktarılıyor.

Burada VS Code'un powershell terminali konusu biraz kritik. VS Code'un powershell eklentisi yüklü olmalı. Bazen VS Code penceresinin içinde birden fazla powershell terminali açılmış olabiliyor. Bu durumda hangisinin eklentiye ait olan terminal olduğunu görebilmek için

$host.name

komutunun çıktısının

Visual Studio Code Host

olması gerek.

2026-10-19

flatpak uygulamalarını terminalden çalıştırma

Windows'da bir dosyayı VS Code ile açmak için

code dosya.txt

demek yeterli. Fedora'da VS Code'un açık kaynaklı sürümünü, flatpak ile kurdum; code-oss. Ama terminalden ne code ne de code-oss kullanarka doğrudan ulaşamıyorum. Flatpak ile kurulan uygulamarlın çalışması için

flatpak run com.visualstudio.code-oss

yapmak gerekiyor.

Daha kısa bir yol olarak bir alias oluşturabilirim. Bash için .bashrc dosyasına, zsh için .zshrc dosyasına öyle bir satır gerekli:

alias code='flatpak run com.visualstudio.code-oss'

Bunun sonucunda her yerden

code dosya.txt

yazmak yeterli.

Başka bir seçenek de flatpak export klasöründeki dosyaya kısayol oluşurmak. Flatpak kurulumu export konumu

~/.local/share/flatpak/exports/bin/

veya

/var/lib/flatpak/exports/bin

olabilir. Henüz yoksa ~/.local/bin klasörü oluşturup içine şu şekilde bir kısayol oluşurabilirim.

ln -s /var/lib/flatpak/exports/bin/com.visualstudio.code-oss ~/.local/bin/codeoss

2026-10-17

Siber savaşlar

El Cezire (Al Jazeera) youtube kanalı, yayınladığı bir videoda topluca siber saldırıya maruz kaldıklarını açıkladı. İlginç olan şu ki kimse ne bir zararlı yazılım yüklemişti ne de gönderilen mesajların içindeki kötü niyetli bir bağlantıya tıklamıştı. Tek yaptıkları masum haber sitelerinde gezinmekti.

El Cezire'den Muhammet Hasan'ın anlattıklarına göre telefonlara ve bilgisayarlara kurulan zararlı yazılım bir İsrail firması olan Candiru tarafından geliştirilmiş. Kelimenin tam anlamıyla kurulduğu cihazı tam olarak ele geçiren ve tespit edilmesi çok zor olan bu zararlı yazılımın sisteme bulaşması için zararlı içeriği gizleyen bir reklamın olduğu sayfada dolaşmak yeterli. Daha önce olduğu gibi hedef kitlenin dışında başka sistemlere de kurulmuş olması olasılıklar dahilinde. Ama açıklamayı yapan Muhammet Hasan'a göre hedef kitlenin seçimi daha "cerrahi bir müdahale ile" yapılmış. Bu noktada işe başka bir İsrail firması devreye giriyor: DiscoverTech. El Cezire çalışanlarının IP adresleri tespit edilmiş ve zararlı yazılım bu şekilde "noktasal" olarak kurulmuş.

El Cezire teknoloji takımı güzel bir iş çıkarıp gelen şikayetleri dikkate almış ve Kanada merkezli güvenlik şirketi Citizen Lab ile çalışarak bu işi ortaya çıkarmışlar. Zaten tetikte oldukları ve çok dikkatli davrandıkları söyleniyor. Ama buna rağmen basit bir "gezinme" bile buna sebep olmuş.

Stuxnet ve Pegasus gibi gelişmeler zaten kan dondurucuydu. Buna rağmen bu gelişme beni yine de şaşırttı.

---

https://threatlandscape.io/blog/citizen-lab-adfection-discover-tech-targeted-ads-zero-click-spyware
https://www.theguardian.com/technology/2026/oct/15/israeli-firm-digital-ads-enabling-installation-of-zero-click-spyware-researchers-say
https://www.reuters.com/legal/litigation/israeli-firm-used-online-ads-run-vast-spy-operation-researchers-say-2026-10-15/
https://citizenlab.ca/research/how-discover-tech-turned-targeted-ads-into-a-pipeline-for-spyware/
https://www.instagram.com/p/DemIB5cDgpA/

2026-10-15

Test-Connection -AsJob

Powershell'in ping eşdeğeri Test-Connection ile bir hedefe olan bağlantımı deniyorum.

Test-Connection -Computername 192.168.1.72 -Count 100

Bu şekilde, varsayılan gecikme/bekleme süresi olarak 1 saniye arayla 100 ICMP paketi gönderecek. Yani komutun tamamlanması ~ 100 sn sürecek. Bu cepte.

Bir de bunu arka planda çalıştırmak için kullanılan -AsJob parameteresi var. Bunu kullanarak bu işlemi arka planda gerçekleştirmek istedim.

Test-Connection -Computername 192.168.1.72 -Count 100 -AsJob

Ekrana arka planda çalışacak görevin kimliğini ve adını yazdı.

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
5      Job5            WmiJob          Running       True            .                    Test-Connection

Daha birkaç saniye geçtikten sonra Get-Job ile duruma baktım ve görev tamamlanmış:

Get-Job -Id 5
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
5      Job5            WmiJob          Completed     True            .                    Test-Connection

Emin olamadım, 100 tane ICMP paketi gerçekten gönderilmiş midir?

Wireshark'ı açıp ICMP filtresi ile tekrar başlattım ve evet, 100 ICMP echo request, 100 tane de echo reply ile 200 paket yakaladı. İlk paketin gönderilmesinden son paketin alınmasına kadar geçen süre de 1 saniyeden çok daha kısaydı. Bu gerçeği belgeleyen bir kaynak bulamadım ama konu çevrim içi ortamlarda konuşulmuş (1, 2).

Ne kadar sürdüğünü bulmak için Measure-Command kullanılabilir.


Measure-Command { Test-Connection -ComputerName bosbdc10 -Count 10 -Delay 1 -AsJob | wait-Job } | select -ExpandProperty totalmilliseconds 

2026-10-14

System Partition vs Boot Partition

Windows'da işletim sisteminin (yani \Windows klasörünün) yüklü olduğu disk bölümü Boot Partition (önyükleme bölümü) olarak adlandırılır.

EFI verilerinin tutulduğu disk bölümü ise System partition (sistem bölümü) olarak adlandırılır.

Sistemdeki disk bölümlerini ayrıntılı görebilmek için


gcim win32_volume | ? FileSystem | ft Label, DriveLetter, BootVolume, FileSystem, SystemVolume

Bu komutun BootVolume sütununda True olan önyükleme bölümü, SystemVolume sütununda True olan da sistem bölümüdür.

2026-10-04

Powershell'de tarih verisini ayrıştırmak

Powershell'de Get-Date cmdlet'ini kullanarak istediğimiz biçimde tarihi ve saati yazdırabiliyorum.

Get-Date -Format "dd.MM.yyyy HH:mm:ss"
31.12.2026 20:33:45
Get-Date -Format "yyyy-MM-ddTHH-mm-ss"
2026-12-31T20-33-45

Ama string veri tipinden tarih verisini almak için o kadar fazla seçeneğimiz yok. Şöyle yöntemler var:

Get-Date -Date "31.12.2026 20:33:45"
[datetime]"31.12.2026 20:33:45"

ama sistem tarih biçimine uymayan bir yapıyı ayrıştırmıyor. Örneğin benim bilgisayarımda tarih formatını yyyy-MM-dd HH:mm:ss gibi bir biçimde ayarladığım için 16.07.2026 18:45:13 verisini ayrıştırmak mümkün olmadı. Bunun yerine .Net'in ParseExact() metodunu kullandım:


[datetime]::ParseExact(
	"16.07.2026 18:45:13",
    "dd.MM.yyyy HH:mm:ss",
    [Globalization.CultureInfo]::InvariantCulture)

2026-10-03

Fedora altında powershell sorunu

Genelde kullandığım Linux sistemlere de powershell kurmak gibi bir alışkanlığım var. Ama bir süredir yaşadığım bir sorun vardı ve çözümünü buldum.

Gnome terminalde pwsh yazarak geçtiğim powershell içinde yukarı/aşağı ok tuşları ile geçmiş komutlar arasında geçiş yapabiliyorum. Yani PSReadline yüklü. Bunu

gmo -n psreadline

ki bu da şunun kısaltılmışı:

Get-Module -Name PSReadLine

ile de doğruladım. Ama Ctrl+ok tuşları ile kelime atlamalı olarak gezinemiyorum. Her seferinde tek tek ok tuşlarına basarak gitmek zor. Farkettim ki powershell, Emacs edit kipinde çalışıyormuş:

Get-PSReadLineOption | Select-Object EditMode

Bu kipte kelime atlamalı gezinmek için Alt+f (forward, ileriye) ve Alt+b (backward, geriye) tuşları çalışıyor. Ama alışkanlıklar zor değişir. Bunu Windows kipine değiştirmek istedim.

Set-PSReadLineOption -EditMode Windows

Bunun sonucunda küçük bir kazancım daha oldu; tüm satırı silmek için Ctrl+u kısayolunu kullanıyordum, Windows alışkanlığı Esc satırı temizlemiyordu. Artık temizliyor.

2026-10-02

karakter array'i string'e çevirmek

Daha önce bunun tam tersini yapmaya ihtiyacım olmuştu. ssh ile bağlandığım linux sunucu üzerindeki bazı verileri analiz etmek için powershell'e, Windows Terminal'e yapıştırmak istedim. Çok satırlı bir metin verisi kopyaladığım için, powershell'de geçici bir değişkeni şu şekilde oluşturdum:

$a = @"
reboot   system boot  6.8.0-139-generi Tue Sep 22 15:31:47 2026   still running
reboot   system boot  6.8.0-138-generi Tue Sep 22 14:38:57 2026 - Tue Sep 22 15:20:27 2026  (00:41)
reboot   system boot  6.8.0-138-generi Wed Sep  2 17:08:47 2026 - Wed Sep  2 17:54:05 2026  (00:45)
reboot   system boot  6.8.0-134-generi Tue Aug 18 07:34:14 2026 - Tue Aug 18 08:45:37 2026  (01:11)
reboot   system boot  6.8.0-134-generi Tue Jul 28 08:10:40 2026 - Tue Jul 28 13:38:55 2026  (05:28)
reboot   system boot  6.8.0-134-generi Mon Jul 27 08:17:26 2026 - Mon Jul 27 18:01:39 2026  (09:44)
reboot   system boot  6.8.0-134-generi Mon Jul 13 15:14:51 2026 - Mon Jul 13 15:51:52 2026  (00:37)
reboot   system boot  6.8.0-100-generi Mon Jul 13 13:16:43 2026 - Mon Jul 13 15:14:29 2026  (01:57)
reboot   system boot  6.8.0-100-generi Mon Jul 13 13:08:22 2026 - Mon Jul 13 13:16:23 2026  (00:08)
reboot   system boot  6.8.0-100-generi Mon Jul 13 11:19:48 2026 - Mon Jul 13 13:07:12 2026  (01:47)
reboot   system boot  6.8.0-100-generi Fri May 22 16:53:31 2026 - Fri May 22 17:54:22 2026  (01:00)
reboot   system boot  6.8.0-100-generi Tue Mar 17 17:14:18 2026 - Tue Mar 17 17:18:30 2026  (00:04)
"@

Bunun sonucunda bu geçici değişkende kaç satırımın olduğuna bakmak istedim:


$a.Length

Bunun sonucunda kopyaladığımdan satır sayısından çok daha fazla bir değer döndü. Bunun sebebi de bu sayının satır sayısını değil, toplam karakter sayısını göstermesiydi. Örneğin 0 ile 5 arasındaki elemanları ekrana yazdırmak istediğimde


$a[0..5]
r
e
b
o
o
t

gördüm. Satırlar, Linux'ta genellikle yapıldığı gibi, 0xA karakterleri ile ayrılıyordu. Bunu satır bazlı bir değişkene dönüştürmek için


$b = $a -split [char]0xA

Bunun sonucunda b değişkeninide gerçek satır sayısı kadar eleman vardı.


$b.Length

2026-10-01

Powershell prompt denemesi

İ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◗
0xE0B5sağ yarım çember
0xE0B6◖
0xE0B7sol yarım çember
0x256D╭
0x256E╮
0x256F╯
0x2570╰
0x250C┌
0x2510┐
0x2514└
0x2518┘
0x2500─
0x2502│

----

https://www.alt-codes.net/

https://www.w3schools.com/charsets/ref_utf_geometric.asp#gsc.tab=0

https://www.symbolselect.com/right-triangle/