2010-08-26 135 views
25

它也可能發生在你身上 - 有時當你將某個網頁上的文本複製到你最喜歡的webmail客戶端的富文本電子郵件草稿中時,你不喜歡粘貼的具有不同的字體/大小/重量..它以某種方式記住風格(通常是圖像,當選擇時)。比如,如果將它粘貼到像Vim這樣的最喜歡的文本編輯器中,那麼它不會是HTML,而只是純文本?X11剪貼板如何處理多種數據格式?

alt text

看來,剪貼板維持在各種格式的選擇的數據。如何以任何一種格式訪問數據(以編程方式或使用某種實用工具)? X11剪貼板如何工作?

+1

+1好問題。我也很好奇。 – alternative 2010-08-26 00:13:04

+0

我有一段時間的想法,瀏覽器也維護自己的剪貼板,但這意味着它只能在瀏覽器應用程序進程內工作,事實並非如此。 – mykhal 2010-08-26 00:33:25

回答

21

您從廣告格式(主要由MIME類型標識)複製的應用可以提供。您粘貼的應用必須選擇其首選格式,並從源應用中請求該格式。

您可能看不到所有樣式信息傳輸的原因是這些應用程序不支持包含樣式信息的通用格式。

您還可以看到問題,因爲應用程序可能會嘗試粘貼HTML,但不能真正處理所有HTML。或者應用程序可能是越野車,或者可能不同意特定的MIME類型的真正含義。

幾乎所有的應用程序都可以複製和粘貼純文本,當然,除此之外,它的觸摸和去除。如果你沒有看到有意義的東西,你可以提交一個與其中一個應用程序相關的bug。

您可能注意到,如果您退出正在複製的應用程序,則無法再粘貼。 (除非你正在運行「剪貼板管理器」或其他東西)。這是因爲沒有數據實際上離開源應用程序,直到目標應用程序要求粘貼格式。 有一些「剪貼板管理器」會在您複製和存儲數據時立即要求提供數據,因此您可以在源應用程序退出後粘貼,但它們有缺點(如果數據很大,或者以10種格式提供,等等)

如果您安裝了pygtk,以下python代碼將顯示當前複製數據的可用格式。這個應用程序顯示ctrl + c複製的數據,而不是中間點擊的復活節彩蛋。 (見http://freedesktop.org/wiki/Specifications/ClipboardsWiki

#!/usr/bin/python 

import gtk; 
clipboard = gtk.clipboard_get() 
print("Current clipboard offers formats: " + str(clipboard.wait_for_targets())) 
+0

非常有用的信息感謝(我害怕答案將包括如果行的C代碼.. )現在我只是想知道爲什麼從utf-16le編碼從firefox(utf-8網頁)複製的文本/ html數據.. – mykhal 2010-08-26 17:27:33

+0

後續,一種排序:http://askubuntu.com/questions/427704/how-我可以編輯html-in-the-clipboard中的源代碼。關於實際嘗試從剪貼板中獲取豐富文本的提示?我懶得弄清楚如何創建緩衝區。 – 2014-02-28 23:45:28

-1

大多數剪貼板系統允許存儲多種格式的數據。例如,Adobe AIR將爲每個操作系統剪貼板讀取明文,富文本,位圖和任意二進制數據流。

它由每個應用程序來實現這些自己。我確信X11使用一種非常類似於其他所有OS/Shell的方法。

+1

實際上它是如何做到這一點,以及如何我們可以訪問各種格式,這是一個問題;) – mykhal 2010-08-26 03:30:35