packages feed

hbro-contrib-1.2.0.0: examples/hbro.hs

{-# LANGUAGE ConstraintKinds, FlexibleContexts, NoImplicitPrelude, OverloadedStrings, PackageImports #-}
module Main where

-- {{{ Imports
import Hbro
import qualified Hbro.Bookmarks as Bookmarks
import qualified Hbro.Clipboard as Clipboard
import Hbro.Config (homePageL)
import qualified Hbro.Config as Config
import qualified Hbro.Download as Download
import qualified Hbro.Gui as GUI
import Hbro.Gui.PromptBar
import qualified Hbro.History as History
import Hbro.Keys as Key
import Hbro.Keys.Model ((.|))
import Hbro.Keys.Monadic as Key
import Hbro.Misc
import Hbro.Settings
import Hbro.Gui.PromptBar.Signals
import Hbro.StatusBar
import Hbro.WebView.Hooks as WebView
import Hbro.WebView.Signals
import qualified Hbro.Webkit.WebSettings as WebSettings

import qualified Data.Set as Set

import Filesystem

import Graphics.UI.Gtk.Display.Label
import Graphics.UI.Gtk.WebKit.WebSettings

import qualified Network.URI as N
import Network.URI.Monadic
-- }}}


myHomePage = fromJust . N.parseURI $ "http://www.google.com"

-- Download to $HOME
myDownloadHook :: (BaseIO m) => Download -> m ()
myDownloadHook (Download uri filename _size) = do
    destination <- io getHomeDirectory
    Download.aria destination uri filename

-- myLoadFinishedHook :: KE ()
myLoadFinishedHook _ = History.log

-- Setup (run at start-up)
-- Note that keybindings are suited for an azerty keyboard
mySetup :: K ()
mySetup = do
    Config.set  homePageL       myHomePage
    WebView.set onDownloadL     myDownloadHook
    WebView.set onLoadFinishedL myLoadFinishedHook

-- Browse
    Key.bind (_Control .| _Left)  $  goBackList    ["-l", "10"] >>= load
    Key.bind (_Control .| _Right) $  goForwardList ["-l", "10"] >>= load
    Key.bind (_Control .| _g)     $  prompt "DuckDuckGo search" "" >>= parseURIReference . ("http://duckduckgo.com/html?q=" ++) . (pack . escapeURIString isAllowedInURI . unpack) >>= load
-- Bookmarks
    Key.bind (_Control .| _d)      $     prompt "Bookmark with tags:" "" >>= Bookmarks.add . Set.fromList . words
{-    Key.bind (_Control .| _D)      $     Prompt.read "Bookmark all instances with tag:" "" $ \tags -> do
        uris <- mapM parseURI =<< sendCommandToAll "GET_URI"
        forM uris $ Bookmarks.addCustom . (`Bookmarks.Entry` words tags)
        void . Bookmarks.addCustom . (`Bookmarks.Entry` words tags) =<< getURI-}
    Key.bind (_Alt .| _d)          $     Bookmarks.deleteByTag ["-l", "10"]
    Key.bind (_Control .| _l)      $     Bookmarks.select      ["-l", "10"] >>= load
    Key.bind (_Control .| _L)      $     Bookmarks.selectByTag ["-l", "10"] >>= void . mapM (\uri -> io $ spawn "hbro" ["-u", show uri])
-- History
    Key.bind (_Alt .| _h)          $     load . History._uri =<< History.select ["-l", "10"]
-- Settings
    Key.bind (_Alt .| _j)          $     WebSettings.toggle_ webSettingsEnableScripts
    Key.bind (_Alt .| _p)          $     WebSettings.toggle_ webSettingsEnablePlugins

-- Web settings (cf Graphic.Gtk.WebKit.WebSettings)
    WebSettings.set webSettingsEnablePlugins       False
    WebSettings.set webSettingsEnableScripts       True
    WebSettings.set webSettingsJSCanOpenWindowAuto True
    WebSettings.set webSettingsUserAgent           firefoxUserAgent

-- Status bar customization: scroll position + zoom level + load progress + current URI + key strokes
    installScrollWidget =<< GUI.getObject castToLabel "scroll"
    installZoomWidget   =<< GUI.getObject castToLabel "zoom"
    installProgressWidget =<< GUI.getObject castToLabel "progress"
    installURIWidget defaultURIColors defaultSecureURIColors =<< GUI.getObject castToLabel "uri"
    installKeyStrokesWidget =<< GUI.getObject castToLabel "keys"

    return ()


-- Main function, expected to call 'hbro'
main :: IO ()
main = hbro mySetup