Selecione ou copie a linha de entrada atual em Terminal.app

2

Existe uma tecla de atalho para selecionar todo o texto de entrada na linha de entrada no Terminal.app do OS X?

    
por erikvold 07.01.2011 / 04:08

1 resposta

1

Você pode tentar filtrar edit-and-execute-command() ( manual ) através de um $EDITOR ou $VISUAL :

adequado
$ touch foo.sh
$ open foo.sh

Defina foo.sh content para o seguinte e salve:

#!/usr/bin/env bash
# copy current command input to clipboard -- requires local session
cat $1 | pbcopy

# clear the prompt, so no command gets executed when closing this script
# comment out the following line to execute the command you entered instead
echo -n "" > $1
exit 0

Em seguida, torne executável e defina como visual:

$ chmod +x foo.sh
$ export VISUAL=/Users/danielbeck/foo.sh

Em um prompt bash (ou qualquer prompt alimentado com readline , acho), você pode copiar a entrada do comando atual pressionando Ctrl-X Ctrl-E para invocar edit-and-execute-command() .

Edite seu arquivo ~/.inputrc para alterar a tecla de atalho para isso. Edite seu .bash_profile para manter isso como sua $EDITOR / $VISUAL - a desvantagem é óbvia, você nunca mais terá um $EDITOR adequado, infelizmente

Como alternativa, você pode tentar replicar o que este usuário está fazendo , mas ele está usando zsh , não bash .

O próprio Terminal não sabe qual parte da linha atual é o seu prompt, e qual parte é sua entrada. Então, acessando suas linhas, por exemplo através do AppleScript não funcionaria em geral.

Você pode, no entanto, ler a saída completa da guia atual e obter sua última linha e, por meio da filtragem, tentar remover a parte do prompt dela.

Meu prompt termina com $ , então o seguinte comando funciona:

tell application "Terminal" tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2-"

Ele obterá a propriedade history da guia atual da janela atual e filtrará por sed para remover todas as linhas vazias, depois obterá a última linha usando tail e, em seguida, removerá tudo até e incluindo a primeira $ da linha (isto é, meu prompt) usando cut .

A saída deste programa é sua linha de comando atual. Exercício realmente inútil:

~ $ osascript Library/Scripts/get_line.scpt 
 osascript Library/Scripts/get_line.scpt

Para copiá-lo para a área de transferência no final, altere para o seguinte:

tell application "Terminal" to tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2- | pbcopy"

Você pode usar o Automator para criar um serviço que receba nenhuma entrada no aplicativo Terminal e execute um único A ação Executar o AppleScript Script consiste no código acima. Salve e, opcionalmente, atribua um atalho de teclado em Preferências do Sistema »Teclado» Atalhos de Teclado »Serviços .

    
por 07.01.2011 / 21:32