module Manatee.Plugin.Anything.AnythingBuffer where
import DBus.Client hiding (Signal)
import DBus.Message
import DBus.Types
import Data.Maybe
import Manatee.Core.DBus
import Manatee.Core.Types
import Manatee.Plugin.Anything.Anything
import Manatee.Plugin.Anything.Types
instance AnythingCandidate BufferInfo where
candidateCommandName _ = ""
candidateFilterName a = bName ++ " " ++ bMode ++ " " ++ bPath
where bName = bufferInfoName a
bMode = bufferInfoMode a
bPath = bufferInfoPath a
candidateCompletionName a _ = bufferInfoName a
candidateExpandName a _ = return $ bufferInfoName a
anythingBuffer :: Anything
anythingBuffer =
Anything {anythingColumnTitle = ["Buffer", "Mode", "Path"]
,anythingColumnFun = anythingBufferColumnFun
,anythingSearch = AnythingSearch anythingBufferSearch
,anythingFilterRule = anythingFuzzyFilterRule False
,anythingCompletionRule = id
,anythingInputDepend = False
,anythingCommandFun = anythingBufferCommandFun
,anythingCalculateDelay = 0
}
anythingBufferSearch :: AnythingInput -> Client -> IO [BufferInfo]
anythingBufferSearch _ client = do
reply <- callDaemonMethod client "GetBufferList" []
case reply of
Left err -> do
putStrLn $ "anythingBufferSearch : Call remote function 'GetBufferList' failed."
++ "\n Reason : " ++ show err
return []
Right methodReturn -> do
let variants = messageBody methodReturn
return $ if null variants
then []
else fromMaybe [] (fromVariant (head variants) :: Maybe [BufferInfo])
anythingBufferColumnFun :: [AnythingColumnFun]
anythingBufferColumnFun =
[bufferInfoName . anythingCandidateUnpack
,bufferInfoMode . anythingCandidateUnpack
,bufferInfoPath . anythingCandidateUnpack]
anythingBufferCommandFun :: AnythingCommandFun
anythingBufferCommandFun _ wrap _ = do
let modeName = bufferInfoMode $ anythingCandidateUnpack wrap
pageId = bufferInfoId $ anythingCandidateUnpack wrap
return [("Switch buffer", anythingBufferSwitchBuffer modeName pageId)]
anythingBufferSwitchBuffer :: PageModeName -> PageId -> Client -> IO ()
anythingBufferSwitchBuffer modeName pageId client =
mkDaemonSignal client SwitchBuffer (SwitchBufferArgs modeName pageId)