在 X window system中,窗体之间传输数据,使用的是“selection”,也就是常说的“剪贴板”

X window system中支持任意的selection.

其中,最重要的是PRIMARY selection,然后是CLIPBOARD selection,还有已经废弃的CUT_BUFFER(0~7)。

而 X Window 把这种叫做“选择”(selection),有支持两种方式:一种是主(Primary)选择,一种是剪贴板(Clipboard)选择。其实还有一个副(Secondary)选择,但已经过时不用。和 Windows 不同的是,没有一个全局的缓冲区来保存拷贝的信息。其工作方式是这样的:当一个程序中选择了一些东西,它就说“我现在是当前选择的所有者”,这时在另外一个程序中要进行粘贴的话,就向当前选择的所有者发请求,请求获取数据。然后所有者就给请求者发送数据。其中的过程可以认为是进程间通讯。

先说剪贴板选择,其用于菜单的拷贝、粘贴、剪切选项,看上去跟 Windows 的拷贝粘贴方式是一模一样的,只是选择了以后,点击了拷贝(或者快捷键也可以),这时候要声明所有权,然后在内部保存一份需要拷贝的东西。当别的程序粘贴的时候,把保存的东西发送过去。

主选择略微有点不同,当你选择任何东西的时候(鼠标或者键盘),当前程序就声明所有权(不需要明确进行拷贝),并保存一份。当别的程序用鼠标中键(或者左右同时双击来模拟)进行粘贴的时候,把数据发送过去。

所以总结一下,X 内部的实现方式,对于一个程序:

使用鼠标或者键盘选择一段文本:声明主选择(Primary)所有权(可能内部也要保存一份)

拷贝(菜单或者快捷键):内部保存一份,声明剪贴板(Clipboard)所有权

粘贴(菜单或者快捷键):获取剪贴板中的数据,并插入到适当的位置

鼠标中键(或者双键模拟):获取主选择的数据,并插入到适当的位置

另一个程序请求主选择数据:把内部保存的主选择发送出去

另一个程序请求剪贴板数据:把保存的剪贴板数据发送出去

另一个程序声明主选择所有权:丢弃保存的主选择数据

另一个程序声明剪贴板所有权:丢弃保存的剪贴板数据

这只是一个比较简单的描述,实际上的实现要更复杂一些,具体请参考 [ICCCM] 的文档。

X 上绝大部分程序都是支持主选择的,也可以认为缺省就是支持的。有一些对剪贴板的支持不够明显,没有菜单或者快捷键之类的,只能用鼠标进行选择,比如多数的 Terminal Emulator,但提供了快捷键。xterm/rxvt/urxvt/mrxvt 等可以使用“Shift + 鼠标中键”从剪贴板拷贝。Emacs 使用主选择。更多的程序用的是剪贴板。

linux剪贴板复制文件原理,linux剪贴板原理相关推荐

  1. linux怎么复制文件夹全部内容,linux局域网怎么复制文件夹下的全部文件到另外文件夹...

    在Linux系统局域网中复制或拷贝文件我们可以用cp或者copy命令,但要对一个文件夹中的全部文件复制到另外一个文件夹中去,如何进行操作呢?linux局域网复制文件夹下的全部文件到另外文件夹的方法其实 ...

  2. 如何在 Linux 中复制文件到多个目录中

    在 Linux 中,cp 命令常被用于从一个文件夹中复制文件到另一个文件夹中,最简单的语法如下: # cp [options-.] source(s) destination 另外,你也可以使用高级复 ...

  3. 【Linux】复制文件到当前目录 / 复制文件并重命名到当前目录

    Linux系统 复制文件到当前目录 如何在 Linux 系统下复制当前目录的文件到当前目录: 使用 cp 命令对文件进行拷贝粘贴: 1 复制文件到当前目录并重命名 比如: 我们想把 my_file 这 ...

  4. linux Qt 复制文件至剪切板

    转载:linux Qt 复制文件至剪切板 文中提到的  两种mime type  同时设定那块, 当拷贝文本的时候能看到data->formats 里面没有 text/uri-list 和 x- ...

  5. 【Linux】复制文件到当前目录 复制文件并重命名到当前目录

    Linux系统 复制文件到当前目录 如何在 Linux 系统下复制当前目录的文件到当前目录: 使用 cp 命令对文件进行拷贝粘贴: 1 复制文件到当前目录并重命名 比如: 我们想把 my_file 这 ...

  6. Linux CentOS  复制文件、替换文件 cp 复制文件、cp 覆盖文件 cp替换文件

    Linux CentOS  复制文件.替换文件 cp 复制文件.cp 覆盖文件 cp替换文件 一.Linux 复制文件语法 1. cp [option] src dest 2. option 可选参数 ...

  7. linux如何复制文件夹和移动文件夹

    我想把我的某个目录下的某个文件夹复制(如:/tmp/a,啊是文件夹名称)到某个目录下(如:/root/a,文件夹还是叫a),请问应该怎么在命令行下操作?谢谢 CP命令 格式: CP [选项] 源文件或 ...

  8. linux命令 复制文件夹命令行,(转)每天一个linux命令(8):cp 命令,复制文件和文件夹...

    场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...

  9. linux下复制文件

    linux下复制文件 linux 复制文件命令是cp. 常见用法: 1.复制当前目录下的文件fileA到目录directory里面. cp fileA /directory/ 2.复制当前目录下的文件 ...

  10. 在linux里复制文件命令_如何在Linux上使用“安装”命令复制文件

    在linux里复制文件命令 Fatmawati Achmad Zaenuri/Shutterstock.com Fatmawati Achmad Zaenuri / Shutterstock.com ...

最新文章

  1. linux sed 批量替换多个文件中的字符串
  2. 三种流行的数据库查询表记录数【转】
  3. Quality Center Issue with CAPICOM.DLL not prop...
  4. eclipse环境配置、快捷键及基本操作
  5. jhipster_jHipster入门,第1部分
  6. hightmaps 按地图上显示的统计数据
  7. 宛如造句,小学生怎么用宛如造句?
  8. 本示例主要展示如何在XtraGrid网格控件(包含在DevExpress WinForms套包中)的主视图中指定HyperLinkEdit控件作为列编辑器...
  9. 小项目,吃货联盟,java初级小项目,源代码
  10. 快速开发:普元EOS平台简介
  11. 国外素材网站打不开?还想要同品质图片?
  12. 程序中美元符号$是什么
  13. 视频会议设备大比拼,创新让科技更好的服务社会!
  14. 年轻人,你的目标不该是成为斜杠青年
  15. AcWing 739. 数组选择
  16. 浅谈linux - 内核时间的处理
  17. 一维信号小波阈值去噪
  18. 链接器lds文件简介
  19. 对AVL树和红黑树的个人理解
  20. deepin更新失败_深度操作系统deepin 20更新:深度下载器和浏览器

热门文章

  1. iOS之深入解析如何检测“循环引用”
  2. RxSwift之深入解析Subject的使用和实现原理
  3. Swift之数组去重(去除重复元素)
  4. Ubuntu12.04 LTS 忘记登录密码的解决方法
  5. 【机器视觉】 comment算子
  6. 【Linux系统编程】进程和线程的区别
  7. 大脑构造图与功能解析_解析地轨、隐藏轨推拉门及折叠门的构造做法,收藏学习...
  8. 宏观 量子计算一句话
  9. 字符串常量前面的L的作用
  10. 解决 LLVM 错误 fatal error: ‘csignal’ file not found