用法

用法

我想拦截粘贴事件并通过我的脚本运行任何文本。用例如下(假设我有一个脚本,它接受 stdin 上的文本并将“world”转换为“potato”,然后写入 stdout)。

  1. 使用光标突出显示一些文本“hello world!”
  2. 单击鼠标中键从选择缓冲区粘贴,然后出现“你好土豆!”

1 和 2 之间不应有手动步骤,也就是说,我想在粘贴事件(或者复制事件)上添加一个钩子,以便自动处理文本。我没有任何恶意的想法;它只是在从/向网络复制/粘贴时自动格式化一些源代码。

我的问题涉及选择缓冲区(鼠标中键剪贴板),但我猜这个问题也适用于其他剪贴板文本。

答案1

您可以使用它clipnotify来获取剪贴板更改的通知,而无需轮询。从项目页面

while clipnotify; do
    [an event happened, do something with the selection]
done

该工具仅包含几行使用 XFIXES 功能的 C 代码。

答案2

您可以使用以下 Bash 函数。将其复制到您的终端~/.bashrc并将其作为源。. ~/.bashrc

cngstr(){
    echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
}

用法

  • 使用鼠标选择任意文本以突出显示。像往常一样,可以使用鼠标中键单击粘贴所选文本。
  • 在终端中运行:

    $ cngstr "string" "replacement"
    
  • 接下来,当您使用鼠标中键单击粘贴时,您选择的单词“string”将被替换为“replacement”。

例子

假设你的选择是“hello world!”。接下来在终端中运行,

cngstr world potato

用于""由多个单词组成的字符串。接下来,当您使用鼠标中间的剪辑进行粘贴时,将出现“你好土豆!”。参见屏幕截图。

在此处输入图片描述

怎么运行的

  1. xclip -o将选择内容打印到通过管道传输到sed这里标准输出。
  2. 接下来sed是替换从用户那里输入的字符串。
  3. 最后,修改后的内容被传递xclip初选并可通过鼠标中键单击进行粘贴。

我认为xclip它随默认的 Ubuntu 发行版一起提供。否则,请通过以下方式安装apt-get

sudo apt-get install xclip

额外的信息

使修改后的内容也可用于剪贴板

如果您希望修改后的内容也可以在剪贴板上使用,以便Ctrl+V也能正常工作,请在上面的脚本中添加以下行。

echo `xclip -o` | xclip -selection c

上面这行代码会将主要选择的内容传递到剪贴板。修改后的函数如下所示:

cngstr(){
    echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
    echo `xclip -o` | xclip -selection c
}

可以修改剪贴板内容的 Bash 函数(即使用Ctrl+C或从右键单击菜单复制)并使修改后的字符串可用于主要选择以及剪贴板。

cngstr1(){
    echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
    echo `xclip -o` | xclip -selection c
}

xclip -o默认打印主要选择的内容。用于-selection c打印剪贴板的内容。请参阅man xclip了解更多信息。


您可以使用 switch case 在脚本中组合这两个函数,

#!/bin/sh
string="$2"
replacement="$3"

cngstr(){
    echo `xclip -o` | sed -e "s#$1#$2#g" | xclip
    echo `xclip -o` | xclip -selection c
}

cngstr1(){
    echo `xclip -o -selection c` | sed -e "s#$1#$2#g" | xclip
    echo `xclip -o` | xclip -selection c
}

if [ $# -lt 2 ]
then
    echo "Usage : $0 [c|p] \"string\" \"replacement\" "
    exit
fi

case "$1" in

    c)  cngstr1 "$string" "$replacement"
        ;;
    p)  cngstr "$string" "$replacement"
        ;;
    *) echo "Usage : $0 [c|p] \"string\" \"replacement\" "
        ;;
esac

用法

./script.sh [c|p] "string" "replacement"
  • 使用选项c来改变通过剪贴板复制的内容,即使用Ctrl+C或右键单击菜单复制的内容。

  • 使用选项p来改变使用主要选择复制的内容。

相关内容