[GHC] #9364: GHCi (or haskeline?) confused by non-single-width characters

GHC ghc-devs at haskell.org
Fri Jul 25 11:05:00 UTC 2014


#9364: GHCi (or haskeline?) confused by non-single-width characters
-------------------------------------+-------------------------------------
       Reporter:  cheater            |                   Owner:
           Type:  bug                |                  Status:  new
       Priority:  normal             |               Milestone:
      Component:  GHCi               |                 Version:  7.8.3
       Keywords:  linux, terminal,   |        Operating System:
  colour, color, prompt              |  Unknown/Multiple
   Architecture:  Unknown/Multiple   |         Type of failure:  Other
     Difficulty:  Unknown            |               Test Case:
     Blocked By:                     |                Blocking:
Related Tickets:                     |  Differential Revisions:
-------------------------------------+-------------------------------------
 Hi,
 there's an issue in the GHCi prompt.

 To reproduce:

 1. Do everything in Linux (I don't have other operating systems); I'm
 using a version of the gnome 2 gnome-terminal.

 2. Use the following to colourise the prompt in GHCi:

 echo -e :set prompt '"\033[32;1m%s\033[34;1m>\033[0m "' >>
 ~/.ghc/ghci.conf

 3. Import quite a few modules (say, 5 to 10 should be enough)

 4. Give the prompt enough text that it wraps around. It's best if you
 start the text with -- so that it's a comment and doesn't produce any
 output. For example, say I entered "--
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", I
 now see the following:

 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid> -- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

 (do note that the first set of b's is located on the same line as the
 prompt, and the second is located under the prompt)

 5. Press Enter. You should now see:

 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid> -- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid>

 6. Press Ctrl-P or the up arrow key to select the previous history item.
 You will now see the following:

 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid> -- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid> -- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

 7. Press Ctrl-A or the Home cursor key to go to the beginning of the text
 entry, and then type X. You will now see the last prompt to be:

 *Types Control.Monad.Writer Control.Monad Data.Functor Control.Applicative
 Data.Monoid> -- bbbbbbbbbbbbX-- bbbbbbbbbbbbbbbbb
 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

 8. If you press Enter, you will find out that prompt was actually (without
 line breaks):

 X-- bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb



 I tried resizing the terminal window to 45 chars to make the lines above
 shorter; I imported Data.Monoid and Data.Functor in a new GHCi. The prompt
 contained garbage, most likely badly wrapped escape codes. See attachment.

 As both likely are a single bug in disguise, I include both reports in
 this ticket.

 Creating a test case for whether things actually work in a terminal might
 be difficult, but creating test for whether things get wrapped correctly
 (and not testing how things work out in a terminal) should be simple if
 annoying.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9364>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list