[xmonad] X.A.GridSelect spawnSelected colorized

Platon Pronko platon7pronko at gmail.com
Mon Aug 10 13:29:58 UTC 2020


Hi!

I forgot that there is a same member in XMonad.Actions.GridSelect. You can rename `stringColorizer` to `myStringColorizer` (and `windowColorizer` to `myWindowColorizer` for uniformity). And don't forget to rename invocation of `stringColorizer` inside `windowColorizer` - it was meant to reuse our own colorizer instead of calling to XMonad.Actions.GridSelect.stringColorizer.
  
Regarding `mix` and `twodigitHex` - they are not exported from the module, so you will need to copy them from the source (http://hackage.haskell.org/package/xmonad-contrib-0.16/docs/src/XMonad.Actions.GridSelect.html#twodigitHex).

Best regards,
Platon Pronko

On 2020-08-10 16:14, Dave Macias wrote:
> Planton,
> Thank you kindly!
> 
> I attempted to compile but with these results:
> 
> xmonad.hs:346:58: error:
>      Ambiguous occurrence ‘stringColorizer’
>      It could refer to
>         either ‘XMonad.Actions.GridSelect.stringColorizer’,
>                imported from ‘XMonad.Actions.GridSelect’ at xmonad.hs:46:1-32
>             or ‘Main.stringColorizer’, defined at xmonad.hs:338:1
>      |
> 346 | windowColorizer w active = runQuery className w >>= flip stringColorizer active
>      |                                                          ^^^^^^^^^^^^^^^
> 
> 
> So I updated that line to :
> 
> *windowColorizer w active = runQuery className w >>= flip XMonad.Actions.GridSelect.stringColorizer active
> *
> 
> but error:
> 
> xmonad.hs:331:25: error:
>      • Variable not in scope:
>          mix
>            :: (Word8, Word8, Word8)
>               -> (Word8, Word8, Word8) -> t0 -> (Word8, Word8, Word8)
>      • Perhaps you meant one of these:
>          ‘max’ (imported from Prelude), ‘min’ (imported from Prelude)
>      |
> 331 |        else (rgbToHex $ mix startC endC
>      |                         ^^^
> 
> xmonad.hs:332:16: error:
>      Variable not in scope: stringToRatio :: Window -> t0
>      |
> 332 |              $ stringToRatio str, rgbToHex inactiveT)
>      |                ^^^^^^^^^^^^^
> 
> xmonad.hs:334:37: error:
>      Variable not in scope: twodigitHex :: Word8 -> [Char]
>      |
> 334 |            rgbToHex (r, g, b) = '#':twodigitHex r
>      |                                     ^^^^^^^^^^^
> 
> xmonad.hs:335:35: error:
>      Variable not in scope: twodigitHex :: Word8 -> [Char]
>      |
> 335 |                                 ++twodigitHex g++twodigitHex b
>      |                                   ^^^^^^^^^^^
> 
> xmonad.hs:335:50: error:
>      Variable not in scope: twodigitHex :: Word8 -> [Char]
>      |
> 335 |                                 ++twodigitHex g++twodigitHex b
>      |                                                  ^^^^^^^^^^^
> 
> On Mon, Aug 10, 2020 at 9:01 AM Platon Pronko <platon7pronko at gmail.com <mailto:platon7pronko at gmail.com>> wrote:
> 
>     Hi!
> 
>     You mean you want to reuse your `myColorizer` for spawnSelected, correct? Then you'll need to rewrite colorRangeFromClassName a bit, because that one expects Window and you have a String. Something like this may work (haven't compiled it, just copied&tweaked the source for colorRangeFromClassName):
> 
>     colorRangeFromString :: (Word8, Word8, Word8) -- ^ Beginning of the color range
>                            -> (Word8, Word8, Word8) -- ^ End of the color range
>                            -> (Word8, Word8, Word8) -- ^ Background of the active window
>                            -> (Word8, Word8, Word8) -- ^ Inactive text color
>                            -> (Word8, Word8, Word8) -- ^ Active text color
>                            -> Window -> Bool -> X (String, String)
>     colorRangeFromString startC endC activeC inactiveT activeT str active =
>           if active
>             then (rgbToHex activeC, rgbToHex activeT)
>             else (rgbToHex $ mix startC endC
>                   $ stringToRatio str, rgbToHex inactiveT)
>           where rgbToHex :: (Word8, Word8, Word8) -> String
>                 rgbToHex (r, g, b) = '#':twodigitHex r
>                                      ++twodigitHex g++twodigitHex b
> 
>     stringColorizer :: String -> Bool -> X (String, String)
>     stringColorizer = colorRangeFromString
>                         (0x31,0x2e,0x39) -- lowest inactive bg
>                         (0x31,0x2e,0x39) -- highest inactive bg
>                         (0x78,0x3e,0x57) -- active bg
>                         (0xc0,0xa7,0x9a) -- inactive fg
>                         (0xff,0xff,0xff) -- active fg
> 
>     windowColorizer :: Window -> Bool -> X (String, String)
>     windowColorizer w active = runQuery className w >>= flip stringColorizer active
> 
>     Best regards,
>     Platon Pronko
> 
>     On 2020-08-10 15:13, Dave Macias wrote:
>      > Thank you for the reply.
>      > That helped me to figure it out.
>      > But I had to create a separate *Colorizer*. (see below)
>      > Is there a way to use the same colorizer as goToSelected?
>      > Thanks!
>      >
>      > myGSFont            = "xft:Noto Sans CJK KR:bold:pixelsize=10"
>      > myColorizer  :: Window -> Bool -> X (String, String)
>      > myColorizer  = colorRangeFromClassName
>      >                    (0x31,0x2e,0x39) -- lowest inactive bg
>      >                    (0x31,0x2e,0x39) -- highest inactive bg
>      >                    (0x78,0x3e,0x57) -- active bg
>      >                    (0xc0,0xa7,0x9a) -- inactive fg
>      >                    (0xff,0xff,0xff) -- active fg
>      >
>      > *gridColorizer :: a -> Bool -> X (String, String)
>      > gridColorizer _ True = return ("#00aa00", "black")
>      > gridColorizer _ False = return ("#333333", "#cccccc")*
>      >
>      > myGSConfig :: t -> GSConfig Window
>      > myGSConfig colorizer = (buildDefaultGSConfig myColorizer)
>      >      { gs_cellheight   = 30
>      >      , gs_cellwidth    = 200
>      >      , gs_cellpadding  = 6
>      >      , gs_originFractX = 0.5
>      >      , gs_originFractY = 0.5
>      >      , gs_colorizer = myColorizer
>      >      , gs_font         = myGSFont
>      >      }
>      >
>      > -- spawnSelected Redefine
>      > spawnSelected' :: [(String, String)] -> X ()
>      > spawnSelected' lst = gridselect conf lst >>= flip whenJust spawn
>      >      where conf = def
>      >                     { gs_cellheight   = 30
>      >                     , gs_cellwidth    = 200
>      >                     , gs_cellpadding  = 6
>      >                     , gs_originFractX = 0.5
>      >                     , gs_originFractY = 0.5
>      > *                  , gs_colorizer = gridColorizer
>      > *                   , gs_font         = myGSFont
>      >                    }
>      >
>      >
>      >   , ((mod4Mask, xK_g), goToSelected  $ myGSConfig myColorizer)
>      > * , ((mod4Mask, xK_y), spawnSelected' myAppGrid)
>      > * , ((mod4Mask, xK_u), runSelectedAction (buildDefaultGSConfig gridColorizer)
>      >                                          [ ("Chromium", spawnHere "chromium")
>      >                                          , ("Hexchat", spawnHere "hexchat")
>      >
>      > On Sat, Aug 8, 2020 at 8:46 AM Platon Pronko <platon7pronko at gmail.com <mailto:platon7pronko at gmail.com> <mailto:platon7pronko at gmail.com <mailto:platon7pronko at gmail.com>>> wrote:
>      >
>      >     Hi!
>      >
>      >     Your spawnSelected' has one argument [(String, String)], but you try to invoke it with two - myAppGrid and winconfig. I'd remove winconfig argument and instead stick it into gs_colorizer field in your GSConfig constructor.
>      >
>      >     Best regards,
>      >     Platon Pronko
>      >
>      >     On 2020-08-07 17:13, Dave Macias wrote:
>      >      > Hello,
>      >      >
>      >      > Apologies for the repost....i had posted here: https://www.reddit.com/r/xmonad/comments/hvaug9/xagridselect_spawnselected_colorized/ but no response for some time now. So I want to try here.
>      >      >
>      >      > Basically, I am trying to custom colorize spawnSelected grid apps.
>      >      > I was able to do this with goToSelected and I really like the color scheme.
>      >      >
>      >      > Was hoping to use the same color scheme that i use for goToSelected applied to spawnSelected.
>      >      >
>      >      > Any input is much appreciated!
>      >      >
>      >      > Stay safe.
>      >      >
>      >      > -Dave
>      >      >
>      >      > _______________________________________________
>      >      > xmonad mailing list
>      >      > xmonad at haskell.org <mailto:xmonad at haskell.org> <mailto:xmonad at haskell.org <mailto:xmonad at haskell.org>>
>      >      > http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>      >      >
>      >     _______________________________________________
>      >     xmonad mailing list
>      > xmonad at haskell.org <mailto:xmonad at haskell.org> <mailto:xmonad at haskell.org <mailto:xmonad at haskell.org>>
>      > http://mail.haskell.org/cgi-bin/mailman/listinfo/xmonad
>      >
> 


More information about the xmonad mailing list