diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/find-completions.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/find-completions.rkt index e6462fc239..6f9e642cdd 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/find-completions.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/find-completions.rkt @@ -16,7 +16,7 @@ (provide (contract-out [alternate-racket-clcl/clcp (-> path-string? (values lcl/c lcp/c))] - [find-completions (->* (string?) + [find-completions (->* (string? path-string?) (#:alternate-racket (or/c #f path-string? (list/c lcl/c lcp/c))) @@ -26,13 +26,32 @@ (or (member x '("compiled")) (regexp-match #rx"~$" x))) -(define (find-completions string #:alternate-racket [alternate-racket #f]) - (find-completions/internal string - (find-all-collection-dirs alternate-racket) - directory-list - directory-exists?)) +(define (find-completions str the-current-directory #:alternate-racket [alternate-racket #f]) + (cond + [(and (not (equal? str "")) (equal? (string-ref str 0) #\")) + (define no-quotes-string + (cond + [(equal? (string-ref str (- (string-length str) 1)) #\") + (define no-last-quote (substring str 0 (- (string-length str) 1))) + (cond + [(equal? "" no-last-quote) + no-last-quote] + [else + (substring no-last-quote 1 (string-length no-last-quote))])] + [else + (substring str 1 (string-length str))])) + (define segments (regexp-split #rx"/" no-quotes-string)) + (find-completions/internal segments + (list (list "" the-current-directory)) + directory-list + directory-exists?)] + [else + (find-completions-collection/internal str + (find-all-collection-dirs alternate-racket) + directory-list + directory-exists?)])) -(define (find-completions/internal string collection-dirs dir->content is-dir?) +(define (find-completions-collection/internal string collection-dirs dir->content is-dir?) (define segments (regexp-split #rx"/" string)) (define first-candidates (cond @@ -41,8 +60,11 @@ (define reg (regexp (string-append "^" (regexp-quote (car segments))))) (filter (λ (line) (regexp-match reg (list-ref line 0))) collection-dirs)])) + (find-completions/internal (cdr segments) first-candidates dir->content is-dir?)) + +(define (find-completions/internal segments first-candidates dir->content is-dir?) (define unsorted - (let loop ([segments (cdr segments)] + (let loop ([segments segments] [candidates first-candidates]) (cond [(null? segments) candidates] @@ -178,7 +200,7 @@ (define/contract find-completions/c (-> string? (listof (list/c string? path?)) (-> path? (listof path?)) (-> path? boolean?) (listof (list/c string? path?))) - find-completions/internal) + find-completions-collection/internal) (define coll-table `(("racket" ,(string->path "/plt/pkgs/compatibility-pkgs/compatibility-lib/racket")) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt index 2aaea31626..76ce3087b9 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/frame.rkt @@ -819,7 +819,7 @@ (handler:open-file) #t))) (new menu-item% - [label (string-constant open-collection-path)] + [label (string-constant open-require-path)] [shortcut #\o] [shortcut-prefix (cons 'shift (get-default-shortcut-prefix))] [parent file-menu] diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/get-module-path.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/get-module-path.rkt index 6e147318d6..e175782555 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/get-module-path.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/get-module-path.rkt @@ -12,7 +12,8 @@ (->i () (#:init [init string?] #:pref [pref symbol?] - #:dir? [dir? boolean?]) + #:dir? [dir? boolean?] + #:current-directory [current-directory (or/c path-string? #f)]) [res (dir?) (if (or (not dir?) (unsupplied-arg? dir?)) @@ -21,8 +22,10 @@ (define (get-module-path-from-user #:init [init-value ""] #:pref [pref-sym #f] - #:dir? [dir? #f]) - + #:dir? [dir? #f] + #:current-directory + [_the-current-directory #f]) + (define the-current-directory (or _the-current-directory (current-directory))) (define dlg% (class dialog% (define/override (on-subwindow-char receiver event) @@ -144,6 +147,7 @@ (get-clcl/clcp))) (define the-completions (find-completions (send tf get-value) + the-current-directory #:alternate-racket alt-racket-info)) (for ([i (in-list (if dir? (filter (λ (i) (directory-exists? (list-ref i 1))) diff --git a/pkgs/drracket-pkgs/drracket/drracket/private/unit.rkt b/pkgs/drracket-pkgs/drracket/drracket/private/unit.rkt index ce58446c7f..6a186b8933 100644 --- a/pkgs/drracket-pkgs/drracket/drracket/private/unit.rkt +++ b/pkgs/drracket-pkgs/drracket/drracket/private/unit.rkt @@ -3752,7 +3752,7 @@ [define/override file-menu:between-open-and-revert (lambda (file-menu) (new menu:can-restore-menu-item% - [label (string-constant open-collection-path)] + [label (string-constant open-require-path)] [shortcut (if (member 'shift (get-default-shortcut-prefix)) #f #\o)] [shortcut-prefix (if (member 'shift (get-default-shortcut-prefix)) (get-default-shortcut-prefix) @@ -3776,7 +3776,11 @@ (get-module-path-from-user #:init (or editing-module-path (preferences:get 'drracket:open-module-path-last-used)) - #:pref 'drracket:open-module-path-last-used)) + #:pref 'drracket:open-module-path-last-used + #:current-directory + (and editing-path + (let-values ([(base name dir?) (split-path editing-path)]) + base)))) (when pth (handler:edit-file pth)))]) (super file-menu:between-open-and-revert file-menu) (make-object separator-menu-item% file-menu))] diff --git a/pkgs/drracket-pkgs/drracket/scribblings/drracket/menus.scrbl b/pkgs/drracket-pkgs/drracket/scribblings/drracket/menus.scrbl index b785c30e4d..53facf77ae 100644 --- a/pkgs/drracket-pkgs/drracket/scribblings/drracket/menus.scrbl +++ b/pkgs/drracket-pkgs/drracket/scribblings/drracket/menus.scrbl @@ -24,11 +24,12 @@ @item{@defmenuitem{Open Recent} Lists recently opened files. Choosing one of them opens that file for editing.} - @item{@defmenuitem{Open Collection Path...} Opens a dialog where you + @item{@defmenuitem{Open Require Path...} Opens a dialog where you can enter in a @racket[require]-like module path (e.g., - @litchar{racket/base.rkt} or @litchar{data/splay-tree.rkt}) + @litchar{racket/base.rkt} or @litchar{data/splay-tree.rkt} + or @litchar{"x.rkt"}) and edit the corresponding files in the @tech{definitions window}.} - + @item{@defmenuitem{Install PLT File...} Opens a dialog asking for the location of the @filepath{.plt} file (either on the local disk or on the web) and installs the contents of the 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 615ac40c57..9251821faa 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 @@ -1900,7 +1900,7 @@ please adhere to these guidelines: " either abort the current one or wait for it to finish.") ;; open a file via a collection path (new "Open" menu item in DrRacket) - (open-collection-path "Open Collection Path...") + (open-require-path "Open Require Path...") (enter-subcollection "Enter subcollection") ; button in new dialog (path-to-racket-binary "Path to binary") (use-a-different-racket "Use a different racket") diff --git a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/french-string-constants.rkt b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/french-string-constants.rkt index 6edeba72f7..56c2b39d2d 100644 --- a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/french-string-constants.rkt +++ b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/french-string-constants.rkt @@ -1893,7 +1893,7 @@ " abandonnez l'installation ou la mise à jour actuelle, ou attendez-en la fin.") ;; open a file via a collection path (new "Open" menu item in DrRacket) - (open-collection-path "Ouvrir un chemin de répertoires pour une collection...") + ;; now obsolete; replaced by open-require-path (open-collection-path "Ouvrir un chemin de répertoires pour une collection...") (enter-subcollection "Spécifier une sous-collection") ; button in new dialog (path-to-racket-binary "Chemin de répertoires vers le fichier binaire") (use-a-different-racket "Utiliser une version de racket différente") diff --git a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/german-string-constants.rkt b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/german-string-constants.rkt index ee1efa6e52..4b9654145a 100644 --- a/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/german-string-constants.rkt +++ b/pkgs/string-constants-pkgs/string-constants-lib/string-constants/private/german-string-constants.rkt @@ -1777,7 +1777,7 @@ " Brechen Sie entweder den laufenden Prozess ab oder warten, bis er fertig ist.") ;; open a file via a collection path (new "Open" menu item in DrRacket) - (open-collection-path "Collection-Pfad öffnen...") + ;; now obsolete; replaced by open-require-path (open-collection-path "Collection-Pfad öffnen...") (enter-subcollection "Sub-Collection betreten") ; button in new dialog (path-to-racket-binary "Pfad zur Programmdatei")