module Hbro.Clipboard where
import Hbro.Error
import Hbro.Util
import Control.Monad.Base
import Control.Monad.Error
import Control.Monad.Trans.Control
import Graphics.UI.Gtk.General.Clipboard
insert :: (MonadBase IO m) => String -> m ()
insert text = io $ clipboardGet selectionPrimary >>= (`clipboardSetText` text)
with :: (MonadBaseControl IO m, MonadError HError m) => (String -> m a) -> m ()
with f = do
clip <- io $ clipboardGet selectionPrimary
requestText clip f
requestText :: (MonadBaseControl IO m, ClipboardClass a, MonadError HError m) => a -> (String -> m b) -> m ()
requestText clip f = liftBaseWith $ \runInIO -> clipboardRequestText clip $ \x -> void . runInIO . maybe (throwError EmptyClipboard) f $ x