module Helic.Interpreter.XClipboard where
import Helic.Data.Selection (Selection (Clipboard))
import qualified Helic.Effect.GtkClipboard as GtkClipboard
import Helic.Effect.GtkClipboard (GtkClipboard)
import Helic.Effect.XClipboard (XClipboard (Current, Set, Sync))
import Helic.Interpreter.GtkClipboard (withGtkClipboard)
interpretXClipboardGtk ::
Members [Scoped_ GtkClipboard !! Text, Log, Embed IO, Final IO] r =>
InterpreterFor (XClipboard !! Text) r
interpretXClipboardGtk :: forall (r :: EffectRow).
Members
'[Scoped_ GtkClipboard !! Text, Log, Embed IO, Final IO] r =>
InterpreterFor (XClipboard !! Text) r
interpretXClipboardGtk = do
forall err (eff :: (* -> *) -> * -> *) (r :: EffectRow).
FirstOrder eff "interpretResumable" =>
(forall x (r0 :: EffectRow).
eff (Sem r0) x -> Sem (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumable \case
XClipboard (Sem r0) x
Current ->
forall err (eff :: (* -> *) -> * -> *) (r :: EffectRow).
Members '[Resumable err eff, Stop err] r =>
InterpreterFor eff r
restop forall a b. (a -> b) -> a -> b
$ forall (r :: EffectRow).
Member (Scoped_ GtkClipboard) r =>
InterpreterFor GtkClipboard r
withGtkClipboard do
forall (r :: EffectRow).
Member GtkClipboard r =>
Selection -> Sem r (Maybe Text)
GtkClipboard.read Selection
Clipboard
Set Text
text ->
forall err (eff :: (* -> *) -> * -> *) (r :: EffectRow).
Members '[Resumable err eff, Stop err] r =>
InterpreterFor eff r
restop forall a b. (a -> b) -> a -> b
$ forall (r :: EffectRow).
Member (Scoped_ GtkClipboard) r =>
InterpreterFor GtkClipboard r
withGtkClipboard do
(forall (r :: EffectRow).
Member GtkClipboard r =>
Selection -> Text -> Sem r ()
GtkClipboard.write Selection
Clipboard Text
text)
Sync Text
_ Selection
Clipboard ->
forall (f :: * -> *). Applicative f => f ()
unit
Sync Text
text Selection
_ ->
forall err (eff :: (* -> *) -> * -> *) (r :: EffectRow).
Members '[Resumable err eff, Stop err] r =>
InterpreterFor eff r
restop forall a b. (a -> b) -> a -> b
$ forall (r :: EffectRow).
Member (Scoped_ GtkClipboard) r =>
InterpreterFor GtkClipboard r
withGtkClipboard do
forall (r :: EffectRow).
Member GtkClipboard r =>
Selection -> Text -> Sem r ()
GtkClipboard.write Selection
Clipboard Text
text