我编写了一个小程序来追踪我的剪贴板活动,并使用reactive-banana和System.Clipboard在终端中打印它。
module Main where
import Reactive.Banana
import Reactive.Banana.Frameworks
import System.Clipboard
import Data.Maybe(fromJust)
main :: IO ()
main = do
sources <- (,) <$> newAddHandler <*> newAddHandler
network <- setupNetwork sources
actuate network
s <- getClipboardString
loop s sources
loop s (epop, epush) = do
c <- getClipboardString
if s /= c then
snd epush [fromJust c]
else
loop s (epop, epush)
setupNetwork (epop, epush) = compile $ do
ePop <- fromAddHandler $ fst epop
ePush <- fromAddHandler $ fst epush
bStack <- accumB [""] $ (++) <$> ePush
eStack <- changes bStack
reactimate' $ fmap print <$> eStack
当我运行它时,我进入另一个窗口(比如Chrome)并复制一些文本。当我这样做时,我会收到
Main.hs:CloseClipboard:invalid argument(线程没有打开剪贴板。)
的错误信息。我在Windows上运行此程序。
非常感谢您的帮助!
祝好
do getClipboardString
吗? - ja.do getClipboardString
。我安装了reactive-banana
,也遇到了“权限被拒绝”的问题。 - ja.