aboutsummaryrefslogtreecommitdiff
path: root/ocaml
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml')
-rw-r--r--ocaml/ftag-add-dir-rec.ml51
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;;