Partager via


Alterar o cursor do PowerShell e do CMD para aumentar a área disponível para digitar os comandos

Acredito que esse post vai ser desnecessário após a vinda do novo build do Windows 10. Mas de qualquer forma, até mesmo para quem utiliza outras versões do Windows, eu gostaria de compartilhar uma forma de alterar o cursor do PowerShell e do prompt de comando.

O motivador para escrever esse post foi o aumento no uso do prompt de comando (cmd ou powershell) para executar comandos do ASP.NET Core via linha de comando (dotnet CLI).

Confesso que eu estava incomodado em ter que abrir o prompt e ter pouco espaço para digitar os comandos. Exemplo via prompt de comando (CMD):

prompt

 

Para alterar a configuração do prompt do cmd, digite por exemplo:

prompt $p$_$g

Para ter o seguinte resultado:

newprompt

Infelizmente, essa configuração é mantida apenas na sessão aberta. Confesso que não sabia como persistir isso no CMD, antes do comentário do Igor Abade.

Para persistir a configuração do prompt no CMD, coloque o comando no Registry.

Crie uma REG_EXPAND_SZ chamada AutoRun em HKEY_CURRENT_USER\Software\Microsoft\Command Processor\ e coloque o comando lá.

Também recebi o comentário do Christopher Lewis que me passou o seguinte comando que deve ser executado como administrador no CMD:

SETX /M prompt $p$_$g

Mas no PowerShell é possível persistir essa configuração através do uso de Windows PowerShell Profiles.

O primeiro passo é abrir a ISE do PowerShell, por exemplo, através do executável: powershell_ise.exe.

Para quem não sabe, no PowerShell existe uma função chamada Prompt, responsável por formatar o prompt do PowerShell. O seguinte comando exibe a função:

get-command prompt

Por ser uma função, é possível consultar o código-fonte através do comando:

(get-command prompt).Definition

Uma vez que temos o código original, fica fácil sobrescrever a função original do PowerShell:

function prompt
{
"PS $($executionContext.SessionState.Path.CurrentLocation)`n>"
}

O texto "`n" representa a quebra de linha no PowerShell.

Para maiores detalhes sobre como consultar o código-fonte dos comandos do PowerShell, visite o post Consultar o código-fonte dos cmdlets do PowerShell.

Execute a função e observe que o prompt é alterado conforme o exemplo do CMD.

powershell

Para persistir a alteração, é necessário salvar a função prompt dentro do arquivo de profile.

No código a seguir, eu vou gravar em todos os profiles do usuário para que seja válido nos dois hosts do PowerShell (ISE e prompt) do usuário.

Isso é possível através do arquivo: $profile.CurrentUserAllHosts.

Por padrão, esse arquivo não existe no computador. Para criá-lo via PowerShell, execute o seguinte comando:

new-item -ItemType file -Path $($profile.CurrentUserAllHosts) -Value $script -force

Para abrir o arquivo via PowerShell, execute o seguinte comando:

invoke-item $profile.CurrentUserAllHosts

Copie a função recém-criada para o arquivo de profile e salve as alterações. O arquivo ficará da seguinte forma:

notepad

Observe que tivemos um trabalho manual de ter que copiar a função para dentro do arquivo de profile. Para fazer tudo de uma única vez, via script, execute o seguinte comando:

$script = @'
function prompt
{
"PS $($executionContext.SessionState.Path.CurrentLocation)`n>"
}
'@

new-item -ItemType file -Path $($profile.CurrentUserAllHosts) -Value $script -force

invoke-item $profile.CurrentUserAllHosts

newpowershell

Espero que tenham gostado. Até a próxima.

Comments

  • Anonymous
    August 02, 2016
    Eu uso o conemu ou o cmder. Não consigo usar o Windows sem eles. Pelo menos no CMD já vem una configuração parecida. No powershell é necessário fazer a configuração que você indica.
    • Anonymous
      August 02, 2016
      Show meu caro! Valeu!!!
  • Anonymous
    August 02, 2016
    Para persistir a configuração do prompt no CMD, coloque o comando no Registry. Crie uma REG_EXPAND_SZ chamada AutoRun em HKEY_CURRENT_USER\Software\Microsoft\Command Processor\ e coloque o comando lá.
    • Anonymous
      August 02, 2016
      Muito bom. Obrigado meu caro!!!