Miten leikepöydät toimivat X:ssä?

X:ssä on leikepöytä ja lisäksi gpm:n avulla tekstikonsoleilta voi valita tekstiä ja syöttää sitä samalle tai toiselle tekstikonsolille samaan tapaan kuin xtermissä. (Mutta tekstikonsoleilta dataa ei pysty siirtämään X:ään eikä päinvastoin).

X ei määrittele käyttöliittymää, vaan ainoastaan mekanismit sellaisen toteuttamiseen. Tästä on seurannut toisinaan hämmentävä käyttöliittymien kirjavuus.

Leikepöydän kaltaiset oliot ovat X:ssä nimeltään selectioneja. Niitä voivat ohjelmat periaatteessa perustaa mielin määrin, mutta kolmelle on sovittu nimet ja merkitykset: primary, secondary ja clipboard.

Primary selection on nimensä mukaisesti se ensisijainen valittu alue, johon operaatiot kohdistuvat. Useimmissa ohjelmissa se valitaan hiiren vasemman näppäimen avulla ja ohjelma korostaa valitun alueen. Monissa ohjelmissa keskinappi liittää primary selectionin (ei clipboardin) sisällön dokumenttiin. Xtermissä vaikutus on sama kuin jos primary selectionin teksti olisi kirjoitettu näppäimistöltä.

Secondary selection on tarkoitettu operaatioille, jotka tarvitsevat argumenteikseen kaksi aluetta. Harva ohjelma käyttää sitä.

Clipboard on näistä se, joka on tarkoitettu pääasialliseksi mekanismiksi datan kopioimiseen. Valitettavasti harvat ohjelmat tukevat sitä: monet tukevat vain primary selectionin käyttöä kopioimiseen.

Selectionit ovat globaaleja X-istunnossa: vain yksi ohjelma kerrallaan voi pitää hallussaan kutakin selectionia, ja kaikki ohjelmat voivat udella tältä yhdeltä selectionin sisältöä. Sisältö voi olla tarjolla useammassa eri formaatissa, eikä sitä kopioida mihinkään, jollei joku ohjelma todella pyydä sitä. Jos selectionin omistava ohjelma päättyy, selection häviää.

Jotkut huonommin tehdyt ohjelmat eivät käytä selectioneja oikein vaan sooloilevat leikkaamiset ja liimaamiset yms. omalla tavallaan, mikä yleensä johtaa siihen, ettei dataa voi kopioida tällaisten ohjelmien välillä. Tämä on erityisen tavallista ohjelmissa, jotka käsittelevät muuta kuin tekstidataa.

Selectionien lisäksi on olemassa myös vanhempi ja alkeellisempi mekanismi nimittäin cut bufferit. Näihin pystyy varastoimaan pelkästään tekstiä, ja varastointi tapahtuu X-palvelimen muistissa.

Xterm ei tue clipboardia. Sen sijaan primary selectionin kautta kopiointi onnistuu (vasen nappi valitsee, keskimmäinen kopioi).