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

This commit is contained in:
Robby Findler 2011-10-07 11:47:40 -05:00
parent e7197c4129
commit 93c1d1dd36
3 changed files with 38 additions and 1 deletions

View File

@ -243,6 +243,7 @@
(new separator-menu-item% (parent menu)))
(define/override (edit-menu:between-find-and-preferences menu)
(super edit-menu:between-find-and-preferences menu)
(make-object separator-menu-item% menu)
(let ([keybindings-on-demand
(λ (menu-item)

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<%>)))

View File

@ -929,7 +929,8 @@ please adhere to these guidelines:
;;; edit menu
(split-menu-item-label "&Split")
(collapse-menu-item-label "C&ollapse")
(find-longest-line "Find Longest Line")
;;; language menu
(language-menu-name "&Language")