Parcourir la source

Add feature : -d flag allow to delete a command from rc fileo

 - Update CHANGELOG
 - Update command line interface
 - Add a module for this feature
Leo il y a 10 ans
Parent
commit
7af59f1f98
3 fichiers modifiés avec 65 ajouts et 1 suppressions
  1. 1 0
      CHANGELOG.md
  2. 7 1
      src/oclaunch.ml
  3. 57 0
      src/remove_command.ml

+ 1 - 0
CHANGELOG.md

@@ -5,6 +5,7 @@
    + “-r” can now take a number to start from.
    + “-l” list commands of the configuration file with its number.
    + “-a” add the command given on stdin to configuration file.
+   + “-d n” remove the nth command from rc file.
  + Improve some messages.
  + Display run commands in title bar of the windows terminal.
  + New tmp file

+ 7 - 1
src/oclaunch.ml

@@ -69,11 +69,17 @@ let commands =
     +> flag "-a" no_arg
     ~aliases:["-add" ; "--add"]
     ~doc:"Add the command given on stdin to configuration file at a given position. If nothing is given, append it."
+    (* Flag to add a command to rc file, from stdin or directly *)
+    +> flag "-d" no_arg
+    ~aliases:["-delete" ; "--delete"]
+    ~doc:"-d n remove the nth command from configuration file. If n is absent, remove last one"
+
     +> anon (maybe ("Command number" %: int)))
-    (fun reset_tmp list_commands add num_cmd () ->
+    (fun reset_tmp list_commands add delete num_cmd () ->
        (* First try to list or add *)
        if list_commands then List_rc.run ~rc:rc_content
        else if add then Add_command.run ~rc:rc_content num_cmd
+       else if delete then Remove_command.run ~rc:rc_content num_cmd
        else
        match reset_tmp with
          | true -> (* Reset temp file, if nothing is given, put 0 value *)

+ 57 - 0
src/remove_command.ml

@@ -0,0 +1,57 @@
+(******************************************************************************)
+(* 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.                                                                   *)
+(******************************************************************************)
+
+open Core.Std;;
+
+(* Module to remove commands without editing the rc file directly *)
+
+(* Function which add the commands (one per line) ridden on stdin to the rc
+ * file, and then display th new configuration *)
+let run ~(rc:File_com.t) n_to_remove =
+    (* Get actual list of commands *)
+    let actual_list = rc.progs in
+    (* Get nth *)
+    let nth = Option.value n_to_remove
+        ~default:((List.length actual_list) - 1) in
+    (* Remove the nth command *)
+    let new_list = List.filteri actual_list ~f:(fun i _ -> i <> nth) in
+    (* Write new list to rc file *)
+    let updated_rc = { rc with progs = new_list } in
+    File_com.write updated_rc;
+    (* Display the result *)
+    let reread_rc = File_com.init_rc () in
+    List_rc.run ~rc:reread_rc
+;;