Como copiar texto da linha de comando para a área de transferência sem usar o mouse?

10

Estou tentando descobrir uma maneira de copiar o texto atual em uma linha de comando para a área de transferência SEM tocar no mouse. Em outras palavras, preciso selecionar o texto apenas com o teclado. Encontrei uma solução intermediária que pode levar à solução completa:

Ctrl+a - move para o início da linha.

Ctrl+k - corta a linha inteira.

Ctrl+y - puxa o texto cortado de volta.

Como alternativa, também posso usar Ctrl+upara executar os 2 primeiros passos.

Obviamente, isso funciona, mas estou tentando descobrir onde exatamente o texto cortado está salvo. Existe uma maneira de acessá-lo sem usar Ctrl+y? Estou ciente xclipe até o uso para direcionar o texto diretamente para a área de transferência, por isso estava pensando em canalizar os dados salvos Ctrl+kno xclip, mas não sei como fazê-lo.

O método que eu consegui até agora é escrever um script que é usado xdotoolpara adicionar echoao início da linha e | zxcao final da linha e, em seguida, pressiona enter ( zxcsendo um alias personalizado que basicamente é canalizado para xclip). Isso também funciona, mas não é uma solução realmente "limpa".

Estou usando Cshell se isso faz alguma diferença.

EDIT: Eu não quero usar screencomo uma solução, esqueci de mencionar isso.

Obrigado!

Sancho Pancho
fonte
Não relacionado, mas também bom saber: Shift-Ins cola a seleção em um xterm, se você deseja não apenas cortar o texto, mas também colar.
dirkt

Respostas:

7

Se estiver usando xtermou um derivado, você poderá configurar as combinações de teclas para iniciar e finalizar uma seleção de texto e salvá-la como a seleção principal do X11 ou um buffer de corte. Veja man xterm. Por exemplo, adicione ao seu ~/.Xdefaults:

XTerm*VT100.Translations: #override\n\
    <Key>KP_1: select-cursor-start() \
            select-cursor-end(PRIMARY, CUT_BUFFER0)\n\
    <Key>KP_2: start-cursor-extend() \
            select-cursor-end(PRIMARY, CUT_BUFFER0)\n

Você pode ter apenas uma XTerm*VT100.Translationsentrada. Atualize o servidor X11 com o novo conteúdo do arquivo com xrdb -merge ~/.Xdefaults. Comece um novo xterm.

Agora, quando você tiver alguma entrada no prompt de comando, digitar 1no teclado numérico começará a selecionar o texto na posição atual do cursor, como o botão 1 do mouse. Mova o cursor com as teclas de seta e pressione 2o teclado numérico e o texto intermediário é destacado e copiado para a seleção primária e o cutbuffer0. Obviamente, outras chaves e ações mais adequadas podem ser escolhidas. Da mesma forma, você pode colar a seleção com ligações como insert-selection(PRIMARY).

meuh
fonte
Isso é ótimo! Eu não tinha ideia de que você poderia fazer isso. MUITO útil! É possível usá-lo no konsole?
Sancho Pancho
2
Dei uma olhada rápida no manual do konsole, mas ele não menciona esse tipo de controle. É improvável que você encontre isso na maioria dos emuladores de terminal, pois eles preferem fornecer configurações mais simples de gerenciar através de menus e caixas de diálogo.
meuh
O translationsrecurso é o recurso X Toolkit mencionado aqui e ali, que não possui contrapartida em outros kits de ferramentas. No entanto, você pode alternar entre conjuntos de traduções usando o keymaprecurso (observando o comentário sobre "Você pode ter apenas um").
Thomas Dickey
Obrigado por todos os comentários. Ainda não descobrimos a área de transferência ctrl-k / ctrl-y, alguém sabe como acessar isso ou onde ele realmente salva o texto cortado?
Sancho Pancho
@SanchoPancho Dependendo do seu csh, ele implementa um kill-ring interno que mantém o texto cortado e fornece de volta as ligações yank e yank-pop. Eu não acho que você tenha outro acesso a este anel. veja man csh .
meuh