[haskeline] #78: control characters in prompt mess up width calculations

haskeline haskeline at projects.haskell.org
Sat Aug 21 12:37:46 EDT 2010

#78: control characters in prompt mess up width calculations
Reporter:  judah   |        Owner:  judah   
    Type:  defect  |       Status:  assigned
Priority:  minor   |    Milestone:          
 Version:  0.6     |   Resolution:          
Keywords:          |  
Changes (by judah):

  * owner:  => judah
  * status:  new => assigned


 Thanks for your suggestions.  I originally balked at adding what's
 essentially a platform-specific hack; but you're both right that it's
 better to at least work with the above cases.  So I've applied the
 following patch:

 Sat Aug 21 09:18:37 PDT 2010  Judah Jacobson <judah.jacobson at gmail.com>
   * #78: If "\ESC...\STX" or "\SOH\ESC...\STX" appears in the prompt,
 treat it as a zero-width grapheme.
     hunk ./System/Console/Haskeline/LineState.hs 109
     +        -- Minor hack: "\ESC...\STX" or "\SOH\ESC...\STX", where
 "\ESC..." is some
     +        -- control sequence (e.g., ANSI colors), is represented as a
     +        -- of zero length with '\ESC' as the base character.
     +        -- Note that this won't round-trip correctly with
     +        -- In practice, however, that's fine since control characters
 can only occur
     +        -- in the prompt.
     +        mkString ('\SOH':cs) = stringToGraphemes cs
     +        mkString ('\ESC':cs) | (ctrl,'\STX':rest) <- break (=='\STX')
     +                    = Grapheme '\ESC' ctrl : stringToGraphemes rest
 Please let me know if that doesn't work for you, or if the width
 calculations don't behave correctly.

 I'll document this on the wiki before releasing the next version.

Ticket URL: <http://trac.haskell.org/haskeline/ticket/78#comment:8>
haskeline <http://example.org/>
My example project

More information about the Haskeline mailing list