From 93c1d1dd361f7cfe5613894e536223deaefc34e3 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 7 Oct 2011 11:47:40 -0500 Subject: [PATCH] add a 'find longest line' menu item to the edit menu --- collects/drracket/private/frame.rkt | 1 + collects/framework/private/frame.rkt | 35 +++++++++++++++++++ .../private/english-string-constants.rkt | 3 +- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/collects/drracket/private/frame.rkt b/collects/drracket/private/frame.rkt index db4ee0ae44..e8b7b44c75 100644 --- a/collects/drracket/private/frame.rkt +++ b/collects/drracket/private/frame.rkt @@ -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) diff --git a/collects/framework/private/frame.rkt b/collects/framework/private/frame.rkt index 784580895c..37928b236a 100644 --- a/collects/framework/private/frame.rkt +++ b/collects/framework/private/frame.rkt @@ -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<%>))) diff --git a/collects/string-constants/private/english-string-constants.rkt b/collects/string-constants/private/english-string-constants.rkt index 1c8233502c..95aaf54a6b 100644 --- a/collects/string-constants/private/english-string-constants.rkt +++ b/collects/string-constants/private/english-string-constants.rkt @@ -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")