From f3187790115d35815886b56667abd4562a06de14 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Tue, 9 Jul 2013 14:27:15 -0400 Subject: [PATCH] Fix bash completion for package split. --- .../meta/contrib/completion/list-collects.rkt | 33 +++++++++++++++++++ .../contrib/completion/racket-completion.bash | 13 ++++---- 2 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 pkgs/plt-services/meta/contrib/completion/list-collects.rkt diff --git a/pkgs/plt-services/meta/contrib/completion/list-collects.rkt b/pkgs/plt-services/meta/contrib/completion/list-collects.rkt new file mode 100644 index 0000000000..d3f7e1abea --- /dev/null +++ b/pkgs/plt-services/meta/contrib/completion/list-collects.rkt @@ -0,0 +1,33 @@ +#lang racket/base +(require racket/string setup/dirs setup/link) + +(define (add-directory-collections c s) + (if (directory-exists? c) + (for/fold ([s s]) ([p (in-list (directory-list c))] + #:when (directory-exists? (build-path c p)) + #:when (regexp-match? #rx#"^[a-zA-Z_%+-]*$" p)) + (hash-set s (path-element->string p) #t)) + s)) + +(define (links* m root?) + (case m + [(user) (links #:user? #t #:root? root?)] + [(shared) (links #:shared? #t #:root? root?)] + [else (links #:file m #:root? root?)])) + +(define (get-all-top-level-collections) + (define link-modes (list* 'user 'shared (get-links-search-files))) + + (let* ([s (hash)] + [s (for/fold ([s s]) ([c (in-list + (current-library-collection-paths))]) + (add-directory-collections c s))] + [s (for*/fold ([s s]) ([m (in-list link-modes)] + [l (in-list (links* m #f))]) + (hash-set s l #t))] + [s (for*/fold ([s s]) ([m (in-list link-modes)] + [c (in-list (links* m #t))]) + (add-directory-collections c s))]) + (hash-keys s))) + +(for-each displayln (get-all-top-level-collections)) diff --git a/pkgs/plt-services/meta/contrib/completion/racket-completion.bash b/pkgs/plt-services/meta/contrib/completion/racket-completion.bash index 0df078ddf1..f48be624b8 100644 --- a/pkgs/plt-services/meta/contrib/completion/racket-completion.bash +++ b/pkgs/plt-services/meta/contrib/completion/racket-completion.bash @@ -110,19 +110,18 @@ _raco_help() { COMPREPLY=( $(compgen -W "$_raco_cmds" -- "$cur") ) } -_racket_collects_dirs=() +_racket_collects=() _complete_collects() { local cur="$1" - if [[ "${#_racket_collects_dirs[@]}" -eq 0 ]]; then - _racket_collects_dirs=( - $( $_racket_cmd -e \ - '(for-each displayln (current-library-collection-paths))' ) + if [[ "${#_racket_collects[@]}" -eq 0 ]]; then + _racket_collects=( + $( $_racket_cmd -e '(require meta/contrib/completion/list-collects)' ) ) fi local wordlist="" - for dir in "${_racket_collects_dirs[@]}"; do - wordlist="$wordlist $(for x in $(compgen -d "$dir/"); do basename "$x"; done)" + for dir in "${_racket_collects[@]}"; do + wordlist="$wordlist $dir" done COMPREPLY=( $(compgen -W "$wordlist" -- "$cur") ) }