diff --git a/collects/drracket/private/main.rkt b/collects/drracket/private/main.rkt index 22fc130d27..2df9e9e1e4 100644 --- a/collects/drracket/private/main.rkt +++ b/collects/drracket/private/main.rkt @@ -118,6 +118,7 @@ (drr:set-default 'drracket:module-language-first-line-special? #t boolean?) (drr:set-default 'drracket:defns-popup-sort-by-name? #f boolean?) +(drr:set-default 'drracket:show-line-numbers? #f boolean?) (drr:set-default 'drracket:toolbar-state '(#f . top) @@ -299,14 +300,15 @@ (preferences:add-general-checkbox-panel) (let ([make-check-box - (λ (pref-sym string parent) + (λ (pref-sym string parent [extra-functionality #f]) (let ([q (make-object check-box% string parent (λ (checkbox evt) - (preferences:set - pref-sym - (send checkbox get-value))))]) + (define value (send checkbox get-value)) + (preferences:set pref-sym value) + (when extra-functionality + (extra-functionality value))))]) (preferences:add-callback pref-sym (λ (p v) (send q set-value v))) (send q set-value (preferences:get pref-sym))))]) (preferences:add-to-general-checkbox-panel @@ -325,7 +327,7 @@ (make-check-box 'drracket:defs/ints-horizontal (string-constant interactions-beside-definitions) editor-panel) - + (make-check-box 'drracket:module-language-first-line-special? (string-constant ml-always-show-#lang-line) editor-panel))) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index dfbe5d75b0..8f425c4559 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -447,16 +447,12 @@ module browser threading seems wrong. (set! definitions-text% (make-definitions-text%))) definitions-text%))) - ;; TODO: get this from the configuation file - ;; also add a menu entry that sets this property dynamically - (define (show-line-numbers?) #f) - ;; links two editor's together so they scroll in tandem (define (linked-scroller %) (class % (super-new) (field [linked #f]) - (init-field line-numbers?) + (init-field [line-numbers? #f]) (inherit insert line-start-position line-end-position) @@ -491,13 +487,17 @@ module browser threading seems wrong. (inner (void) after-delete start length)) (define/augment (after-insert start length) + (update-numbers) + #; (when (not line-numbers?) - #; - (printf "Send ~a linked ensure-length ~a\n" linked (send this last-line)) (when linked (send linked ensure-length (send this last-line)))) (inner (void) after-insert start length)) + (define/public (update-numbers) + (when (and (not line-numbers?) linked) + (send linked ensure-length (send this last-line)))) + (define/public (ensure-length length) (define lines (send this last-line)) #; @@ -1452,6 +1452,12 @@ module browser threading seems wrong. (λ (l) (remq execute-warning-panel l))) (send execute-warning-canvas set-message #f))]))) + (define (show-line-numbers?) + (preferences:get 'drracket:show-line-numbers?)) + + (define/public (show-line-numbers! show) + (re-initialize-definitions-canvas)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; logging @@ -2593,7 +2599,9 @@ module browser threading seems wrong. (send resizable-panel begin-container-sequence) ;; this might change the unit-window-size-percentage, so save/restore it - (send resizable-panel change-children (λ (l) (immediate-children resizable-panel new-children))) + (send resizable-panel change-children + (λ (old) + (immediate-children resizable-panel new-children))) (preferences:set 'drracket:unit-window-size-percentage p) ;; restore preferred interactions/definitions sizes @@ -2770,28 +2778,38 @@ module browser threading seems wrong. (define (create-definitions-canvas line-numbers?) (define (with-line-numbers) - (define line-numbers-text (new (linked-scroller (uneditable scheme:text%)) - [line-numbers? #t])) - (define shared-pane (new horizontal-pane% [parent resizable-panel])) - (define line-canvas (new editor-canvas% - [parent shared-pane] - [style '(hide-vscroll hide-hscroll)] - [editor line-numbers-text] - [stretchable-width #f] - [min-width 60])) - (send definitions-text link-to! line-numbers-text) - (send line-numbers-text link-to! definitions-text) - (new (drracket:get/extend:get-definitions-canvas) - [parent shared-pane] - [editor definitions-text])) + (define line-numbers-text (new (linked-scroller (uneditable scheme:text%)) + [line-numbers? #t])) + (define shared-pane (new horizontal-panel% [parent resizable-panel])) + (define line-canvas (new editor-canvas% + [parent shared-pane] + [style '(hide-vscroll hide-hscroll)] + [editor line-numbers-text] + [stretchable-width #f] + [min-width 60])) + (send definitions-text link-to! line-numbers-text) + (send line-numbers-text link-to! definitions-text) + (new (drracket:get/extend:get-definitions-canvas) + [parent shared-pane] + [editor definitions-text])) (define (without-line-numbers) - (new (drracket:get/extend:get-definitions-canvas) - [parent resizable-panel] - [editor definitions-text])) + (send definitions-text link-to! #f) + (new (drracket:get/extend:get-definitions-canvas) + [parent resizable-panel] + [editor definitions-text])) (if line-numbers? (with-line-numbers) (without-line-numbers))) + (define/private (re-initialize-definitions-canvas) + (begin-container-sequence) + (set! definitions-canvas (create-definitions-canvas + (show-line-numbers?))) + (set! definitions-canvases (list definitions-canvas)) + (update-shown) + (send (send definitions-canvas get-editor) update-numbers) + (end-container-sequence)) + (define/private (initialize-definitions-canvas) (unless definitions-canvas (set! definitions-canvas (create-definitions-canvas @@ -2831,7 +2849,7 @@ module browser threading seems wrong. ;; creates a new tab and updates the GUI for that new tab (define/private create-new-tab (lambda ([filename #f]) - (let* ([defs (new (drracket:get/extend:get-definitions-text) [line-numbers? #f])] + (let* ([defs (new (drracket:get/extend:get-definitions-text))] [tab-count (length tabs)] [new-tab (new (drracket:get/extend:get-tab) (defs defs) @@ -3897,6 +3915,14 @@ module browser threading seems wrong. #f has-editor-on-demand) (register-capability-menu-item 'drscheme:special:insert-lambda insert-menu)) + + (new menu:can-restore-menu-item% + [label (string-constant show-line-numbers)] + [parent (get-show-menu)] + [callback (lambda (x y) + (define value (preferences:get 'drracket:show-line-numbers?)) + (preferences:set 'drracket:show-line-numbers? (not value)) + (show-line-numbers! (not value)))]) (make-object separator-menu-item% (get-show-menu)) @@ -3933,8 +3959,7 @@ module browser threading seems wrong. ; ; - (define definitions-text (new (drracket:get/extend:get-definitions-text) - [line-numbers? #f])) + (define definitions-text (new (drracket:get/extend:get-definitions-text))) ;; tabs : (listof tab) (define tabs (list (new (drracket:get/extend:get-tab) diff --git a/collects/string-constants/english-string-constants.rkt b/collects/string-constants/english-string-constants.rkt index 79b6c90dbd..b6f0328f91 100644 --- a/collects/string-constants/english-string-constants.rkt +++ b/collects/string-constants/english-string-constants.rkt @@ -446,8 +446,9 @@ please adhere to these guidelines: (online-coloring-active "Color syntax interactively") (open-files-in-tabs "Open files in separate tabs (not separate windows)") (show-interactions-on-execute "Automatically open interactions window when running a program") - (switch-to-module-language-automatically "Automatically switch to the module language when opening a module") - (interactions-beside-definitions "Put the interactions window beside the definitions window") ;; in preferences, below the checkbox one line above this one + (switch-to-module-language-automatically "Automatically switch to the module language when opening a module") + (interactions-beside-definitions "Put the interactions window beside the definitions window") ;; in preferences, below the checkbox one line above this one + (show-line-numbers "Show line numbers next to the definitions window") (limit-interactions-size "Limit interactions size") (background-color "Background Color") (default-text-color "Default text") ;; used for configuring colors, but doesn't need the word "color"