From cda5c12f6c9e1c0f7b406cb1496fb766070539b9 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 10 Nov 2013 20:43:00 -0600 Subject: [PATCH] add a menu item to add (the appropriate) racket/bin to the users' path under mac os x it is in the help menu, but I'm not sure that's really the best place --- .../drracket/drracket/private/frame.rkt | 72 +++++++++++++++++++ .../private/english-string-constants.rkt | 6 +- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt index dc7d4721c9..a53c226129 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt @@ -19,6 +19,74 @@ #:wrap-terminal-action wrap-terminal-action #:package-to-offer package-to-offer))) +(module add-racket-to-macosx-path racket/base + (require string-constants + racket/system + racket/gui/base + racket/class) + + (provide add-menu-macosx-path-item) + + (define authopen "/usr/libexec/authopen") + (define paths.d "/etc/paths.d") + + (define (add-menu-macosx-path-item menu) + (when (equal? (system-type) 'macosx) + (define binary-dir (find-system-path 'exec-file)) + (when (relative-path? binary-dir) + (set! binary-dir + (simplify-path (build-path (find-system-path 'orig-dir) binary-dir)))) + (define-values (base name dir?) (split-path binary-dir)) + (define bin-dir + (cond + [(equal? (path->string name) "DrRacket") + (let loop ([i 3] [pth base]) + (cond + [(zero? i) (simplify-path (build-path pth "bin"))] + [else + (define-values (base name dir?) (split-path pth)) + (loop (- i 1) base)]))] + [(equal? (path->string name) "drracket") + base] + [else #f])) + (when bin-dir + (when (file-exists? authopen) + (when (directory-exists? paths.d) + (define (add-racket/bin-to-path) + (define sp (open-output-string)) + (define succeeded? + (parameterize ([current-input-port + (open-input-string + (format "~a\n" bin-dir))] + [current-output-port sp] + [current-error-port sp]) + (system* authopen "-c" "-w" (path->string + (build-path + paths.d + "racket"))))) + (define output (get-output-string sp)) + (cond + [(and (equal? output "") succeeded?) + (message-box (string-constant drracket) + (string-constant added-racket/bin-to-path))] + [succeeded? + (message-box (string-constant drracket) + (string-append + (string-constant added-racket/bin-to-path) + "\n\n" output))] + [else + (message-box (string-constant drracket) + (string-append + (string-constant adding-racket/bin-to-path-failed) + (if (equal? output "") + "" + (string-append "\n\n" output))))]) + (void)) + (new menu-item% + [label (string-constant add-racket/bin-to-path)] + [parent menu] + [callback (λ (x y) (add-racket/bin-to-path))]))))))) + (require string-constants racket/match racket/class @@ -837,6 +905,10 @@ [parent saved-bug-reports-menu] [label (string-constant disacard-all-saved-bug-reports)] [callback (λ (x y) (discard-all-saved-bug-reports))])]))))]) + (add-menu-macosx-path-item menu) (drracket:app:add-language-items-to-help-menu menu))) + + +(require (submod "." add-racket-to-macosx-path)) \ No newline at end of file diff --git a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/english-string-constants.rkt b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/english-string-constants.rkt index 40f8fb06f5..994690b84e 100644 --- a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/english-string-constants.rkt +++ b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/english-string-constants.rkt @@ -1890,5 +1890,9 @@ please adhere to these guidelines: (enter-subcollection "Enter subcollection") ; button in new dialog (path-to-racket-binary "Path to binary") (use-a-different-racket "Use a different racket") - + + ;; adding racket/bin to the path; only under mac os x + (added-racket/bin-to-path "Added racket/bin to PATH") + (adding-racket/bin-to-path-failed "Attempt to add racket/bin to PATH failed") + (add-racket/bin-to-path "Add racket/bin to PATH") ;; menu item label )