Есть ли команда / программа / командлет, который пишет в буфер приглашения? - PullRequest
2 голосов
/ 10 января 2020

Я пытаюсь выяснить, могу ли я записать вывод команды в буфер приглашения, чтобы разрешить дальнейшее редактирование? Примерно так, где Write-PromptBuffer - желаемая команда:

PS C:\> echo "foo bar" | Write-PromptBuffer
PS C:\> foo bar

Что-то эквивалентное тому, что zsh делает с print -z (см. http://zsh.sourceforge.net/Guide/zshguide03.html)

Моя основная мотивация для этого - что-то вроде:

PS C:\> Get-Content (Get-PSReadLineOption).HistorySavePath | fzf

, которая "сбросила бы" выбранную (принятую в fzf lin go) запись как редактируемую команду в приглашении.

(Примечание: я знаком с PSFzf, но я пытаюсь найти команду общего назначения, чтобы сделать это, поскольку у меня есть другие варианты использования, которые извлекут выгоду из этого)

1 Ответ

1 голос
/ 14 января 2020

Модуль PSReadLine может быть вставлен в буфер, например,

[Microsoft.PowerShell.PSConsoleReadLine]::Insert("foo bar")

Однако, поскольку это предназначено для редактирования буфера текущей строки, а не следующей строки, вам понадобится сделать что-то вроде этого

#pipeline to variable $myBuffer function
function Write-PromptBuffer {
    param (  
        [parameter(ValueFromPipeline, ValueFromRemainingArguments = $true)]
        $global:myBuffer
        )
}
#Add a PSReadLineKeyHandler to insert $myBuffer
Set-PSReadLineKeyHandler -Key Alt+x `
    -ScriptBlock {
    param($key, $arg)   # The arguments are ignored in this example
    #write to buffer
    [Microsoft.PowerShell.PSConsoleReadLine]::Insert($myBuffer)
}

Теперь заполните $ myBuffer строкой и назовите ее Alt + w

PS C:\> echo "foo bar" | Write-PromptBuffer
PS C:\> foo bar

В качестве альтернативы и не очень, вы можете использовать SendKeys

function Write-PromptBuffer {
    param (  
        [parameter(ValueFromPipeline, ValueFromRemainingArguments = $true)]
        $myBuffer
        )
    (new-object -com wscript.shell).SendKeys($myBuffer)
}

Надеюсь, это помогает,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...