diff options
Diffstat (limited to 'ocaml')
| -rw-r--r-- | ocaml/ftag-add-dir-rec.ml | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/ocaml/ftag-add-dir-rec.ml b/ocaml/ftag-add-dir-rec.ml index 6c4a02d..3a325b6 100644 --- a/ocaml/ftag-add-dir-rec.ml +++ b/ocaml/ftag-add-dir-rec.ml @@ -15,42 +15,49 @@ let list_dir_rec dir = with End_of_file -> Unix.closedir handle; acc in list_dir_rec_intern (Unix.opendir dir) dir [];; -let remove_duplicates list pred = - let rec remove_duplicates_intern list pred acc = - match list with - | head :: tail -> if pred head tail - then remove_duplicates_intern tail pred acc - else remove_duplicates_intern tail pred (head :: acc) - | [] -> acc - in remove_duplicates_intern list pred [];; - let basename_equal file0 file1 = String.equal (Filename.basename file0) (Filename.basename file1);; -let rec basename_equal_pred file file_list = +(* Check whether a file with the same basename as FILE exists in FILE_LIST. *) +let rec basename_equal_in file file_list = match file_list with | head :: tail -> if basename_equal file head then true - else basename_equal_pred file tail + else basename_equal_in file tail | [] -> false;; +let remove_duplicates list = + let rec remove_duplicates_intern list acc = + match list with + | head :: tail -> if basename_equal_in head tail + then remove_duplicates_intern tail acc + else remove_duplicates_intern tail (head :: acc) + | [] -> acc + in remove_duplicates_intern list [];; + let prompt_yes_or_no () = print_endline " [Y/n]"; - let input = try read_line () with End_of_file -> "No" in - if String.starts_with "N" input || String.starts_with "N" input + let input = try read_line () with End_of_file -> "N" in + if String.starts_with "N" input || String.starts_with "n" input then false else true;; let ftag_add file = - Unix.system (Filename.quote_command "ftag" ["file"; "add"; file]) + Filename.quote_command "ftag" ["file"; "add"; file] + |> Unix.system + |> ignore;; let rec prompt_and_add file = + Printf.printf "Add \"%s\" to ftag database ?" file; if prompt_yes_or_no () - then ftag_add head;; - -let files = Array.to_list Sys.argv - |> List.tl - |> List.map list_dir_rec - |> List.flatten - |> remove_duplicates - |> List.map prompt_and_add;; + then ftag_add file;; + +print_endline "===start==="; + +Array.to_list Sys.argv +(* |> List.map print_endline *) +|> List.tl +|> List.map list_dir_rec +|> List.flatten +|> remove_duplicates +|> List.map prompt_and_add;; |
