我制作了一个文本编辑器,它使用 xclip 来复制文本。我注意到,当我将 xclip 复制的文本(按常规方式粘贴,使用 ctrl+v)粘贴到我正在撰写的 Firefox 54.0(64 位)上的 Gmail 电子邮件中时,它会将所有换行符替换为空格(如果连续有多个换行符,则会将所有换行符合并为一个空格)。当我将其粘贴到其他地方时,我没有这个问题。然而,当我从 Leafpad 之类的地方复制并将其粘贴到 Firefox 中的 Gmail 电子邮件中时,它会保留换行符。 Chromium 网络浏览器中的 Gmail 不会出现同样的问题。
为什么会发生这种情况,有没有办法修复它,这样就不会消除换行符?
我在 Xubuntu 16.10(64 位)上使用 xclip 0.12。这是我用来复制文本的命令:
xclip -selection clipboard [seeBelow]
我使用这行 Python 代码在上面 [seeBelow] 的位置插入文本:
subprocess.Popen(command, stdin=subprocess.PIPE).communicate(text.encode());
我正在从 Python3 Tkinter 多行文本小部件复制文本(嗯,一个继承 Text 的小部件,并且对于我们的目的来说实际上应该是相同的)。
这个问题似乎只发生在 Firefox 中的 Gmail 中。然而,这是我经常喜欢粘贴的地方,因为我经常在编辑器中编写电子邮件。
答案1
这也让我疯狂了一段时间。我可以从各种来源复制和粘贴,但不知何故,来自xclip
或nvim-qt
(NeoVim GUI)的任何内容都会导致换行符折叠成空格。顺便说一句,同样的问题出现在 Slack 和 Rocket Chat 上,但显然没有出现在 Stack Exchange 上。同时,在相同的文本区域中,浏览器内的 vim 克隆wasavi
具有相反的问题:每个换行符加倍。
我的解决方法是使用一个简单的替代品xclip
。代码在Python 2.7中测试如下:
#!/usr/bin/env python
import pyperclip # pip install --user pyperclip
import sys
filename = sys.argv[1]
with open (filename) as f:
pyperclip.copy (f.read ())
同样,您可以使用 从剪贴板中提取文本s = pyperclip.paste()
。
答案2
我刚刚发现,虽然 Ctrl+V 确实会粘贴到 Firefox 中,并将新行替换为空格,但 Ctrl+Shift+V 会保持新行完好无损。