remove os espaços finais espúrios quando copia a cópia do modo de console do emacs?

4

Usando emacs no modo de console , eu quero copiar o texto selecionado do mouse do emacs e colá-lo em outro aplicativo (possivelmente outro termo).

Mas o emacs adicionará espaços completos à seleção para preencher toda a largura da tela.

Para piorar, vim funciona perfeitamente. Eu tive que mudar para vim (ou cat ) para fazer um simples copiar / colar.

Como cenário de teste, você pode escrever este texto no emacs (executando no modo de console):

(echo Does it work: \
 true)
  1. Selecione este texto (ambas as linhas) com o mouse.
  2. Cole-o em um terminal e pressione

Se ele escreve:

Does it work: true

Então funciona como pretendido (copiar e colar funcionou), você não tem o meu problema (por quê?). Mas no meu computador eu vejo:

Does it work:

E o "verdadeiro" está faltando: ele falha como descrito atualmente nesta edição.

Alguma sugestão?

    
por vaab 21.10.2014 / 12:53

1 resposta

6

Quando no modo de console, realce de sintaxe pode entrar no caminho e gerar linhas inteiras de "espaços" sendo copiados dentro do código selecionado.

Verificar isso é o culpado

Para verificar se isso é o que está afetando você:

  • desativar a sintaxe destacando temporariamente com M-x global-font-lock-mode .
  • Tente copiar e colar e veja se ainda é possível reproduzir o problema.
  • Uma vez confirmada / enfraquecida, você pode definir o destaque da sintaxe de volta com o mesmo comando.

Se a desativação do destaque da sintaxe corrigir o problema de copiar / colar, convém ler o texto a seguir para corrigir isso definitivamente.

Por que isso está acontecendo?

O que desencadeia o problema é que você definiu uma cor de fundo para algumas fontes (geralmente na fonte padrão ). Como resultado, o emacs está preenchendo o plano de fundo com caracteres vazios para que ele possa "pintar" a tela como você queria, e qualquer ação de copiar e colar conterá esses espúrios espaços em branco.

Como consertar isso?

Você deve verificar suas personalizações face (para a fonte padrão você pode usar M-x customize-face <RET> default <RET> ) e se você tiver uma cor de fundo diferente de unspecified-bg , então este é o culpado. unspecified-bg é algum tipo de cor de fundo transparente, e é realmente a cor de fundo padrão do emacs se você não o personalizou.

Podemos forçar o plano de fundo a usar unspecified-bg após o emacs começar adicionando isso em você ~/.emacs , após qualquer bloco custom-set-faces gerado automaticamente:

(unless window-system
  (custom-set-faces
   '(default ((t (:background "unspecified-bg"))))))

Em seguida, reinicie seu emacs ou M-x eval-region neste bloco para verificar o resultado.

Como uma nota lateral, você também receberá de volta o truque de fundo de qualquer terminal sofisticado em seus emacs (estou pensando em transparência ou imagens de fundo ...).

OBSERVAÇÃO: mesmo com isso, você pode ter alguma surpresa ruim com os espaços-brancos fantasmas sendo capturados em algum texto especial, que obteria uma fonte mal destacada. Nesses casos, você pode considerar usar o primeiro truque.

Mais explicações sobre por que isso está acontecendo

Os terminais têm uma cor de plano de fundo própria (alguns terminais podem até permitir a exibição de uma imagem como plano de fundo ou até mesmo transparente). Portanto, para o console, há uma cor de nada (como um canal alfa), e essa é a cor padrão do console.

A aplicação da consola pode alterar tanto a cor da fonte como o fundo através de sequências de escape ANSI.

Se você pedir ao emacs para alterar a cor do plano de fundo, ele terá que pintar artificialmente a tela com caracteres de espaços em branco com sua própria cor de plano de fundo definida para o que você escolheu.

Ao selecionar, você geralmente usa a funcionalidade de copiar e colar terminal, que é totalmente inconsciente do aplicativo de console que você está usando. Ele faz o trabalho copiando e colando quaisquer caracteres na tela, e copia os espaços em branco.

Observe que você pode ter uma configuração que permitirá que seu aplicativo de console receba realmente a entrada mouses e gerencie a seleção e copie e cole. Mas não é tão comum e o shell, que é o aplicativo mais comum que está ativo no seu terminal, não suporta o mouse.

    
por 22.10.2014 / 07:36