Sua função copia a linha para a área de transferência.
Para usar o buffer de colar do mouse em vez da área de transferência Ctrl + C / Ctrl + V, execute xsel
sem a opção -b
.
Para cortar em vez de copiar, exclua o texto depois: defina READLINE_LINE
como uma string vazia.
O Bash fornece configurações de terminal definidas por stty
precedence sobre suas próprias associações de teclas. Eu acho que a intenção é principalmente para obedecer as configurações do terminal para se o BackSpace envia ^H
ou ^?
, mas geralmente significa os atalhos de teclado do bash para todos os caracteres listados por stty -a
(ou seja, ^C
, ^D
, ^H
, ^Q
, ^S
, ^W
, ^Z
, ^\
e ^?
) não são usados por padrão. Você precisa cancelar a configuração stty do caractere de controle que deseja reativar.
Isso funciona para mim com o seguinte código em ~/.bashrc
com bash 4.3 no Ubuntu 16.04.
if [[ -n $DISPLAY ]]; then
stty kill ''
copy_line_to_x_clipboard() {
printf %s "$READLINE_LINE" | xsel -i;
READLINE_LINE= READLINE_POINT=0
};
bind -x '"\C-u": copy_line_to_x_clipboard';
fi
Não funciona se eu colar apenas na linha de comando: recebo o efeito mencionado em um comentário, ou seja, pressionar ^U
insere um literal ^U
. Ele funciona se eu executar stty kill ''
e, em seguida, bind -x …
em um comando subsequente.