Just now, Robby Findler wrote: > Would it be possible to base a meta-q like binding on this and be > able to use it when editing scribble files in DrRacket? (That would > be totally awesome if it were!)
Ah, I didn't think about it... Yes, it should be very easy to do that -- you just need to decide which style to use... For example, if you want to do the thing that auctex is doing: |blah blah blah blah @foo{blah blah blah blah blah | blah blah blah blah blah blah blah blah blah | blah blah.} Then the work that you need to do is get the string that is to be wrapped, and you need two numbers -- the width of the first line and the width of the rest. In the above case I'm using a width of 50 (after the "|" prefix for email formatting), which leaves me with 25 characters for the first line, and 48 for the rest (50 minus 2 for the indentation). So now you use (wrap-line text '(25 . 48)) and you get back a list of lines which is now easy to slap together with the indentation: (string-append* (add-between (wrap-line text '(25 . 48)) "\n ")) And that's about it. Some notes: * You can also do reflowing of semicolon comments in a similar way: - find the consistent prefix using #rx"^ *;+ *" - combine the following strings to one line - wrap with the width minus the prefix width - recombine with the prefix and newlines between the strings * See also `do-wrapped-output' in "collects/xrepl/xrepl.rkt" -- it does something similar, and even parameterized on the prefix etc. (But it's intended to wrap each line in an output of a thunk, which is most of the work there.) * I guess that when there's a markdown language we'll need a more sophisticated rewrapper. For example, something that can do this bulletized paragraph, possibly including comment characters and more. It should be easy to build something that handles all of that. (For example, I'm using something in Emacs that knows about things like "|" that should be repeated on every line, and things like "*" or "4.".) * A quick explanation on the width argument to `wrap-line': it's either a number, or an improper list of numbers -- one number for each line, and the last for the rest. (Improper lists make sense here, because you can't tell in advance how many lines you'll have.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________ Racket Developers list: http://lists.racket-lang.org/dev