我提出以下意见:
$ xclip text.txt执行立即停止,它将text.txt的内容复制到默认的选择XA_PRIMARY,这意味着您可以通过鼠标中间按钮或xclip -o粘贴它。
当我想看xclip在做什么时,它不再终止了:
$ xclip -verbose text.txt
Connected to X server.
Using UTF8_STRING.
Reading text.txt...
Waiting for selection requests, Control-C to quit
Waiting for selection request number 1在我选择X11系统中的某些内容之前,它不会终止,例如,我在这里粘贴的这个输出。如果行为仅限于verbose,我将理解这一点。毕竟你想坐着看看会发生什么。
我可以在strace中复制相同的行为,但前提是提供了叉选项。
$ strace -f xclip text.txt或者当使用系统执行命令从Ruby中取出时,系统执行命令应该返回输出,这实际上是没有的。
$ ruby -e "`xclip text.txt`"strace给出的提示是,它正在对文件描述符进行轮询以等待事件。如果我选择某件事,这个事件是满意的。这种行为可以解释吗?我得到了证据,这是不能在任何系统上复制的。这与票证#9在从stdin设置剪贴板时不关闭stdout有关吗?
我正在Ubuntu13.04上运行xclip版本0.12。
发布于 2013-10-08 23:27:05
XClip在没有-verbose的情况下启动时会叉到一个孩子。与-verbose的唯一区别是,没有子分叉,相同的原始进程处理ConvertSelection事件。
通常在X窗口工具箱中,复制/粘贴是通过X选择实现的
选择是由atom命名并由特定客户端拥有的全局服务器资源。选择的次数不受协议的限制,原子可能存在的选择数量一样多。选择的目的是为建立客户之间的通信机制提供基础。在“X协议”的词汇中发现了“fifinition”: “具有动态类型的...an间接属性;也就是说,该属性不是存储在服务器中,而是由某些客户端(‘所有者’)维护。所选内容本质上是全局的,被认为是属于用户的(虽然由客户端维护),而不是私有于特定的窗口子层次结构或特定的一组客户端。” 从应用程序的角度来看,选择提供了在X客户机之间传输信息的机制。由于X是一种网络协议,因此不能假定存在不同客户端之间的单独数据传输通道。选择仅用于数据传输,而数据传输直接关系到应用程序的用户界面方面,尽管该策略没有任何强制执行。
选择的内容存储在应用程序本身中,并使用ConvertSelection事件进行请求(此处为“转换”,因为客户端有一种方法可以请求所选数据的特定mimetype (或“视图”或格式)。转换同样发生在拥有所选缓冲区的应用程序中。
由于这种架构,没有办法“将文本复制到系统缓冲区并退出”--因为您是一个系统缓冲区。XClip通过分叉和去功能化来模拟“复制和退出”。
https://stackoverflow.com/questions/19254114
复制相似问题