on master help sign in
stop using encodeUtf8 on a byte sequence. form the write directly
commitd8007cb04073f7215742b93b54246ed46a6e2c22 authorCorey O'Connor <coreyoconnor@gmail.com> dateTue 28 Jan 2014, 17:41 (13 years ago) parent6f976d3
2 files changed+20−19
src/Graphics/Vty/Output/TerminfoBased.hs+16−17 src/Graphics/Vty/Output/XTermColor.hs+4−2
src/Graphics/Vty/Output/TerminfoBased.hs+16−17
@@ -193,23 +193,22 @@ get_window_size = do
193193 return (fromIntegral b, fromIntegral a)
194194
195195terminfo_display_context :: Output -> TerminfoCaps -> DisplayRegion -> IO DisplayContext
196−terminfo_display_context t_actual terminfo_caps r =
197− let dc = DisplayContext
198− { context_device = t_actual
199− , context_region = r
200− , write_move_cursor = \x y -> write_cap_expr (cup terminfo_caps) [toEnum y, toEnum x]
201− , write_show_cursor = case cnorm terminfo_caps of
202− Nothing -> error "this terminal does not support show cursor"
203− Just c -> write_cap_expr c []
204− , write_hide_cursor = case civis terminfo_caps of
205− Nothing -> error "this terminal does not support hide cursor"
206− Just c -> write_cap_expr c []
207− , write_set_attr = terminfo_write_set_attr dc terminfo_caps
208− , write_default_attr = write_cap_expr (set_default_attr terminfo_caps) []
209− , write_row_end = write_cap_expr (clear_eol terminfo_caps) []
210− , inline_hack = return ()
211− }
212− in return dc
196+terminfo_display_context t_actual terminfo_caps r = return dc
197+ where dc = DisplayContext
198+ { context_device = t_actual
199+ , context_region = r
200+ , write_move_cursor = \x y -> write_cap_expr (cup terminfo_caps) [toEnum y, toEnum x]
201+ , write_show_cursor = case cnorm terminfo_caps of
202+ Nothing -> error "this terminal does not support show cursor"
203+ Just c -> write_cap_expr c []
204+ , write_hide_cursor = case civis terminfo_caps of
205+ Nothing -> error "this terminal does not support hide cursor"
206+ Just c -> write_cap_expr c []
207+ , write_set_attr = terminfo_write_set_attr dc terminfo_caps
208+ , write_default_attr = write_cap_expr (set_default_attr terminfo_caps) []
209+ , write_row_end = write_cap_expr (clear_eol terminfo_caps) []
210+ , inline_hack = return ()
211+ }
213212
214213-- | Portably setting the display attributes is a giant pain in the ass.
215214--
src/Graphics/Vty/Output/XTermColor.hs+4−2
@@ -6,10 +6,12 @@ import Graphics.Vty.Output.Interface
66import qualified Graphics.Vty.Output.TerminfoBased as TerminfoBased
77
88import Blaze.ByteString.Builder (writeToByteString)
9+import Blaze.ByteString.Builder.Word (writeWord8)
910
1011import Control.Applicative
1112import Control.Monad.Trans
1213
14+import Data.Foldable (foldMap)
1315import qualified Data.Text as T
1416import qualified Data.Text.Encoding as T
1517
@@ -49,6 +51,6 @@ set_default_char_set = "\ESC%@"
4951-- *after* the next newline.
5052xterm_inline_hack :: Output -> IO ()
5153xterm_inline_hack t = do
52− let s_utf8 = T.encodeUtf8 $ T.pack "\ESC[K"
53− output_byte_buffer t $ writeToByteString $ write_utf8_text s_utf8
54+ let write_reset = foldMap (writeWord8.toEnum.fromEnum) "\ESC[K"
55+ output_byte_buffer t $ writeToByteString write_reset
5456