I'm working on emacs support for export-completions and I've encountered an issue. Directories in 'export-completions' output do not include trailing slashes.
``` bash-5.3$ ls test testdir/ testfile.txt bash-5.3$ ls test 3 test 3:7 test testdir testfile.txt ``` When using tab completion in emacs, instead of the expected behavior of automatically appending a / after completing a path to a directory, it only completes the directory name itself. Instead of ``` $ mydirectory/subdi <TAB> $ mydirectory/subdir/ ``` You get ``` $ mydirectory/subdi <TAB> $ mydirectory/subdir ``` And have to manually append a / before continuing. Emacs can't figure out whether a given completion is a directory or not becuase it doesn't know the value of 'rl_filename_completion_desired'. >From looking through the completions display code, it seems like 'print_filename' is what adds these slashes when displaying completions. Changing '_rl_export_completions' to use that instead of fprintf seems to solve the problem after some quick testing. See below diff. diff --git a/lib/readline/complete.c b/lib/readline/complete.c index 473f04db..4b8e30d2 100644 --- a/lib/readline/complete.c +++ b/lib/readline/complete.c @@ -3065,8 +3065,10 @@ _rl_export_completions (char **matches, char *text, int start, int end) fprintf (rl_outstream, "%zd\n", len); fprintf (rl_outstream, "%s\n", text); fprintf (rl_outstream, "%d:%d\n", start, end); /* : because it's not a radix character */ - for (i = 0; i < len; i++) - fprintf (rl_outstream, "%s\n", matches[i]); + for (i = 0; i < len; i++) { + print_filename (matches[i], matches[i], 0); + fprintf (rl_outstream, "\n"); + } fflush (rl_outstream); }