linux剪贴板复制文件原理,linux剪贴板原理
在 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剪贴板原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内存page,【原创】(十四)
- 下一篇: linux下安装树梅派系统,优麒麟树莓派