messages.ml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. (******************************************************************************)
  2. (* Copyright © Joly Clément, 2014-2015 *)
  3. (* *)
  4. (* leowzukw@vmail.me *)
  5. (* *)
  6. (* Ce logiciel est un programme informatique servant à exécuter *)
  7. (* automatiquement des programmes à l'ouverture du terminal. *)
  8. (* *)
  9. (* Ce logiciel est régi par la licence CeCILL soumise au droit français et *)
  10. (* respectant les principes de diffusion des logiciels libres. Vous pouvez *)
  11. (* utiliser, modifier et/ou redistribuer ce programme sous les conditions *)
  12. (* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA *)
  13. (* sur le site "http://www.cecill.info". *)
  14. (* *)
  15. (* En contrepartie de l'accessibilité au code source et des droits de copie, *)
  16. (* de modification et de redistribution accordés par cette licence, il n'est *)
  17. (* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, *)
  18. (* seule une responsabilité restreinte pèse sur l'auteur du programme, le *)
  19. (* titulaire des droits patrimoniaux et les concédants successifs. *)
  20. (* *)
  21. (* A cet égard l'attention de l'utilisateur est attirée sur les risques *)
  22. (* associés au chargement, à l'utilisation, à la modification et/ou au *)
  23. (* développement et à la reproduction du logiciel par l'utilisateur étant *)
  24. (* donné sa spécificité de logiciel libre, qui peut le rendre complexe à *)
  25. (* manipuler et qui le réserve donc à des développeurs et des professionnels *)
  26. (* avertis possédant des connaissances informatiques approfondies. Les *)
  27. (* utilisateurs sont donc invités à charger et tester l'adéquation du *)
  28. (* logiciel à leurs besoins dans des conditions permettant d'assurer la *)
  29. (* sécurité de leurs systèmes et ou de leurs données et, plus généralement, *)
  30. (* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. *)
  31. (* *)
  32. (* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez *)
  33. (* pris connaissance de la licence CeCILL, et que vous en avez accepté les *)
  34. (* termes. *)
  35. (******************************************************************************)
  36. open Core.Std;;
  37. (* Modules to manage output messages, with color *)
  38. (* TODO
  39. * allow to display bold & underlined messages *)
  40. (* Store whether a message was already displayed to reset if necessary (see
  41. * function reset) *)
  42. let already = ref false
  43. (* Function to keep a trace of colored messages *)
  44. let log_already () =
  45. match !already with
  46. | false -> already := true
  47. | true -> ()
  48. ;;
  49. (* Types corresponding to some colors & style of the Core_extended.Color_print
  50. * library *)
  51. type color =
  52. | Green
  53. | Red
  54. | Yellow
  55. | White
  56. | Plum
  57. ;;
  58. type style =
  59. | Bold
  60. | Underline
  61. | Normal
  62. ;;
  63. (* General function to print things *)
  64. let print ~color ~style message =
  65. let open Core_extended in
  66. match !Const.no_color with
  67. | true -> printf "%s" message
  68. | false -> begin (* Use colors *)
  69. (* Log that we used colored messages *)
  70. log_already ();
  71. (* This code create proper escapement to display text with bold/color... *)
  72. color |>
  73. (function
  74. | Green -> Color_print.color ~color:`Green message
  75. | Red -> Color_print.color ~color:`Red message
  76. | Yellow -> Color_print.color ~color:`Yellow message
  77. | White -> Color_print.color ~color:`White message
  78. | Plum -> Color_print.color ~color:`Plum message
  79. ) |> (* Finaly print escaped string *)
  80. (fun colored_msg ->
  81. match style with
  82. | Bold -> Color_print.boldprintf "%s" colored_msg
  83. | Underline -> Color_print.underlineprintf "%s" colored_msg
  84. | Normal -> printf "%s" colored_msg
  85. )
  86. end
  87. ;;
  88. (* Behave in a conform way to verbosity
  89. * The higher is the number, the more important the message is, the lower
  90. * verbosity value display it *)
  91. let check_verbosity ~f function_number =
  92. match function_number <= !Const.verbosity with
  93. true -> (* Display the message *)
  94. f ()
  95. | false -> ()
  96. ;;
  97. (* Print debugging, information, important... messages *)
  98. let debug message =
  99. check_verbosity ~f:(fun () ->
  100. let mess = (Time.now()|> Time.to_string) ^ " " ^ message ^ "\n" in
  101. print ~color:Plum ~style:Underline mess
  102. ) 5
  103. ;;
  104. let info message =
  105. check_verbosity ~f:(fun () ->
  106. let mess = message ^ "\n" in
  107. print ~color:White ~style:Normal mess
  108. ) 3
  109. ;;
  110. let warning message =
  111. check_verbosity ~f:(fun () ->
  112. let mess = message ^ "\n" in
  113. print ~color:Red ~style:Bold mess
  114. ) 1
  115. ;;
  116. let ok message =
  117. check_verbosity ~f:(fun () ->
  118. let mess = message ^ "\n" in
  119. print ~color:Green ~style:Bold mess
  120. ) 2
  121. ;;
  122. let tips message =
  123. check_verbosity ~f:(fun () ->
  124. let mess = message ^ "\n" in
  125. print ~color:Yellow ~style:Normal mess
  126. ) 4
  127. ;;
  128. (* Reset printing, to avoid color problem on some terminal (Konsole), the *)
  129. let reset () =
  130. match !already with
  131. | true -> debug "Resetted colors";
  132. Core_extended.Color_print.normal "" |> printf "%s\n"
  133. | false -> debug "Not resetted"; ()
  134. ;;