linux剪贴板复制文件原理,linux剪贴板原理
在 X window system中,窗體之間傳輸數(shù)據(jù),使用的是“selection”,也就是常說的“剪貼板”
X window system中支持任意的selection.
其中,最重要的是PRIMARY selection,然后是CLIPBOARD selection,還有已經(jīng)廢棄的CUT_BUFFER(0~7)。
而 X Window 把這種叫做“選擇”(selection),有支持兩種方式:一種是主(Primary)選擇,一種是剪貼板(Clipboard)選擇。其實(shí)還有一個(gè)副(Secondary)選擇,但已經(jīng)過時(shí)不用。和 Windows 不同的是,沒有一個(gè)全局的緩沖區(qū)來保存拷貝的信息。其工作方式是這樣的:當(dāng)一個(gè)程序中選擇了一些東西,它就說“我現(xiàn)在是當(dāng)前選擇的所有者”,這時(shí)在另外一個(gè)程序中要進(jìn)行粘貼的話,就向當(dāng)前選擇的所有者發(fā)請求,請求獲取數(shù)據(jù)。然后所有者就給請求者發(fā)送數(shù)據(jù)。其中的過程可以認(rèn)為是進(jìn)程間通訊。
先說剪貼板選擇,其用于菜單的拷貝、粘貼、剪切選項(xiàng),看上去跟 Windows 的拷貝粘貼方式是一模一樣的,只是選擇了以后,點(diǎn)擊了拷貝(或者快捷鍵也可以),這時(shí)候要聲明所有權(quán),然后在內(nèi)部保存一份需要拷貝的東西。當(dāng)別的程序粘貼的時(shí)候,把保存的東西發(fā)送過去。
主選擇略微有點(diǎn)不同,當(dāng)你選擇任何東西的時(shí)候(鼠標(biāo)或者鍵盤),當(dāng)前程序就聲明所有權(quán)(不需要明確進(jìn)行拷貝),并保存一份。當(dāng)別的程序用鼠標(biāo)中鍵(或者左右同時(shí)雙擊來模擬)進(jìn)行粘貼的時(shí)候,把數(shù)據(jù)發(fā)送過去。
所以總結(jié)一下,X 內(nèi)部的實(shí)現(xiàn)方式,對于一個(gè)程序:
使用鼠標(biāo)或者鍵盤選擇一段文本:聲明主選擇(Primary)所有權(quán)(可能內(nèi)部也要保存一份)
拷貝(菜單或者快捷鍵):內(nèi)部保存一份,聲明剪貼板(Clipboard)所有權(quán)
粘貼(菜單或者快捷鍵):獲取剪貼板中的數(shù)據(jù),并插入到適當(dāng)?shù)奈恢?/p>
鼠標(biāo)中鍵(或者雙鍵模擬):獲取主選擇的數(shù)據(jù),并插入到適當(dāng)?shù)奈恢?/p>
另一個(gè)程序請求主選擇數(shù)據(jù):把內(nèi)部保存的主選擇發(fā)送出去
另一個(gè)程序請求剪貼板數(shù)據(jù):把保存的剪貼板數(shù)據(jù)發(fā)送出去
另一個(gè)程序聲明主選擇所有權(quán):丟棄保存的主選擇數(shù)據(jù)
另一個(gè)程序聲明剪貼板所有權(quán):丟棄保存的剪貼板數(shù)據(jù)
這只是一個(gè)比較簡單的描述,實(shí)際上的實(shí)現(xiàn)要更復(fù)雜一些,具體請參考 [ICCCM] 的文檔。
X 上絕大部分程序都是支持主選擇的,也可以認(rèn)為缺省就是支持的。有一些對剪貼板的支持不夠明顯,沒有菜單或者快捷鍵之類的,只能用鼠標(biāo)進(jìn)行選擇,比如多數(shù)的 Terminal Emulator,但提供了快捷鍵。xterm/rxvt/urxvt/mrxvt 等可以使用“Shift + 鼠標(biāo)中鍵”從剪貼板拷貝。Emacs 使用主選擇。更多的程序用的是剪貼板。
總結(jié)
以上是生活随笔為你收集整理的linux剪贴板复制文件原理,linux剪贴板原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内存page,【原创】(十四)
- 下一篇: linux下安装树梅派系统,优麒麟树莓派