Parcourir la source

Merge ../code-mirror into cmd-parsing

Leo il y a 9 ans
Parent
commit
e3e450b5d2
4 fichiers modifiés avec 119 ajouts et 1 suppressions
  1. 5 0
      CHANGELOG.md
  2. 9 1
      src/command_def.ml
  3. 67 0
      src/signals.ml
  4. 38 0
      src/signals.mli

+ 5 - 0
CHANGELOG.md

@@ -1,5 +1,8 @@
 # Changelog of OcLaunch
 
+>Note: XXX Means that the functionality needs test and TODO means that its
+>implementation is partial
+
 ## 0.3.x
 
 ### 0.3.0
@@ -19,6 +22,8 @@
  + Code clean up
  + Add unit tests and clean up them
  + Add licence warning
+ + TODO XXX Add basic signal handling (`--signals`), to relaunch when doing
+   ctrl-C. See issue #14 for known problems
  + Changed tmp file format, the new one would allow to do more things:
    + Restart edited command (reset number of launch)
    + Support multiple configuration file

+ 9 - 1
src/command_def.ml

@@ -49,13 +49,16 @@ type return_arg = {
 let shared_params =
   let open Param in
   (* Way to treat common args *)
-  return (fun verbosity no_color rc_file_name ->
+  return (fun verbosity no_color rc_file_name handle_signal ->
     (* Set the level of verbosity *)
     Const.verbosity := verbosity;
     (* Do not use color *)
     Const.no_color := no_color;
     (* Use given rc file, should run the nth argument if present *)
     Const.rc_file := (Lazy.return rc_file_name);
+    (* Active signal handling *)
+    if handle_signal then
+      Signals.handle ();
 
     (* Debugging *)
     Messages.debug (sprintf "Verbosity set to %i" !Const.verbosity);
@@ -80,6 +83,11 @@ let shared_params =
     <*> flag "-c" (optional_with_default (Lazy.force !Const.rc_file) file)
       ~aliases:["--rc" ; "-rc"]
       ~doc:"file Read configuration from the given file and continue parsing."
+    (* Flag to handle signals *)
+    <*> flag "-s" no_arg
+      ~aliases:["--sinals" ; "-signals"]
+      ~doc:"Handle signals. Warning, this is not much tested and not \
+      implemented the best way."
 ;;
 
 

+ 67 - 0
src/signals.ml

@@ -0,0 +1,67 @@
+(******************************************************************************)
+(* Copyright © Joly Clément, 2015                                             *)
+(*                                                                            *)
+(*  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.                                                                   *)
+(******************************************************************************)
+
+open Core.Std;;
+
+(* Working with signals and behave according to it *)
+(* XXX May use async for this. Here is what the Core's doc say
+ * An OCaml signal handler can run at any time, which introduces all the
+ * semantic complexities of multithreading. *)
+
+(* TODO Finish it! Handle sigint (ctrl-C) and ask to launch next command *)
+let handle_sigint () =
+  let launch_next () =
+    Messages.(confirm "Would you like to launch next command?"
+    |> function
+      | Yes -> (* Launch next *)
+        failwith "TODO Relaunch"
+      | No -> (* Quit *)
+        failwith "TODO Quit"
+    )
+  in
+  let open Signal in
+  Expert.handle int (fun signal ->
+    if signal = int
+    then
+      launch_next ()
+    else ())
+;;
+
+(* Called from external to activate signal handling *)
+let handle () =
+  handle_sigint ()
+;;
+

+ 38 - 0
src/signals.mli

@@ -0,0 +1,38 @@
+(******************************************************************************)
+(* Copyright © Joly Clément, 2015                                             *)
+(*                                                                            *)
+(*  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.                                                                   *)
+(******************************************************************************)
+
+(* Handle signals (i.e. do things according to them) *)
+val handle : unit -> unit