Fix bash completion for package split.
This commit is contained in:
parent
9b3bb96648
commit
f318779011
33
pkgs/plt-services/meta/contrib/completion/list-collects.rkt
Normal file
33
pkgs/plt-services/meta/contrib/completion/list-collects.rkt
Normal file
|
@ -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))
|
|
@ -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") )
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user