[Pkg-haskell-commits] darcs: yi: Add vty-5.1 compatibility patch, thanks to Marcel Fourné

Joachim Breitner mail at joachim-breitner.de
Wed Sep 10 21:11:41 UTC 2014


Wed Sep 10 20:50:49 UTC 2014  Joachim Breitner <mail at joachim-breitner.de>
  * Add vty-5.1 compatibility patch, thanks to Marcel Fourn[_<U+00E9>_]

    M ./changelog +6
    M ./control -2 +2
    M ./patches/series +1
    A ./patches/vty-5.1-compat

Wed Sep 10 20:50:49 UTC 2014  Joachim Breitner <mail at joachim-breitner.de>
  * Add vty-5.1 compatibility patch, thanks to Marcel Fourné
diff -rN -u old-yi/changelog new-yi/changelog
--- old-yi/changelog	2014-09-10 21:11:41.544244090 +0000
+++ new-yi/changelog	2014-09-10 21:11:41.552244084 +0000
@@ -1,3 +1,9 @@
+yi (0.7.1-3) UNRELEASED; urgency=medium
+
+  * Add vty-5.1 compatibility patch, thanks to Marcel Fourné
+
+ -- Joachim Breitner <nomeata at debian.org>  Wed, 10 Sep 2014 22:49:34 +0200
+
 yi (0.7.1-2) unstable; urgency=medium
 
   * QuickCheck 2.7 compatibility patch by Marce Fourné
diff -rN -u old-yi/control new-yi/control
--- old-yi/control	2014-09-10 21:11:41.544244090 +0000
+++ new-yi/control	2014-09-10 21:11:41.544244090 +0000
@@ -76,8 +76,8 @@
                , libghc-unordered-containers-prof
                , libghc-utf8-string-dev (>= 0.3.1)
                , libghc-utf8-string-prof
-               , libghc-vty-dev (>= 4.7.0.0)
-               , libghc-vty-dev (<< 5)
+               , libghc-vty-dev (>= 5.1.0.0)
+               , libghc-vty-dev (<< 6)
                , libghc-vty-prof
                , libghc-xdg-basedir-dev (>= 0.2.1)
                , libghc-xdg-basedir-dev (<< 0.3)
diff -rN -u old-yi/patches/series new-yi/patches/series
--- old-yi/patches/series	2014-09-10 21:11:41.544244090 +0000
+++ new-yi/patches/series	2014-09-10 21:11:41.548244087 +0000
@@ -1,3 +1,4 @@
 xpm-icons.diff
 man-page.diff
 Yi.Syntax.Tree-quickcheck-2.7-patch.diff
