如何配置复制/粘贴缓冲区以便仅存储纯文本?

如何配置复制/粘贴缓冲区以便仅存储纯文本?

不幸的是,我需要重新审视五年前的问题:

如何清理复制/粘贴缓冲区?

对此,目前还没有答案。

我现在使用 CopyQ 作为剪贴板管理器,它对于大多数事情来说都工作得很好。

来自 CopyQ 常见问题解答:

https://copyq.readthedocs.io/en/latest/faq.html#how-to-store-only-plain-text

不幸的是,这个解决方案根本行不通。我在 LibreOffice 中创建一个文档,更改字体和字体大小,从 LibreOffice 复制并粘贴到 gmail 中,它保持相同的字体和字体大小。

绝不希望这一切发生。我希望复制/粘贴仅是纯文本每时每刻

过去五年我的解决方法是粘贴到 vim 中,然后再次复制,这显然既耗时又令人沮丧。

这里有什么解决办法呢? x.org 级别的东西是理想的,因此它将独立于剪贴板管理器(并且无需任何剪贴板管理器即可工作)。

我也不需要任何额外的键盘快捷键,只需像往常一样简单的 ctrl+c、ctrl+v 即可。

答案1

如果只有少数程序受到影响,您可以重新绑定粘贴命令。例如,LibreOffice 可以选择粘贴为纯文本。其他程序可能有类似的选项。

我没有找到任何能够转换为纯文本的剪贴板管理器,尽管我隐约记得过去有一些具有这种能力。一些剪贴板管理器能够运行操作,但我不知道如何使它们自动运行。

所以你只能自己尝试去做。在大多数情况下,以下命令会将剪贴板内容转换为纯文本。主要的例外是图像数据。

xclip -o -selection "clipboard" | xclip -i -selection "clipboard"

因此,您可以运行一个脚本来检查剪贴板是否有更改并自动清理内容。如果您使用剪贴板管理器,这将创建重复的条目。分为格式化版本和非格式化版本。

#!/usr/bin/env bash

while true ; do
  clipsum_new=$(xclip -o -selection "clipboard" 2> /dev/null | md5sum --)

  if [[ $clipsum_new != $clipsum_old ]] ; then
    echo "Clipboard contents changed."

    clipboard=$(xclip -o -sel "clipboard" 2> /dev/null)
    if [[ $clipboard == "" ]] ; then
      echo "Clipboard empty or contains non-text data."
    elif [[ $clipboard =~ ^/.* ]] ; then
      echo "Clipboard may contain file paths."
    else
      echo "Sanitizing clipboard"
      xclip -o -selection "clipboard" | xclip -i -selection "clipboard"
    fi

    # save new checksum for future comparison
    clipsum_old=$(xclip -o -selection "clipboard" 2> /dev/null | md5sum --)
  fi

  # limit polling rate
  sleep 1
done

相关内容