从 emacs 控制台模式复制粘贴时删除虚假的结尾空格?

从 emacs 控制台模式复制粘贴时删除虚假的结尾空格?

使用emacs控制台模式,我想从 emacs 复制鼠标选择的文本并将其粘贴到另一个应用程序(可能是另一个术语)。

但是 emacs 会在选择中添加完整的空格以填充整个屏幕的宽度。

更糟糕的是,它vim运行完美。我不得不切换到vim(或cat) 来进行简单的复制/粘贴。

作为测试场景,您可以在 emacs 中编写此文本(在控制台模式下运行):

(echo Does it work: \
 true)
  1. 使用鼠标选择此文本(两行)。
  2. 将其粘贴到终端,然后按

如果它写道:

Does it work: true

然后它按预期工作(复制粘贴成功),你没有遇到我的问题(为什么?)。但是,在我的电脑上我看到:

Does it work:

并且缺少“真实”:它失败了,正如本期目前描述的那样。

有什么建议吗?

答案1

在控制台模式下,语法高亮妨碍并生成在您选择的代码中复制的整行“空格”。

检查这是罪魁祸首

要检查这是否是困扰您的问题:

  • 使用 暂时禁用语法高亮M-x global-font-lock-mode
  • 然后尝试复制粘贴,看看是否仍然可以重现该问题。
  • 一旦确认/确认,您可以使用相同的命令重新设置语法高亮。

如果禁用语法高亮修复了您的复制/粘贴问题,您可能需要阅读以下内容以彻底解决此问题。

为什么会发生这种情况?

引发此问题的原因是,你为某些字体设置了背景颜色(通常在默认字体)。因此,emacs 会用空字符填充背景,这样它就可以按照你的需要“绘制”屏幕,并且任何复制粘贴操作都会包含这些虚假的空白。

如何解决这个问题?

你应该检查你的自定义(适用于默认字体,你可以使用M-x customize-face <RET> default <RET>)并且如果你有一个背景颜色与之不同unspecified-bg,这是罪魁祸首。unspecified-bg是某种透明的背景颜色,如果您没有自定义它,它实际上是 emacs 的默认背景颜色。

我们可以通过在任何自动生成的块之后unspecified-bg添加这个来强制在 emacs 启动时使用后台:~/.emacscustom-set-faces

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

然后重新启动 emacs,或者M-x eval-region在此块上检查结果。

顺便说一句,您还将在 emacs 中恢复任何花哨的终端的背景技巧(我正在考虑透明度或背景图像......)。

注意:即使这样,您仍可能会遇到一些意外情况,因为某些特殊文本中会捕获幽灵空白,导致字体突出显示效果不佳。在这些情况下,您可以考虑使用第一个技巧。

关于为什么会发生这种情况的更多解释

终端有自己的背景颜色(有些终端甚至可以显示图像作为背景,甚至是透明的)。所以对于控制台来说,就像一个没有颜色(将其视为 alpha 通道),这是控制台的默认颜色。

控制台应用程序可以通过 ANSI 转义序列改变字体和背景的颜色。

如果您要求 emacs 更改背景颜色,它将不得不在屏幕上人为地绘制空白字符,并将其背景颜色设置为您选择的颜色。

在选择时,您经常使用终端复制粘贴功能,该功能完全不知道您正在使用的控制台应用程序。它通过复制粘贴屏幕上的任何字符来完成工作,因此会复制空格。

请注意,您可以设置允许您的控制台应用程序实际接收鼠标输入并管理选择和复制粘贴。但这并不常见,并且 shell(您终端中最常见的活动应用程序)不支持鼠标。

相关内容