Profile – część trzecia.
W tej części zamierzam poznęcać się nieco nad profilem dla ‘tradycyjnej’ konsoli. PowerShell.exe dziedziczy wszystkie ograniczenia cmd.exe. Nawet jego kolorystyka jest w zasadzie mocno naciąganym szachrajstwem. By się o tym przekonać wystarczy sprawdzić jaką wartość mają kolory. Czy Waszym zdaniem piszecie na żółto po fioletowym tle? Nie? To sprawdźcie wartość Back/ Foreround color. Wartości obu parametrów domyślnie ustawione są pewnie tak jak u mnie:
Nie regulujcie odbiorników. Wiem, u Was wygląda to zdecydowanie inaczej. Przyczyna? Domyślny skrót do PowerShell.exe ma pozmienianie wartość RGB kolorów podstawowych, więc DarkMagenta może i jest nawet Dark, ale na pewno daleko mu do Magenta. O zażółceniu DarkYellow nawet nie wspominam… 😉
To powoduje, że staram się unikać definiowania kolorystyki konsoli. Skupiam się na jej rozmiarze okna, bufora i funkcji prompt. Zacznę od ostatniego, jako że nie jestem autorem tak zacnej implementacji. Generalnie moja funkcja została zadoptowana ze skryptu autorstwa MVP Joela Benneta (@Jaykul): http://poshcode.org/2095
Korzyści? Ścieżka (wraz z informację o bieżącej przestrzeni nazw) jest wyrzucona do tytułu okna. Widzę, na jakim koncie (i z jakimi uprawnieniami) pracuję. A dzięki temu, że wiem jakie ‘id’ ma bieżąca komenda, mogę bez trudu skorzystać później z cmdletu Invoke-History (alias: r) i ponowić jej wykonanie. Dodatkowo taki sposób wyświetlania ułatwia kopiowanie zawartości do dowolnego edytora skryptów. Prompt jest oznaczony jako komentarz blokowy, nie wpływa na działanie komend wpisanych za nim. 🙂
Pozostaje kwestia gabarytów. Jak wszyscy wiemy skalowanie okna cmd nie jest bardzo przyjemne. W powershell.exe sprawa jest nieco prostsza: zmienna $host zawiera pewne elementy, które umożliwią nam w prosty sposób okno ‘rozdymać’ do rozmiarów maksymalnych. Zwrócę tylko uwagę, że całość wrzuciłem w blok try {} catch. O tym dlaczego tak zrobiłem – nieco niżej. Kod, który obecnie wykorzystuję:
try { $host.UI.RawUI.CursorSize = 100 $MySize = $Host.UI.RawUI.MaxPhysicalWindowSize $MySize.Height -= 2 # We need titlebar after all $MySize.Width -= 4 $MyBuffer = $MySize $MyBuffer.Height = 5000 # Set to any value you need I like it looong. $Host.UI.RawUI.BufferSize = $MyBuffer $Host.UI.RawUI.WindowSize = $MySize } catch { # Since it's PowerGUI, let us set some Console settings... $Host.UI.RawUI.ForegroundColor = 'White' $Host.UI.RawUi.BackgroundColor = 'black' }
W ten sposób okno powinno nam urosnąć, a bufor wydłużyc się znacznie (dzięki temu rezultaty poszczególnych komend jeszcze długo będzie można podejrzeć). Dlaczego przewiduję błędy? Otóż niektóre narzędzia firm trzecich (PowerGUI, PowerShellPlus) mogą uruchamiać nasze profile, w tym profil powershell.exe. Naturalnie, próba zmiany rozmiaru okna w taki sposób nie zadziała w tych aplikacjach. A po co się denerwować błędami? 😉
Co jeszcze w moim profilu do powershell.exe można znaleźć? Niewiele. Z modułów ładuję w tym profilu przede wszystkim PowerTab, który zdecydowanie ułatwia pracę z tabulatorem. Oprócz tego (zakładając ładowanie profilu przez PowerGUI) definiuję kilka elementów przydatnych w zagnieżdżonej w tej aplikacji konsoli (ale to już nieco inna historia…). Do tego kilka innych modułów, których działanie upraszcza pracę z PowerShellem. Część z nich używam zarówno w PowerShell.exe jak i w ISE. Czemu więc nie przeniosłem ich do profilu dzielonego przez wszystkie hosty? O tym w następnej części cyklu, gdy zajmę się cudami jakie można wyczyniać w ISE.
[…] Część 3: PowerShell.exe […]
PowerTab – fajny moduł, przyda się … dzięki
z każdym kolejnym artykułem robi się coraz ciekawiej 🙂