module Hob.Command.FindText ( searchCommandHandler, searchNextCommandHandler, searchBackwardsCommandHandler, searchPreview, searchResetPreview, searchMode, ) where import Data.Monoid (mconcat) import Graphics.UI.Gtk import Hob.Context import Hob.Ui.Editor import Hob.Ui.Editor.Search searchCommandHandler :: String -> CommandHandler searchCommandHandler searchText = CommandHandler (Just $ PreviewCommandHandler (searchPreview searchText) searchResetPreview) (searchStart searchText) searchNextCommandHandler :: CommandHandler searchNextCommandHandler = CommandHandler Nothing searchNext searchBackwardsCommandHandler :: CommandHandler searchBackwardsCommandHandler = CommandHandler Nothing searchPrevious searchPreview :: String -> App() searchPreview text = invokeOnActiveEditor (`highlightSearchPreview` text) searchReset :: App() searchReset = invokeOnActiveEditor resetSearch searchResetPreview :: App() searchResetPreview = invokeOnActiveEditor resetSearchPreview searchNext :: App() searchNext = invokeOnActiveEditor findNext searchPrevious :: App() searchPrevious = invokeOnActiveEditor findPrevious searchStart :: String -> App() searchStart text = do enterMode searchMode invokeOnActiveEditor $ \editor -> do findFirstFromCursor editor text widgetGrabFocus editor searchMode :: Mode searchMode = Mode "search" matcher searchReset where matcher = mconcat [ createMatcherForKeyBinding ([Control], "Down") searchNextCommandHandler, createMatcherForKeyBinding ([Control], "Up") searchBackwardsCommandHandler]