From b0119a495884bcba252d7e79265f5e01f17b41d1 Mon Sep 17 00:00:00 2001 From: slotThe Date: Mon, 24 May 2021 14:18:36 +0200 Subject: Add NotmuchMail as a runnable type This is needed for the plugin to parse properly in non-Haskell based configurations. Related: https://github.com/jaor/xmobar/issues/547 --- src/Xmobar/Run/Types.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Xmobar/Run/Types.hs b/src/Xmobar/Run/Types.hs index f4a7252..deec8ba 100644 --- a/src/Xmobar/Run/Types.hs +++ b/src/Xmobar/Run/Types.hs @@ -30,6 +30,7 @@ import Xmobar.Plugins.XMonadLog import Xmobar.Plugins.EWMH import Xmobar.Plugins.Kbd import Xmobar.Plugins.Locks +import Xmobar.Plugins.NotmuchMail #ifdef INOTIFY import Xmobar.Plugins.Mail @@ -54,7 +55,7 @@ infixr :*: -- this function's type signature. runnableTypes :: Command :*: Monitors :*: Date :*: PipeReader :*: BufferedPipeReader :*: CommandReader :*: StdinReader :*: - XMonadLog :*: EWMH :*: Kbd :*: Locks :*: + XMonadLog :*: EWMH :*: Kbd :*: Locks :*: NotmuchMail :*: #ifdef INOTIFY Mail :*: MBox :*: #endif -- cgit v1.2.3 From d51b9d5dd6537e5369e13a9a11ae98aeadce50dd Mon Sep 17 00:00:00 2001 From: slotThe Date: Mon, 24 May 2021 14:20:32 +0200 Subject: NotmuchMail: Manually implement Read instance The automatically derived read instance expects the type to be given in record syntax; this is not what most users want. In order to simply specify the type via Run NotmuchMail "mail" [MailItem "name" "" "tag:unread"] 3000 we have to write our own Read instance. Related: https://github.com/jaor/xmobar/issues/547 --- src/Xmobar/Plugins/NotmuchMail.hs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Xmobar/Plugins/NotmuchMail.hs b/src/Xmobar/Plugins/NotmuchMail.hs index 3da170c..3604a11 100644 --- a/src/Xmobar/Plugins/NotmuchMail.hs +++ b/src/Xmobar/Plugins/NotmuchMail.hs @@ -39,6 +39,7 @@ import Control.Concurrent.Async (mapConcurrently) import Data.Maybe (catMaybes) import System.Exit (ExitCode(ExitSuccess)) import System.Process (readProcessWithExitCode) +import Text.Read (Lexeme(Ident), ReadPrec, lexP, parens, prec, readPrec, reset) -- | A 'MailItem' is a name, an address, and a query to give to @notmuch@. @@ -48,7 +49,13 @@ data MailItem = MailItem -- the empty string to query all indexed mail instead , query :: String -- ^ Query to give to @notmuch search@ } - deriving (Read, Show) + deriving (Show) + +instance Read MailItem where + readPrec :: ReadPrec MailItem + readPrec = parens . prec 11 $ do + Ident "MailItem" <- lexP + MailItem <$> reset readPrec <*> reset readPrec <*> reset readPrec -- | A full mail configuration. data NotmuchMail = NotmuchMail @@ -56,7 +63,13 @@ data NotmuchMail = NotmuchMail , mailItems :: [MailItem] -- ^ 'MailItem's to check , nmRate :: Int -- ^ Update frequency (in deciseconds) } - deriving (Read, Show) + deriving (Show) + +instance Read NotmuchMail where + readPrec :: ReadPrec NotmuchMail + readPrec = parens . prec 11 $ do + Ident "NotmuchMail" <- lexP + NotmuchMail <$> reset readPrec <*> reset readPrec <*> reset readPrec -- | How to execute this plugin. instance Exec NotmuchMail where -- cgit v1.2.3