Compartilhe a área de transferência entre bash e X11

10

Em este tópico , a resposta principal mostra como copiar texto que tenha previamente selecionado com o mouse em um terminal gnome, para a área de transferência no X11.

A minha pergunta é: Digamos que eu copie um trecho de texto do terminal usando o set-mark do bash e copie atalhos de teclado (por exemplo, set-mark + M-w ). É possível compartilhar esta área de transferência com o X11?

EDITAR : Na pergunta original, falei sobre compartilhar a área de transferência com o GNOME, mas como Gilles aponta abaixo, o GNOME não tem especificamente uma área de transferência (é geral para X), então atualizou a questão.

    
por Amelio Vazquez-Reina 14.08.2011 / 01:49

2 respostas

9

A área de transferência do Bash é interna para o bash, o bash não se conecta ao servidor X.

O que você poderia fazer é alterar o significado de M-w para copiar a seleção para a área de transferência X, além da área de transferência interna do bash. No entanto, a integração do bash é bastante solta, e eu não acho que haja uma maneira de acessar as informações da região ou a área de transferência do código bash. Você pode fazer uma ligação de chave para copiar toda a linha para a área de transferência do X.²

if [[ -n $DISPLAY ]]; then
  copy_line_to_x_clipboard () {
    printf %s "$READLINE_LINE" | xsel -ib
  }
  bind -x '"\eW": copy_line_to_x_clipboard'
fi

Se você quiser fazer coisas sofisticadas no shell, mude para o zsh, o que (entre outras vantagens) tem uma integração muito melhor entre o editor de linha e a linguagem de script.

if [[ -n $DISPLAY ]]; then
  x-copy-region-as-kill () {
    zle copy-region-as-kill
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  x-kill-region () {
    zle kill-region
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  zle -N x-copy-region-as-kill
  zle -N x-kill-region
  bindkey '\C-w' x-kill-region
  bindkey '\ew' x-copy-region-as-kill
fi

O Gnome não possui especificamente uma área de transferência, isso é geral para o X.
² A partir do bash 4.1, há um bug no código de análise de chave: sequências de teclas vinculadas com bind -x podem não ter mais de dois caracteres. Eu acho que o bash 4.2 corrige alguns casos de prefixos mais longos, mas não todos eles; Eu não pesquisei os detalhes.

    
por 14.08.2011 / 02:39
7

@Gilles já deu uma excelente resposta. Gostaria apenas de mencionar a existência de xclip , que também é uma maneira muito útil de copiar a saída do terminal para a área de transferência do X, apenas inserindo qualquer coisa nela:

$ cat /etc/passwd | xclip
    
por 14.08.2011 / 08:34