add a 'find longest line' menu item to the edit menu

original commit: 93c1d1dd361f7cfe5613894e536223deaefc34e3
This commit is contained in:
Robby Findler 2011-10-07 11:47:40 -05:00
parent 466e7130ab
commit ccaa37de24

View File

@ -1507,6 +1507,41 @@
(mixin (-editor<%>) (text<%>)
(define/override (get-editor<%>) (class->interface text%))
(init (filename #f) (editor% text:keymap%))
(inherit get-editor)
(define/override (edit-menu:between-find-and-preferences edit-menu)
(when (add-find-longest-line-menu-item?)
(new menu-item%
[parent edit-menu]
[label (string-constant find-longest-line)]
[callback
(λ (x y)
(define ed (get-editor))
(define (line-len p)
(define ans
(- (send ed paragraph-end-position p)
(send ed paragraph-start-position p)))
ans)
(when ed
(let loop ([p (- (send ed last-paragraph) 1)]
[longest-size (line-len (send ed last-paragraph))]
[longest (send ed last-paragraph)])
(cond
[(= p -1)
(send ed set-position
(send ed paragraph-start-position longest)
(send ed paragraph-end-position longest))]
[else
(define this-size (line-len p))
(cond
[(<= longest-size this-size)
(loop (- p 1) this-size p)]
[else
(loop (- p 1) longest-size longest)])]))))]))
(super edit-menu:between-find-and-preferences edit-menu))
(define/public (add-find-longest-line-menu-item?) #t)
(super-new (filename filename) (editor% editor%))))
(define pasteboard<%> (interface (-editor<%>)))