+vty-5.1-compat
diff -rN -u old-yi/patches/vty-5.1-compat new-yi/patches/vty-5.1-compat
--- old-yi/patches/vty-5.1-compat	1970-01-01 00:00:00.000000000 +0000
+++ new-yi/patches/vty-5.1-compat	2014-09-10 21:11:41.548244087 +0000
@@ -0,0 +1,329 @@
+Description: Rework vty interface code like commit a42841dbeb4f716a50b82aa4c71c419f033806d5
+ This is a rework of a patch from upstream git to vty 5.1 API, adapted to yi 0.7.1 in Debian by Marcel Fourné.
+ .
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: upstream, https://github.com/yi-editor/yi/commit/a42841dbeb4f716a50b82aa4c71c419f033806d5#diff-68f4dd75b91abeba23f0417a614830e5
+
+Index: yi-0.7.1/src/library/Yi/Config.hs
+===================================================================
+--- yi-0.7.1.orig/src/library/Yi/Config.hs	2014-09-10 22:48:39.667336537 +0200
++++ yi-0.7.1/src/library/Yi/Config.hs	2014-09-10 22:48:39.663336537 +0200
+@@ -1,3 +1,4 @@
++{-# LANGUAGE CPP #-}
+ {-# LANGUAGE TemplateHaskell #-}
+ 
+ module Yi.Config where
+@@ -16,9 +17,14 @@
+ import Yi.Style.Library
+ import {-# source #-} Yi.UI.Common
+ import qualified Yi.Interact as I
++#ifdef FRONTEND_VTY
++import qualified Graphics.Vty as Vty
++#endif
+ 
+ data UIConfig = UIConfig {
+-   configVtyEscDelay :: Int,       
++#ifdef FRONTEND_VTY
++   configVty :: Vty.Config,
++#endif
+    configFontName :: Maybe String,  -- ^ Font name, for the UI that support it.
+    configFontSize :: Maybe Int,     -- ^ Font size, for the UI that support it.
+    configScrollStyle ::Maybe ScrollStyle,
+Index: yi-0.7.1/src/library/Yi/Config/Default.hs
+===================================================================
+--- yi-0.7.1.orig/src/library/Yi/Config/Default.hs	2014-09-10 22:48:39.667336537 +0200
++++ yi-0.7.1/src/library/Yi/Config/Default.hs	2014-09-10 22:48:39.663336537 +0200
+@@ -47,6 +47,7 @@
+ #endif
+ #ifdef FRONTEND_VTY
+ import qualified Yi.UI.Vty
++import qualified Graphics.Vty.Config as Vty
+ #endif
+ #ifdef FRONTEND_PANGO
+ import qualified Yi.UI.Pango
+@@ -145,7 +146,6 @@
+            , configAutoHideTabBar = True
+            , configWindowFill = ' '
+            , configTheme = defaultTheme
+-           , configVtyEscDelay = 0
+            }
+          , defaultKm        = modelessKeymapSet nilKeymap
+          , startActions     = []
+@@ -193,7 +193,9 @@
+ toEmacsStyleConfig, toVimStyleConfig, toVim2StyleConfig, toCuaStyleConfig :: Config -> Config
+ toEmacsStyleConfig cfg 
+     = cfg {
+-            configUI = (configUI cfg) { configVtyEscDelay = 1000 , configScrollStyle = Just SnapToCenter},
++            configUI = (configUI cfg)
++                       { configScrollStyle = Just SnapToCenter
++                       },
+             defaultKm = Emacs.keymap,
+             startActions = makeAction openScratchBuffer : startActions cfg,
+             configInputPreprocess = escToMeta,
+Index: yi-0.7.1/src/library/Yi/Config/Simple.hs
+===================================================================
+--- yi-0.7.1.orig/src/library/Yi/Config/Simple.hs	2014-09-10 22:48:39.667336537 +0200
++++ yi-0.7.1/src/library/Yi/Config/Simple.hs	2014-09-10 22:48:39.663336537 +0200
+@@ -108,7 +108,7 @@
+                  startFrontEndA, configUIA, startActionsA, initialActionsA, defaultKmA, 
+                  configInputPreprocessA, modeTableA, debugModeA,
+                  configRegionStyleA, configKillringAccumulateA, bufferUpdateHandlerA,
+-                 configVtyEscDelayA, configFontNameA, configFontSizeA, configScrollWheelAmountA,
++                 configVtyA, configFontNameA, configFontSizeA, configScrollWheelAmountA,
+                  configScrollStyleA, configCursorStyleA, CursorStyle(..),
+                  configLeftSideScrollBarA, configAutoHideScrollBarA, configAutoHideTabBarA,
+                  configLineWrapA, configWindowFillA, configThemeA, layoutManagersA, configVarsA,
+Index: yi-0.7.1/src/library/Yi/UI/Vty.hs
+===================================================================
+--- yi-0.7.1.orig/src/library/Yi/UI/Vty.hs	2014-09-10 22:48:39.667336537 +0200
++++ yi-0.7.1/src/library/Yi/UI/Vty.hs	2014-09-10 22:48:39.663336537 +0200
+@@ -34,7 +34,7 @@
+ import Yi.Config
+ import Yi.Window
+ import Yi.Style as Style
+-import Graphics.Vty as Vty hiding (refresh, Default)
++import Graphics.Vty as Vty hiding (Config(..), refresh, Default, text)
+ import qualified Graphics.Vty as Vty
+ import Yi.Keymap (makeAction, YiM)
+ 
+@@ -73,11 +73,11 @@
+ start cfg ch outCh editor = do
+   liftIO $ do 
+           oattr <- getTerminalAttributes stdInput
+-          v <- mkVtyEscDelay $ configVtyEscDelay $ configUI $ cfg
++          v <- mkVty $ configVty $ configUI $ cfg
+           nattr <- getTerminalAttributes stdInput
+           setTerminalAttributes stdInput (withoutMode nattr ExtendedFunctions) Immediately
+           -- remove the above call to setTerminalAttributes when vty does it.
+-          Vty.DisplayRegion x0 y0 <- Vty.display_bounds $ Vty.terminal v
++          (x0,y0) <- Vty.displayBounds $ Vty.outputIface v
+           sz <- newIORef (fromEnum y0, fromEnum x0)
+           -- fork input-reading thread. important to block *thread* on getKey
+           -- otherwise all threads will block waiting for input
+@@ -97,7 +97,7 @@
+               -- | Read a key. UIs need to define a method for getting events.
+               getKey :: IO Yi.Event.Event
+               getKey = do 
+-                event <- Vty.next_event v
++                event <- Vty.nextEvent v
+                 case event of 
+                   (EvResize x y) -> do
+                       logPutStrLn $ "UI: EvResize: " ++ show (x,y)
+@@ -146,28 +146,28 @@
+ 
+ 
+ fromVtyKey :: Vty.Key -> Yi.Event.Key
+-fromVtyKey (Vty.KEsc     ) = Yi.Event.KEsc      
+-fromVtyKey (Vty.KFun x   ) = Yi.Event.KFun x    
+-fromVtyKey (Vty.KPrtScr  ) = Yi.Event.KPrtScr   
+-fromVtyKey (Vty.KPause   ) = Yi.Event.KPause    
+-fromVtyKey (Vty.KASCII '\t') = Yi.Event.KTab
+-fromVtyKey (Vty.KASCII c ) = Yi.Event.KASCII c  
+-fromVtyKey (Vty.KBS      ) = Yi.Event.KBS       
+-fromVtyKey (Vty.KIns     ) = Yi.Event.KIns      
+-fromVtyKey (Vty.KHome    ) = Yi.Event.KHome     
+-fromVtyKey (Vty.KPageUp  ) = Yi.Event.KPageUp   
+-fromVtyKey (Vty.KDel     ) = Yi.Event.KDel      
+-fromVtyKey (Vty.KEnd     ) = Yi.Event.KEnd      
+-fromVtyKey (Vty.KPageDown) = Yi.Event.KPageDown 
+-fromVtyKey (Vty.KNP5     ) = Yi.Event.KNP5      
+-fromVtyKey (Vty.KUp      ) = Yi.Event.KUp       
+-fromVtyKey (Vty.KMenu    ) = Yi.Event.KMenu     
+-fromVtyKey (Vty.KLeft    ) = Yi.Event.KLeft     
+-fromVtyKey (Vty.KDown    ) = Yi.Event.KDown     
+-fromVtyKey (Vty.KRight   ) = Yi.Event.KRight    
+-fromVtyKey (Vty.KEnter   ) = Yi.Event.KEnter    
+-fromVtyKey (Vty.KBackTab ) = error "This should be handled in fromVtyEvent"
+-fromVtyKey (Vty.KBegin   ) = error "Yi.UI.Vty.fromVtyKey: can't handle KBegin"
++fromVtyKey (Vty.KEsc      ) = Yi.Event.KEsc      
++fromVtyKey (Vty.KFun x    ) = Yi.Event.KFun x    
++fromVtyKey (Vty.KPrtScr   ) = Yi.Event.KPrtScr   
++fromVtyKey (Vty.KPause    ) = Yi.Event.KPause    
++fromVtyKey (Vty.KChar '\t') = Yi.Event.KTab
++fromVtyKey (Vty.KChar c   ) = Yi.Event.KASCII c  
++fromVtyKey (Vty.KBS       ) = Yi.Event.KBS       
++fromVtyKey (Vty.KIns      ) = Yi.Event.KIns      
++fromVtyKey (Vty.KHome     ) = Yi.Event.KHome     
++fromVtyKey (Vty.KPageUp   ) = Yi.Event.KPageUp   
++fromVtyKey (Vty.KDel      ) = Yi.Event.KDel      
++fromVtyKey (Vty.KEnd      ) = Yi.Event.KEnd      
++fromVtyKey (Vty.KPageDown ) = Yi.Event.KPageDown 
++fromVtyKey (Vty.KCenter   ) = Yi.Event.KNP5      
++fromVtyKey (Vty.KUp       ) = Yi.Event.KUp       
++fromVtyKey (Vty.KMenu     ) = Yi.Event.KMenu     
++fromVtyKey (Vty.KLeft     ) = Yi.Event.KLeft     
++fromVtyKey (Vty.KDown     ) = Yi.Event.KDown     
++fromVtyKey (Vty.KRight    ) = Yi.Event.KRight    
++fromVtyKey (Vty.KEnter    ) = Yi.Event.KEnter    
++fromVtyKey (Vty.KBackTab  ) = error "This should be handled in fromVtyEvent"
++fromVtyKey (Vty.KBegin    ) = error "Yi.UI.Vty.fromVtyKey: can't handle KBegin"
+ 
+ fromVtyMod :: Vty.Modifier -> Yi.Event.Modifier
+ fromVtyMod Vty.MShift = Yi.Event.MShift
+@@ -229,13 +229,13 @@
+   logPutStrLn "refreshing screen."
+   logPutStrLn $ "startXs: " ++ show startXs
+   Vty.update (vty $ ui) 
+-      ( pic_for_image ( vert_cat tabBarImages
+-                        <->
+-                        vert_cat (toList wImages) 
+-                        <-> 
+-                        vert_cat (fmap formatCmdLine niceCmd)
+-                      )
+-      ) { pic_cursor = case cursor (PL._focus renders) of
++      ( picForImage ( vertCat tabBarImages
++                      <->
++                      vertCat (toList wImages) 
++                      <-> 
++                      vertCat (fmap formatCmdLine niceCmd)
++                    )
++      ) { picCursor = case cursor (PL._focus renders) of
+                         Just (y,x) -> Cursor (toEnum x) (toEnum $ y + PL._focus startXs)
+                         -- Add the position of the window to the position of the cursor
+                         Nothing -> NoCursor
+@@ -254,12 +254,12 @@
+   where tabImages       = foldr1 (<|>) $ fmap tabToVtyImage $ tabBarDescr e
+         extraImage      = withAttributes (tabBarAttributes uiStyle) (replicate (xss - fromEnum totalTabWidth) ' ')
+ 
+-        totalTabWidth   = Vty.image_width tabImages
++        totalTabWidth   = Vty.imageWidth tabImages
+         uiStyle         = configStyle $ configUI $ config ui
+         tabTitle text   = " " ++ text ++ " "
+         tabAttr b       = baseAttr b $ tabBarAttributes uiStyle
+-        baseAttr True  sty = attributesToAttr (appEndo (tabInFocusStyle uiStyle) sty) Vty.def_attr
+-        baseAttr False sty = attributesToAttr (appEndo (tabNotFocusedStyle uiStyle) sty) Vty.def_attr `Vty.with_style` Vty.underline
++        baseAttr True  sty = attributesToAttr (appEndo (tabInFocusStyle uiStyle) sty) Vty.defAttr
++        baseAttr False sty = attributesToAttr (appEndo (tabNotFocusedStyle uiStyle) sty) Vty.defAttr `Vty.withStyle` Vty.underline
+         tabToVtyImage _tab@(TabDescr text inFocus) = Vty.string (tabAttr inFocus) (tabTitle text)
+ 
+ -- | Determine whether it is necessary to render the tab bar
+@@ -303,7 +303,7 @@
+         off = if notMini then 1 else 0
+         h' = h - off
+         ground = baseAttributes sty
+-        wsty = attributesToAttr ground Vty.def_attr
++        wsty = attributesToAttr ground Vty.defAttr
+         eofsty = appEndo (eofStyle sty) ground
+         (point, _) = runBuffer win b pointB
+         (eofPoint, _) = runBuffer win b sizeB
+@@ -320,9 +320,9 @@
+         -- TODO: I suspect that this costs quite a lot of CPU in the "dry run" which determines the window size;
+         -- In that case, since attributes are also useless there, it might help to replace the call by a dummy value.
+         -- This is also approximately valid of the call to "indexedAnnotatedStreamB".
+-        colors = map (second (($ Vty.def_attr) . attributesToAttr)) attributes
++        colors = map (second (($ Vty.defAttr) . attributesToAttr)) attributes
+         bufData = -- trace (unlines (map show text) ++ unlines (map show $ concat strokes)) $ 
+-                  paintChars Vty.def_attr colors text
++                  paintChars Vty.defAttr colors text
+         tabWidth = tabSize . fst $ runBuffer win b indentSettingsB
+         prompt = if isMini win then miniIdentString b else ""
+ 
+@@ -338,7 +338,7 @@
+         modeStyle = (if focused then appEndo (modelineFocusStyle sty) else id) (modelineAttributes sty)
+         filler = take w (configWindowFill cfg : repeat ' ')
+     
+-        pict = vert_cat (take h' (rendered ++ repeat (withAttributes eofsty filler)) ++ modeLines)
++        pict = vertCat (take h' (rendered ++ repeat (withAttributes eofsty filler)) ++ modeLines)
+   
+ -- | Renders text in a rectangle.
+ -- This also returns 
+@@ -357,7 +357,7 @@
+          -> ([Image], Point, Maybe (Int,Int), Int)
+ drawText h w topPoint point tabWidth bufData
+     | h == 0 || w == 0 = ([], topPoint, Nothing, 0)
+-    | otherwise        = (rendered_lines, bottomPoint, pntpos, h - (length wrapped - h))
++    | otherwise        = (renderedLines, bottomPoint, pntpos, h - (length wrapped - h))
+   where 
+ 
+   -- the number of lines that taking wrapping into account,
+@@ -372,14 +372,14 @@
+   pntpos = listToMaybe [(y,x) | (y,l) <- zip [0..] lns0, (x,(_char,(_attr,p))) <- zip [0..] l, p == point]
+ 
+   -- fill lines with blanks, so the selection looks ok.
+-  rendered_lines = map fillColorLine lns0
++  renderedLines = map fillColorLine lns0
+   colorChar (c, (a, _aPoint)) = Vty.char a c
+ 
+   fillColorLine :: [(Char, (Vty.Attr, Point))] -> Image
+-  fillColorLine [] = char_fill Vty.def_attr ' ' w 1
+-  fillColorLine l = horiz_cat (map colorChar l) 
++  fillColorLine [] = charFill Vty.defAttr ' ' w 1
++  fillColorLine l = horizCat (map colorChar l) 
+                     <|>
+-                    char_fill a ' ' (w - length l) 1
++                    charFill a ' ' (w - length l) 1
+                     where (_,(a,_x)) = last l
+ 
+   -- | Cut a string in lines separated by a '\n' char. Note
+@@ -404,7 +404,7 @@
+     | otherwise = [(c,p)]
+ 
+ withAttributes :: Attributes -> String -> Image
+-withAttributes sty str = Vty.string (attributesToAttr sty Vty.def_attr) str
++withAttributes sty str = Vty.string (attributesToAttr sty Vty.defAttr) str
+ 
+ ------------------------------------------------------------------------
+ 
+@@ -432,31 +432,31 @@
+ colorToAttr set c =
+   case c of 
+     RGB 0 0 0         -> set Vty.black
+-    RGB 128 128 128   -> set Vty.bright_black
++    RGB 128 128 128   -> set Vty.brightBlack
+     RGB 139 0 0       -> set Vty.red
+-    RGB 255 0 0       -> set Vty.bright_red
++    RGB 255 0 0       -> set Vty.brightRed
+     RGB 0 100 0       -> set Vty.green
+-    RGB 0 128 0       -> set Vty.bright_green
++    RGB 0 128 0       -> set Vty.brightGreen
+     RGB 165 42 42     -> set Vty.yellow
+-    RGB 255 255 0     -> set Vty.bright_yellow
++    RGB 255 255 0     -> set Vty.brightYellow
+     RGB 0 0 139       -> set Vty.blue
+-    RGB 0 0 255       -> set Vty.bright_blue
++    RGB 0 0 255       -> set Vty.brightBlue
+     RGB 128 0 128     -> set Vty.magenta
+-    RGB 255 0 255     -> set Vty.bright_magenta
++    RGB 255 0 255     -> set Vty.brightMagenta
+     RGB 0 139 139     -> set Vty.cyan
+-    RGB 0 255 255     -> set Vty.bright_cyan
++    RGB 0 255 255     -> set Vty.brightCyan
+     RGB 165 165 165   -> set Vty.white
+-    RGB 255 255 255   -> set Vty.bright_white
++    RGB 255 255 255   -> set Vty.brightWhite
+     Default           -> id
+     _                 -> error $ "Color unsupported by Vty frontend: " ++ show c
+ 
+ attributesToAttr :: Attributes -> (Vty.Attr -> Vty.Attr)
+ attributesToAttr (Attributes fg bg reverse bd _itlc underline') =
+-    (if reverse then (flip Vty.with_style Vty.reverse_video)  else id) .
+-    (if bd then (flip Vty.with_style Vty.bold) else id) .
+-    (if underline' then (flip Vty.with_style Vty.underline) else id) .
+-    colorToAttr (flip Vty.with_fore_color) fg .
+-    colorToAttr (flip Vty.with_back_color) bg
++    (if reverse then (flip Vty.withStyle Vty.reverseVideo)  else id) .
++    (if bd then (flip Vty.withStyle Vty.bold) else id) .
++    (if underline' then (flip Vty.withStyle Vty.underline) else id) .
++    colorToAttr (flip Vty.withForeColor) fg .
++    colorToAttr (flip Vty.withBackColor) bg
+ 
+ 
+ ---------------------------------
+Index: yi-0.7.1/yi.cabal
+===================================================================
+--- yi-0.7.1.orig/yi.cabal	2014-09-10 22:48:39.667336537 +0200
++++ yi-0.7.1/yi.cabal	2014-09-10 22:48:39.663336537 +0200
+@@ -293,7 +293,7 @@
+       Yi.UI.Vty
+     build-depends:
+       unix-compat >=0.1 && <0.5,
+-      vty >= 4.7.0.0 && <5
++      vty >= 5.1.0.0 && <6
+     cpp-options: -DFRONTEND_VTY
+ 
+   if flag (scion)




More information about the Pkg-haskell-commits mailing list