I could be missing something, but I think a filename completion
procedure (not the DrRacket integration part) might be a doable exercise
for a budding Racket programmer, so long as they already have a basic
familiarity with using the filesystem and shell as a normal user.
Point them to the "Paths" and "Filesystem" sections of the Racket
Reference, and tell them they just need a few procedures from each
(probably including `split-path` and `directory-list`).
They might want to first make a procedure like this:
(path-completions path-or-string?)
==> (listof completion-string)
And then make a second procedure, which uses the first procedure, then
adds an additional step, to let it return two values instead of one:
(path-completion-prefix-and-suffixes path-or-string?)
==> (values prefix-string-shared-by-all-completions
(listof completion-remainder-after-any-shared-prefix-string))
Then, when a user is interactively doing completion (like when they hit
the Tab key in a shell), the first value returned by that second
procedure is what would get added automatically to the path. The second
value is the list of possible completions following that shared prefix.
There are a few special cases to consider, but most should be easy to
recognize and work through, just by thinking methodically about each
point in your code. For example, what do you do when the input path is
relative, or when when there are no completions, or when the path is
invalid or nonexistent or permissions-inaccessible, or when your path is
already complete. One case that's not obvious from the code: if the
path is already complete and is a directory, a shell usually completes a
directory separator, so consider whether you want to do that.
To make unit tests for these, they'll have to also look at more of the
"Filesystem" section of the Racket Reference, to create and remove files
and directories.
(I think wrapping a shell process, robustly, is much more difficult.)
--
You received this message because you are subscribed to the Google Groups "Racket
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.