Shells in OCaml
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

Basic tab completion

Stock linenoise does not have mid-tab completion, we will need to find a
patch somewhere for that.

+24
+24
src/lib/interactive.ml
··· 29 29 (Fpath.normalize @@ S.cwd state |> subst_tilde |> Fpath.to_string); 30 30 Format.flush_str_formatter () 31 31 32 + let file_path_completitions () = 33 + let complete path completions = 34 + let completions from_path = 35 + match (Unix.stat from_path).st_kind with 36 + | S_DIR -> 37 + let entries = Sys.readdir from_path in 38 + Array.iter 39 + (fun e -> 40 + LNoise.add_completion completions (Filename.concat from_path e)) 41 + entries 42 + | S_REG -> LNoise.add_completion completions path 43 + | _ -> () 44 + | exception Unix.Unix_error (Unix.ENOENT, _, _) -> () 45 + in 46 + match Unix.(stat path).st_kind with 47 + | exception Unix.Unix_error (Unix.ENOENT, _, _) -> 48 + let dirname = Filename.dirname path in 49 + completions dirname 50 + | S_DIR -> completions path 51 + | _ -> () 52 + in 53 + LNoise.set_completion_callback complete 54 + 32 55 let run ?(prompt = default_prompt) initial_ctx = 33 56 Sys.set_signal Sys.sigttou Sys.Signal_ignore; 34 57 Sys.set_signal Sys.sigttin Sys.Signal_ignore; 35 58 Sys.set_signal Sys.sigtstp Sys.Signal_ignore; 59 + file_path_completitions (); 36 60 let rec loop (ctx : Eval.ctx Exit.t) = 37 61 Option.iter (Fmt.epr "%s%!") 38 62 (S.lookup (Exit.value ctx).state ~param:"PS1"