Parcourir la source

Add feature : now put current command in title

 - Use quite dirty code
 - Clean up code
Leo il y a 10 ans
Parent
commit
d28f04710c
3 fichiers modifiés avec 73 ajouts et 27 suppressions
  1. 18 16
      src/exec_cmd.ml
  2. 9 11
      src/tmp_file.ml
  3. 46 0
      src/tmp_file.mli

+ 18 - 16
src/exec_cmd.ml

@@ -36,29 +36,31 @@
 
 open Core.Std;;
 
+(* Function allowing to set the title of the current terminal windows
+ * XXX Maybe better in some lib *)
+(* TODO Allow to set it in configuration file *)
+let set_title new_title =
+    (* Use echo command *)
+    Sys.command (sprintf "echo -en \"\\033]0;%s\\a\"" new_title)
+    |> function | 0 -> () | _ -> printf "Error while setting terminal title"
+;;
+
 (* Function to return the corresponding command to a number *)
 let num_cmd_to_cmd ~cmd_list number =
-  (* Verify that the number is not out of the list *)
-  if (List.length cmd_list) <= number
-  then
-      begin
-          (* TODO Make this printing configurable *)
-          printf "Out of range. All has been launched!\n";
-          ""
-      end
-  else
-    begin
-      let cmd_to_exec = List.nth cmd_list number in
-        match cmd_to_exec with
-            | None -> ""
-            | Some x -> x
-    end
+  (* List.nth return None if out of the list *)
+  List.nth cmd_list number
+  |> function
+      (* If in range of the list, return the corresponding command else return
+       * an empty string after displaying error. *)
+      | Some x -> set_title x; x
+      (* TODO Make this printing configurable *)
+      | None -> printf "Out of range. All has been launched!\n"; ""
 ;;
 
 (* Function to determinate what is the next command to
  * execute. It take the current number from tmp file. *)
 let what_next ~cmd_list =
-  let tmp_file = Tmp_file.read () in
+  let tmp_file = Tmp_file.init () in
   num_cmd_to_cmd ~cmd_list:cmd_list tmp_file.number
 ;;
 

+ 9 - 11
src/tmp_file.ml

@@ -39,6 +39,13 @@ open Core.Std;;
 (* Type of the values *)
 type t = Tmp_biniou_t.tmp_file;;
 
+(* Function to write the tmp file *)
+let write (tmp_file:t) =
+    (* Short name *)
+    let name = Const.tmp_file in
+    let biniou_tmp = Tmp_biniou_b.string_of_tmp_file tmp_file in
+    Out_channel.write_all name ~data:biniou_tmp
+
 (* XXX Using and keyword because each function can call each other *)
 (* Function to read the tmp file *)
 let rec read () =
@@ -51,7 +58,7 @@ let rec read () =
     (* In previous version, the JSON format was used, otherwise the file can
      * have a bad format. In this case, the Ag_ob_run.Error("Read error (1)")
      * exeption is throw. We catch it here *)
-    with Ag_ob_run.Error("Read error (1)") | Bi_inbuf.End_of_input ->
+    with _ ->
         (* If file is not in the right format, delete it and create a new one.
          * Then, read it *)
         printf "Reinitialises tmp file\n"; (* TODO Make it settable *)
@@ -59,17 +66,8 @@ let rec read () =
         create_tmp_file ();
         read ()
 
-(* Function to write the tmp file *)
-and write (tmp_file:t) =
-    (* Short name *)
-    let name = Const.tmp_file in
-    let biniou_tmp = Tmp_biniou_b.string_of_tmp_file tmp_file in
-    Out_channel.write_all name ~data:biniou_tmp
-
 (* Function to create the tmp file *)
 and create_tmp_file () =
-    (* Short name *)
-    let name = Const.tmp_file in
     Tmp_biniou_v.create_tmp_file ~command:[] ~number:0 ()
     (* Convert it to biniou *)
     |> write
@@ -120,7 +118,7 @@ let log ?(func= (+) 1 ) () =
     * if cmd_num is 0, delete tmp file, to reinitialise program
     * if cmd_num is 0>, set to this value
     * else display an error message *)
-let reset cmd_num=
+let reset cmd_num =
     match cmd_num with
     | 0 -> Sys.remove Const.tmp_file; printf "Tmp file removed\n"
     | n when n > 0 ->

+ 46 - 0
src/tmp_file.mli

@@ -0,0 +1,46 @@
+(******************************************************************************)
+(* Copyright © Joly Clément, 2014                                             *)
+(*                                                                            *)
+(*  leowzukw@vmail.me                                                         *)
+(*                                                                            *)
+(*  Ce logiciel est un programme informatique servant à exécuter              *)
+(*  automatiquement des programmes à l'ouverture du terminal.                 *)
+(*                                                                            *)
+(*  Ce logiciel est régi par la licence CeCILL soumise au droit français et   *)
+(*  respectant les principes de diffusion des logiciels libres. Vous pouvez   *)
+(*  utiliser, modifier et/ou redistribuer ce programme sous les conditions    *)
+(*  de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA    *)
+(*  sur le site "http://www.cecill.info".                                     *)
+(*                                                                            *)
+(*  En contrepartie de l'accessibilité au code source et des droits de copie, *)
+(*  de modification et de redistribution accordés par cette licence, il n'est *)
+(*  offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons, *)
+(*  seule une responsabilité restreinte pèse sur l'auteur du programme,  le   *)
+(*  titulaire des droits patrimoniaux et les concédants successifs.           *)
+(*                                                                            *)
+(*  A cet égard  l'attention de l'utilisateur est attirée sur les risques     *)
+(*  associés au chargement,  à l'utilisation,  à la modification et/ou au     *)
+(*  développement et à la reproduction du logiciel par l'utilisateur étant    *)
+(*  donné sa spécificité de logiciel libre, qui peut le rendre complexe à     *)
+(*  manipuler et qui le réserve donc à des développeurs et des professionnels *)
+(*  avertis possédant  des  connaissances  informatiques approfondies.  Les   *)
+(*  utilisateurs sont donc invités à charger  et  tester  l'adéquation  du    *)
+(*  logiciel à leurs besoins dans des conditions permettant d'assurer la      *)
+(*  sécurité de leurs systèmes et ou de leurs données et, plus généralement,  *)
+(*  à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.        *)
+(*                                                                            *)
+(*  Le fait que vous puissiez accéder à cet en-tête signifie que vous avez    *)
+(*  pris connaissance de la licence CeCILL, et que vous en avez accepté les   *)
+(*  termes.                                                                   *)
+(******************************************************************************)
+
+type t = Tmp_biniou_t.tmp_file
+val write : t -> unit
+
+(* Use this function to read tmp file, it will be created if necessary *)
+val init : unit -> t
+
+val verify_key_exist : key:'a -> 'a -> bool
+val is_prog_in_rc : 'a list -> 'a -> bool
+val log : ?func:(int -> int) -> unit -> unit
+val reset : int -> unit