config/init.d/700_psreadline.ps1
VerboseBlock 'PSReadine Settings' { WriteDebug "Setting Options" $PSReadLineOption = @{ AnsiEscapeTimeout = 100 BellStyle = 'Visual' CompletionQueryItems = 100 ContinuationPrompt = '>> ' DingDuration = 50 #ms DingTone = 1221 EditMode = 'Windows' HistoryNoDuplicates = $true HistorySaveStyle = 'SaveIncrementally' HistorySearchCaseSensitive = $false HistorySearchCursorMovesToEnd = $true MaximumHistoryCount = 4096 MaximumKillRingCount = 10 ShowToolTips = $true WordDelimiters = ';:,.[]{}()/\|^&*-=+' PredictionViewStyle = 'ListView' PredictionSource = 'HistoryAndPlugin' # Colors Colors = @{ Emphasis = $PSStyle.Foreground.BrightCyan Error = $PSStyle.Foreground.BrightRed InlinePrediction = "`e[97;2;3m" Keyword = $PSStyle.Foreground.BrightGreen ListPrediction = $PSStyle.Foreground.Yellow ListPredictionSelected = "`e[48;5;238m" Member = $PSStyle.Foreground.White Number = $PSStyle.Foreground.BrightWhite Operator = $PSStyle.Foreground.BrightBlack Parameter = $PSStyle.Foreground.BrightBlack Selection = $PSStyle.Foreground.Black + $PSStyle.Background.White String = $PSStyle.Foreground.White Type = $PSStyle.Foreground.Cyan Variable = $PSStyle.Foreground.BrightGreen } } Set-PSReadlineOption @PSReadLineOption WriteDebug "Updating KeyHandlers" Set-PSReadlineKeyHandler Ctrl+Shift+C CaptureScreen Set-PSReadlineKeyHandler Ctrl+Shift+R ForwardSearchHistory Set-PSReadlineKeyHandler Ctrl+R ReverseSearchHistory Set-PSReadLineKeyHandler Ctrl+Home BeginningOfHistory Set-PSReadlineKeyHandler Ctrl+M SetMark Set-PSReadlineKeyHandler Ctrl+Shift+M ExchangePointAndMark Set-PSReadlineKeyHandler Ctrl+K KillLine Set-PSReadlineKeyHandler Ctrl+I Yank Set-PSReadLineKeyHandler Ctrl+h BackwardDeleteWord Set-PSReadLineKeyHandler Ctrl+Enter AddLine Set-PSReadLineKeyHandler Ctrl+Shift+Enter AcceptAndGetNext Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete # Sometimes you enter a command but realize you forgot to do something else first. # This binding will let you save that command in the history so you can recall it, # but it doesn't actually execute. It also clears the line with RevertLine so the # undo stack is reset - though redo will still reconstruct the command line. Set-PSReadLineKeyHandler -Key Alt+w ` -BriefDescription SaveInHistory ` -LongDescription 'Save current line in history but do not execute' ` -ScriptBlock { param($key, $arg) $line = $null $cursor = $null [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor) [Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line) [Microsoft.PowerShell.PSConsoleReadLine]::RevertLine() } # Insert text from the clipboard as a here string Set-PSReadLineKeyHandler -Key Ctrl+Shift+v ` -BriefDescription PasteAsHereString ` -LongDescription 'Paste the clipboard text as a here string' ` -ScriptBlock { param($key, $arg) Add-Type -Assembly PresentationCore if ([System.Windows.Clipboard]::ContainsText()) { # Get clipboard text - remove trailing spaces, convert \r\n to \n, and remove the final \n. $text = ([System.Windows.Clipboard]::GetText() -replace "\p{Zs}*`r?`n", "`n").TrimEnd() [Microsoft.PowerShell.PSConsoleReadLine]::Insert("@'`n$text`n'@") } else { [Microsoft.PowerShell.PSConsoleReadLine]::Ding() } } } |