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.